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

20PARTAGES

3  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 3 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 !