IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Les logiciels malveillants sont plus difficiles à détecter lorsqu'ils sont écrits dans des langages obscurs ou moins populaires comme Delphi et Haskell,
Ils échappent plus facilement à l'analyse statique

Le , par Mathis Lucas

26PARTAGES

11  0 
Les logiciels malveillants sont plus difficiles à détecter lorsqu'ils sont écrits dans des langages obscurs ou moins populaires comme Delphi et Haskell
ils échappent plus facilement à l'analyse statique

Une étude illustre comment les développeurs de maliciels s'appuient sur des langages moins populaires comme Delphi ou Haskell pour échapper à la détection. Les auteurs ont examiné des logiciels malveillants récents pour mieux comprendre pourquoi certains d'entre eux échappent à l'analyse statique, une technique d'essai des logiciels qui permet de comprendre le code sans l'exécuter. Ils ont découvert que les créateurs de maliciels s'efforcent d'obscurcir leur code ou d'appliquer des techniques anti-sandboxing. Les maliciels écrits en C restent les plus rependus, mais les acteurs de la menace incluent de plus en plus de langages atypiques.

Comment les développeurs de logiciels malveillants échappent à la détection

Les logiciels malveillants sont nombreux. Selon l'évaluateur d'antivirus AV-TEST, 27 millions de nouvelles instances de codes malveillants ont déjà été découvertes rien qu'en 2025. L'analyse statique est l'un des principaux moyens utilisés pour identifier les codes malveillants. Les créateurs de maliciels le savent et nombre d'entre eux s'efforcent d'obscurcir leur code ou d'appliquer des techniques anti-sandboxing ou anti-débogage pour échapper à la détection.

Selon l'étude mentionnée ci-dessus, l'un des moyens utilisés par les acteurs de la menace pour échapper à la détection consiste simplement à utiliser un langage de programmation qui n'est pas largement utilisé pour les logiciels malveillants, qui ont tendance à être écrits en langage C ou en langage C++.


Figure 1 : Répartition des 5 premiers langages de programmation par année

L'étude a été menée par des informaticiens affiliés à l'université du Pirée et au centre de recherche Athena, en Grèce, ainsi qu'à l'université technologique de Delft, aux Pays-Bas. Les auteurs ont partagé leurs conclusions dans un document préimprimé intitulé « Coding Malware in Fancy Programming Languages for Fun and Profit ». Ils rapportent que les acteurs de la menace se tournent vers Delphi, Haskell et d'autres langages similaires pour échapper à la détection.

« Depuis des années, les groupes de ransomwares adoptent des langages plus récents et non conventionnels pour rendre la rétro-ingénierie et la détection plus difficiles. En outre, divers acteurs de la menace ont utilisé cette approche, en employant un large éventail de langages de programmation et de techniques pour obscurcir leur code malveillant », expliquent les auteurs de l'étude. L'équipe a cité plusieurs exemples de ce phénomène dans son rapport.

Ils ont rappelé notamment la frustration des chercheurs en cybersécurité face aux binaires Visual Basic 6, la présence d'une couche d'obscurcissement Lua dans le logiciel malveillant Flame de 2012 et le virus Grip, qui contenait un interpréteur Brainfuck codé en Assembleur pour générer ses codes clés.

La réécriture des maliciels dans un nouveau langage complique la détection

Selon le rapport de l'étude, même si les logiciels malveillants écrits en C restent les plus répandus, les opérateurs de logiciels malveillants, principalement les groupes de pirates informatiques connus tels qu'APT29, incluent de plus en plus de langages de programmation de logiciels malveillants atypiques dans leur arsenal. Par exemple, l'acteur de la menace APT29 a récemment utilisé Python dans son logiciel malveillant Masepie pour attaquer l'Ukraine.


Figure 2 : Répartition des principaux langages de programmation des échantillons d'APT par année

En outre, selon le rapport de l'étude, dans son logiciel malveillant Zebrocy, l'acteur de la menace APT29 a utilisé un mélange des langages Delphi, Python, C# et Go. De même, le ransomware Akira est passé de C++ à Rust, le ransomware BlackByte est passé de C# à Go, et Hive a été porté à Rust.

Dans une certaine mesure, les chercheurs estiment qu'il s'agit simplement d'une variante de la sécurité par l'obscurité : lorsque moins de personnes sont familiarisées avec un langage donné, on peut s'attendre à moins de détection manuelle et les outils automatisés auront moins d'échantillons.

Les auteurs de l'étude ont également alerté sur une autre découverte. Selon le rapport, les mécanismes de détection automatique basés sur les signatures des logiciels malveillants identifiés ne fonctionneront pas lorsque les logiciels malveillants ont été réécrits dans un autre langage. Les chercheurs notent que certains langages, comme Haskell et Lisp, utilisent un modèle d'exécution différent de celui des logiciels malveillants développés en langage C.

D'autres langages, tels que Dart et Go, peuvent ajouter un grand nombre de fonctions à l'exécutable dans le cadre de leur environnement standard, ce qui complique même les programmes les plus simples. Pour mieux comprendre pourquoi certains langages résistent mieux à l'analyse que d'autres, l'équipe a examiné un ensemble de près de 400 000 exécutables Windows provenant de MalwareBazaar, dédié au partage d'échantillons de logiciels malveillants.

Les chercheurs ont constaté que le langage de programmation utilisé affecte non seulement le taux de détection des logiciels malveillants, mais également que le choix du compilateur fait une différence. L'équipe de recherche explique notamment :

Citation Envoyé par Extrait du rapport de l'étude


Alors que l'on pourrait s'attendre à ce que les langages de programmation les moins utilisés, comme Rust et Nim, aient des taux de détection plus faibles parce que la rareté des échantillons ne permettrait pas de créer des règles robustes, l'utilisation de compilateurs non largement répandus, comme Pelles C, Embarcadero Delphi et Tiny C, a un impact plus important sur le taux de détection.

Après avoir examiné un ensemble de données plus limité, axé sur les APT (Advanced Persistent Threat - menaces persistantes avancées), l'équipe de recherche affirme qu'il est clair qu'au fil du temps, les auteurs d'APT ont diversifié leur choix de langages de programmation et de compilateurs.

L'un des moyens utilisés par les chercheurs pour examiner les différences entre les logiciels malveillants et les langages de programmation a consisté à évaluer la capacité des binaires à résister à la recherche de motifs de shellcodes, c'est-à-dire à la recherche d'ensembles d'instructions malveillantes.

Les maliciels sont plus faciles à trouver dans les langages les plus populaires

Les résultats ont montré des variations significatives d'un langage à l'autre, et ont souligné pourquoi les logiciels malveillants sont plus faciles à trouver dans les langages plus populaires. « Les échantillons écrits dans des langages tels que C et C++ conservaient généralement tous les octets du shellcode dans un ordre séquentiel ou présentaient un écart fixe entre les octets, ce qui permettait une détection relativement simple », expliquent les auteurs.

« Mais d'autres langages présentaient une fragmentation importante des octets et des variations dans la disposition de la mémoire, ce qui compliquait la détection statique », ont-ils ajouté. Ils citent Rust, Phix, Lisp et Haskell comme des langages qui distribuent les octets de shellcode de manière irrégulière ou non évidente.

Selon l'équipe de recherche, il existe d'autres raisons pour lesquelles les langages les moins populaires peuvent rendre plus difficile la détection des logiciels malveillants, comme la complexité des fonctions exécutées, le nombre d'appels indirects et de sauts exécutés, et le nombre de threads créés.

Citation Envoyé par Extrait du rapport de l'étude


Les logiciels malveillants sont principalement écrits en C/C++ et compilés avec le compilateur de Microsoft. Cependant, notre travail montre pratiquement qu'en déplaçant la base de code vers un autre langage de programmation ou compilateur moins utilisé, les auteurs de logiciels malveillants peuvent réduire de manière significative le taux de détection de leurs binaires tout en augmentant l'effort de rétro-ingénierie des analystes de logiciels malveillants.

Ainsi, selon les auteurs, le code des langages les moins populaires mérite plus d'attention de la part de la communauté de la sécurité et des outils de détection plus pertinents. L'étude a été soutenue par la Commission européenne dans le cadre du programme Horizon Europe, qui fait partie du projet SafeHorizon.

Source : rapport de l'étude (PDF)

Et vous ?

Quel est votre avis sur le sujet ?

Voir aussi

Go et WebAssembly, une alternative prometteuse à React ? Dagger tente l'approche pour optimiser les performances de son frontend et unifier sa base de code

Les développeurs sont de plus en plus confiants en matière de cybersécurité, mais y consacrent trop de temps, 72 % d'entre eux déclarant passer plus de 17 heures par semaine à des tâches liées à la sécurité

Nouvelles exigences de sécurité adoptées par le secteur des certificats HTTPS, pour garantir des connexions réseau sûres et fiables
Vous avez lu gratuitement 9 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Mingolito
Expert éminent https://www.developpez.com
Le 02/04/2025 à 19:41
Oui et non, Delphi c'est un RAD, donc un EDI, mais aussi un langage, parfois appelé "Delphi Langage".
Oui en théorie c'est une sorte de "Pascal orienté objet", mais c'est une invention de (feu) Borland pas un standard, donc en fait c'est le "Delphi langage".
6  1 
Avatar de Mingolito
Expert éminent https://www.developpez.com
Le 03/04/2025 à 15:40
Oui merci je sais tout cela mais cela ne contredit en rien mon explication.

Le langage intégré dans Delphi, le Delphi langage dérivé du Pascal est une invention de Borland uniquement pour Delphi : "Le Pascal Objet prend un nouvel essor en 1995 avec la sortie de Delphi 1, toujours à l'initiative de Borland. "
Delphi est à la fois un langage de programmation orienté objet et un environnement de développement intégré (EDI) pour ce langage. et encore ici par exemple : "Delphi est à la fois le nom d’un environnement de développement et le nom d’un langage de programmation."


Tu as raison d'écrire que Delphi est un RAD, ou encore un EDI, mais depuis la sortie de Delphi (et oui moi aussi j'étais la) il est possible et même d'usage de dire que Delphi est aussi un langage, c'est possible aussi d'écrire "Delphi langage" pour être plus précis, et en effet Delphi Langage c'est du Pascal orienté objet.

Le langage Pascal a été normé à l'époque avec ISO 7185.
Le Delphi langage n'est pas du Pascal normé ISO 7185, c'est un dérivé du Pascal ISO 7185, mais c'est un langage propriétaire, donc le Delphi langage.

Par exemple la VCL c'est une pure invention Borland, rien à voir avec la norme ISO Pascal, je cite : "A key aim of the VCL combined with the Delphi language was to change the requirements of building a user interface"

Avant la sortie de Delphi c'était pareil avec les Turbos, le Turbo Pascal est un EDI, et un langage, le Turbo Pascal est dérivé du Pascal ISO 7185, mais c'est en vérité aussi un langage, le Turbo Pascal, de (feu) Borland.

Historique :

1968 : Début du Pascal
1974 : The ISO 7185 was stated to be a clarification of Wirth's language
1983 : the language was standardized in the international standard IEC/ISO 7185
1990 : ISO/IEC 10206: Extended Pascal
1995 : Delphi 1 est édité par Borland.

Le Delphi langage de Delphi n'a pas de norme ISO Pascal, c'est du Delphi langage, une invention de Borland, basée sur le Pascal.
5  1 
Avatar de
https://www.developpez.com
Le 03/04/2025 à 20:23
Citation Envoyé par Mingolito Voir le message
Oui merci je sais tout cela mais cela ne contredit en rien mon explication.

Le langage intégré dans Delphi, le Delphi langage dérivé du Pascal est une invention de Borland uniquement pour Delphi : "Le Pascal Objet prend un nouvel essor en 1995 avec la sortie de Delphi 1, toujours à l'initiative de Borland. "
Delphi est à la fois un langage de programmation orienté objet et un environnement de développement intégré (EDI) pour ce langage. et encore ici par exemple : "Delphi est à la fois le nom d’un environnement de développement et le nom d’un langage de programmation."


Tu as raison d'écrire que Delphi est un RAD, ou encore un EDI, mais depuis la sortie de Delphi (et oui moi aussi j'étais la) il est possible et même d'usage de dire que Delphi est aussi un langage, c'est possible aussi d'écrire "Delphi langage" pour être plus précis, et en effet Delphi Langage c'est du Pascal orienté objet.

Le langage Pascal a été normé à l'époque avec ISO 7185.
Le Delphi langage n'est pas du Pascal normé ISO 7185, c'est un dérivé du Pascal ISO 7185, mais c'est un langage propriétaire, donc le Delphi langage.

Par exemple la VCL c'est une pure invention Borland, rien à voir avec la norme ISO Pascal, je cite : "A key aim of the VCL combined with the Delphi language was to change the requirements of building a user interface"

Avant la sortie de Delphi c'était pareil avec les Turbos, le Turbo Pascal est un EDI, et un langage, le Turbo Pascal est dérivé du Pascal ISO 7185, mais c'est en vérité aussi un langage, le Turbo Pascal, de (feu) Borland.

Historique :

1968 : Début du Pascal
1974 : The ISO 7185 was stated to be a clarification of Wirth's language
1983 : the language was standardized in the international standard IEC/ISO 7185
1990 : ISO/IEC 10206: Extended Pascal
1995 : Delphi 1 est édité par Borland.

Le Delphi langage de Delphi n'a pas de norme ISO Pascal, c'est du Delphi langage, une invention de Borland, basée sur le Pascal.
Merci d'avoir partagé tous ces détails, mais avant tout, je tiens à corriger certaines informations :
  1. Les usages ne font pas la norme et ne donnent pas de légitimité à moins de passer par la case normalisation.
  2. Pascal n'est pas un langage propriétaire, il est dans le domaine public, toute personne ayant les compétences techniques lui permettant d'écrire un interpréteur et un compilateur du langage Pascal (en se basant sur les normes et références du langage) est libre de le faire.
  3. Si mes souvenirs sont bons, la VCL est la bibliothèque graphique utilisée par Delphi et il me semble qu'elle était écrite en Pascal Objet et en Assembleur, je ne comprends pas en quoi cette dernière est pertinente pour démontrer que cet EDI basé sur le langage Pascal Objet puisse être considéré comme étant un nouveau langage informatique.
  4. Le Turbo Pascal n'est pas un langage, mais un outil de développement + compilateur pour le Pascal ou le Pascal Orienté Objet.


En ce qui me concerne, lorsqu'on m'assure qu'une méthode ou qu'un outil de programmation est un langage de programmation informatique, je demande à ce qu'on me communique la norme et références "Specification Request" relatives à ce nouveau langage, comme c'est le cas par exemple pour les langages Pascal, C, C++, Java, C#, etc.

Ex :
Pascal, C, C++ : https://www.iso.org/fr/committee/452.../1/u/0/w/0/d/0
Java : https://www.jcp.org/en/jsr/overview
C# : https://learn.microsoft.com/fr-fr/do...tals/standards

Ce type d'approche est considéré par les éditeurs et les clients finaux comme étant une garantie de pérennité et de sérieux de la part des initiateurs d'un projet de langage informatique et cela compte énormément dans le cadre des projets de développements informatiques.
Maintenant, mes informations ne sont pas très à jour concernant Delphi peut-être que ce dernier a été normalisé en tant que langage informatique.
Si vous avez cette information, je suis preneur.
Merci.
0  0 
Avatar de CosmoKnacki
Expert éminent https://www.developpez.com
Le 05/04/2025 à 22:26
May the Malice be with you.
0  0 
Avatar de
https://www.developpez.com
Le 03/04/2025 à 13:38
Citation Envoyé par Mingolito Voir le message
Oui et non, Delphi c'est un RAD, donc un EDI, mais aussi un langage, parfois appelé "Delphi Langage".
Oui en théorie c'est une sorte de "Pascal orienté objet", mais c'est une invention de (feu) Borland pas un standard, donc en fait c'est le "Delphi langage".
Avec tout mon respect, je me permets de vous contredire.
Delphi est un EDI englobant un ensemble de bibliothèques écrites pour une bonne partie en Pascal Objet et en Assembleur pour les parties bas niveau, il est l'évolution naturelle de Borland Turbo Pascal et cet EDI utilise le langage Pascal Orienté Objet depuis ses premières versions, bien avant qu'Embarcadero ne rachète cet outil de Borland.
Je tiens aussi à préciser que l'informatique est binaire, un outil ne peut pas être quelque chose et son inverse, on ne peut donc pas commencer une phrase par "Oui et non" sauf si nous parlons d'informatique quantique, mais je pense que c'est trop prématuré, vu qu'elle n'est qu'à ses balbutiements.
Si je me permets d'insister, c'est parce que j'ai codé avec les produits Borland depuis leurs premières versions. J'ai aussi utilisé Delphi depuis ses premières versions sur certains de mes projets professionnels, jusqu'à son rachat par Embarcadero.

PS : Pascal est un langage informatique qui existe depuis 1970, 13 ans avant l'existance de la société Borland.
Il suffit de consulter leurs pages Wikipedia pour enrichir sa culture générale.
Langage Pascal : https://fr.wikipedia.org/wiki/Pascal_(langage)
Société Borland : https://fr.wikipedia.org/wiki/Borland
0  1 
Avatar de
https://www.developpez.com
Le 02/04/2025 à 16:21
Delphi n'est pas un langage, c'est un RAD.
Le langage, c'est le Pascal orienté objet.
0  5