
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 :

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.

Source : rapport de l'étude (PDF)
Et vous ?

Voir aussi



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.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.