Malwares : les codeurs surveillent leur langage

malwares langages programmation

BlackBerry attire l’attention sur ce qui pousse les concepteurs de malwares à basculer entre langages de programmation.

Comment rendre un malware moins détectable ? En changeant de langage de programmation. BlackBerry, en tout cas, l’affirme, recherche à l’appui. La tendance dominante, explique-t-il, ne consiste pas tant à réécrire les malwares que les modules qui les chargent en mémoire (loaders) ou les exécutent (droppers).

Qu’on réécrive l’un ou l’autre composant, le phénomène n’a rien de nouveau, reconnaît le groupe canadien. Et de mentionner la « vieille garde » qu’on avait vue émerger au début des années 2000. Ses représentants : VB6 et Delphi, que les cybercriminels utilisaient en alternative aux langages les plus communs. En particulier de par leur forte résistance à la rétroingénierie – notamment pour Visual Basic.

BlackBerry a concentré son analyse sur quatre des langages qui ont pris le relais : D, Go, Nim et Rust. Tous présentent l’avantage de pouvoir être compilés sur un large éventail de systèmes et d’architectures. Ils apportent par ailleurs des garanties de sécurité… importantes pour les développeurs de malwares. On se rappellera, en guise d’exemple, d’une version d’Emotet mise hors d’état de nuire après la découverte d’une vulnérabilité (dépassement de tampon) dans la routine d’installation du binaire principal.

Des quatre langages étudiés, D est celui qui présente le moins de cas documentés d’utilisation malveillante. On considère que Vovalex est la première famille de ransomwares à en avoir fait usage. Détectée début 2021, elle se propage par l’intermédiaire de versions vérolées d’applications populaires, dont CCleaner.
On trouve aussi du langage D dans un loader récemment exploité en association avec le trojan RemcosRAT. Ainsi que du côté des éditeurs de solutions de sécurité. Tout du moins chez FireEye, avec la backdoor DShell, qui a fuité fin 2020 avec d’autres outils de la Red Team de l’entreprise américaine.

Des ransomwares dans tous les langages

Qu’en est-il de Nim ? Il est notamment à la base d’une variante – découverte début 2021 – de la backdoor BazarLoader. Ainsi que d’un membre de la famille Zebrocy, dont on prête l’usage au groupe APT28*. Lequel s’est distingué en piratant le Parti démocrate américain avant les présidentielles 2016.
Dans la famille Nim, on trouve aussi des ransomwares, dont DeroHE, découvert en début d’année. Et divers loaders pour Cobalt Strike.

Rust est né dans les mêmes années que D et Nim, mais bénéficie d’une plus grande popularité. Et du soutien de grands noms, après s’être développé sous l’égide de la fondation Mozilla. Il a servi autant à réécrire des malwares (comme le loader Buer, à l’origine codé en C, ou la backdoor TeleBots, utilisée contre le réseau électrique ukrainien) que des droppers (par exemple, pour le RAT NanoCore).

En complément à ces différents langages se sont développées des méthodes de masquage. Pour Nim, il y a par exemple denim ; pour Rust, obfstr. Avec Go, il y a Gobfuscate. Entre autres, elle hache les noms de variables et dissimule des chaînes en les remplaçant par des fonctions. Des variantes du ransomware EKANS et du RAT ChaChi – exploité par les opérateurs de Mespinoza – en font usage.
Il existe des plug-in spécifiques pour détecter Gobfuscate, mais uniquement dans certains outils d’analyse, comme Cutter et Binary Ninja.

* La première version de Zebrocy était essentiellement codée en Delphi. Des réécritures en Nim et en Go ont émergé depuis.

Illustration principale © James Thew – Adobe Stock