Dans le cadre de ses activités CTI, Chapsvision-Cybergov vous propose de découvrir une autre facette de la lutte contre la cybercriminalité : l’automatisation des outils d’analyse de malwares.
Bienvenue sur le premier volet de notre série d’articles consacrés aux malwares .NET et à l’extraction de leurs configurations !
Quelle est la place de .NET dans le paysage des malwares ?
Bien que la majorité des programmes malveillants soient développés en C/C++, on observe depuis quelques années une nette progression des malwares codés en C# et VB.NET, les deux langages phares du framework .NET.
Lancée par Microsoft en 2002, cette plateforme de développement offre de nombreux avantages aux cybercriminels :
- Native à Windows, l’OS le plus ciblé par les attaques
- Dotée d’une bibliothèque de fonctions riche et performante
- Permet une grande portabilité, grâce à l’ajout de .NET Core, qui permet d’exporter les applications vers Linux et MacOS.
Parmi les familles de malwares .NET les plus connues, on peut citer LockBit, un dangereux ransomware en activité dans 120 pays, ou encore Emotet, un cheval de Troie bancaire dont le coût de nettoyage, par incident, peut s’élever à 1 million de dollars.
Mais quelle est l’ampleur de la menace actuelle ? Que font les nouveaux malwares .NET et comment se protègent-ils de l’analyse ? Faisons un tour d’horizon de leurs capacités actuelles.
Le top 6 des malwares les plus vus sur la plateforme UnpacMe (en 2023-2024) est composé pour moitié de malwares .NET :
RedLine Stealer, AgentTesla et Snake Keylogger utilisent tous .NET
source : https://blog.unpac.me/2024/01/30//malware-trends-yearly/
Leurs activités sont variées, incluant le vol et l’exfiltration de mots de passe, l’enregistrement de touches de clavier, et les captures d’écran. On note une prévalence de loaders/droppers, de RAT et de stealers, souvent intégrés dans des chaînes d’infection complexes : le malware CrackedCantil, un faux logiciel IDA Pro cracké, utilise RedLine Stealer en outil de collecte d’information, au profit des opérations d’un cryptominer, d’un proxy bot, ainsi que d’un ransomware en phase finale d’infection.
L’augmentation du nombre de malwares .NET est également favorisée par l’utilisation croissante d’outils de développement, comme VScode par exemple, qui compilent automatiquement pour du 64-bits. Bien que le marché soit actuellement dominé par des logiciels 32-bits, .NET s’impose parmi les langages les plus utilisés pour le 64-bits (hors C/C++) :
Quels sont les défis techniques à relever lors de l’analyse d’un binaire .NET ?
La plateforme .NET propose des fonctionnalités avancées qui sont régulièrement détournées pour permettre au malware d’échapper à la détection et complexifier son analyse. La réflexion (ou code reflection), en particulier, consiste à consulter les métadonnées d’un fichier, telles que des noms de classe ou le type d’une variable, pour ensuite générer du code à la volée, voire le modifier à l’exécution : le code offensif n’est donc pas nécessairement présent, mais il peut être appelé par des fonctions qui, grâces à ces métadonnées, peuvent charger dynamiquement les fichiers .dll ou .exe malveillants.
Ainsi, l’analyse statique peut devenir particulièrement complexe, puisque les indicateurs forts d’activité suspecte n’apparaissent qu’à l’exécution du binaire. Ajoutons à cela le problème de l’obfuscation : l’écosystème .NET étant très riche, il est soutenu par une communauté active qui innove fréquemment afin de fluidifier la création d’application, mais aussi de les protéger.
En général, le reproche fait aux applications .NET touche essentiellement à la décompilation très abordable de leur code, notamment grâce à des outils tels que dnSpy ou ILSpy. Les outils d’obfuscation les plus connus (.NET Reactor, ConfuserEx…) ont néanmoins réussi à se sophistiquer en proposant une obfuscation à plusieurs niveaux :
Quelques techniques d’obfuscation proposées par Eazfuscator, un logiciel gratuit.
A quoi ressemble un code obfusqué après application de quelques-unes des techniques susmentionnées ?
Voici deux exemples proposés par Dotfuscator, dont la version gratuite (Dotfuscator Community) a été intégrée à VScode :
1. Chiffrement d’une chaîne de caractère
2. Obfuscation du flot d'exécution
Récemment, on a pu observer un certain nombre de malwares .NET utilisant des méthodes d’obfuscation avancées et assez inhabituelles pour la plateforme. En Ukraine, depuis le début de la guerre, un wiper du nom de DoubleZero et un loader du nom de Malvirt se sont distingués par leur utilisation :
- Du control flow flattening – DoubleZero remplace la hiérarchie du code (les structures if/else, boucles for) par quelque chose de plus linéaire. Le résultat donne un code difficile à suivre, sans logique claire.
- De la virtualisation du code – MalVirt utilise KoiVM, un outil qui remplace le code IL (Intermediate Language), propre à .NET, par un code dont l’interprétation dépend de la machine virtuelle utilisée, ce qui le rend incompréhensible pour un décompilateur classique.
Enfin, le cas de Ducktail, un loader/stealer .NET vietnamien aperçu en début d’année 2024, nous apporte un autre élément innovateur : la compilation AOT (Ahead-Of-Time). Contrairement à la compilation JIT (Just-In-Time), qui compile le code source au moment de son exécution et favorise la portabilité entre différentes plateformes, la compilation AOT compile directement en assembleur natif, ciblant ainsi une architecture spécifique.
Si les cybercriminels optent pour cette approche, ils sacrifient la flexibilité inter plateforme pour optimiser la performance et la furtivité. En compilant en code machine natif, le malware devient plus difficile à analyser, car il échappe aux outils traditionnels de décompilation et d’analyse statique du .NET. Le résultat est un binaire aussi opaque que ceux créés en C/C++.
Ces niveaux de sophistication, jusque-là rares dans l’écosystème .NET, offrent aux attaquants un atout redoutable : une efficacité accrue avec un effort minimal, permettant de contourner certaines défenses et de se fondre plus aisément dans la sphère des cyberattaques.
Quelles solutions face à la menace ?
Face au nombre croissant de malwares .NET, ainsi que le caractère de plus en plus sophistiqué des techniques d’obfuscation, il semble pertinent de réfléchir à la création de nouveaux outils pour accélérer la détection, l’analyse et la classification des .NET malveillants.
Les outils existants (DetectItEasy pour identifier le packer et/ou l’obfuscateur, de4dot pour désobfusquer, GarbageMan pour extraire des informations depuis le tas, OldRod pour dévirtualiser le code créé par KoiVM, entre autres) peuvent manquer de mises à jour. En outre, aucun n’est adéquat pour traiter un grand nombre d’échantillons.
Par son approche basée sur l’exploitation efficiente de la donnée, le pôle Smart-CTI se penche donc sur la réalisation d’un outil qui :
- S’utiliserait à grande échelle,
- Automatiserait l’extraction de configuration de plusieurs familles de malwares,
- Réutiliserait les données extraites pour produire une vue d’ensemble de l’interaction entre les différents malwares.
Nos équipes réfléchissent sans cesse à la création et à l’optimisation d’extracteurs automatiques d’IoC (Indicators of Compromise), en pensant tout particulièrement à leur intégration dans une boîte à outils complète et intuitive. Le but est de fournir des données claires, enrichies par leur mise en relation.
L’extraction de configuration des malwares est une arme redoutable dans l’arsenal des analystes de sécurité. En dévoilant des paramètres critiques, tels que les adresses IP des serveurs de commande et contrôle, les clés de chiffrement ou les fonctionnalités activées, elle permet de disséquer rapidement le comportement du malware, d’identifier son infrastructure et de développer des contre-mesures efficaces. Chaque échantillon analysé se transforme en une mine d’informations tactiques, permettant non seulement de bloquer la menace immédiate, mais aussi d’anticiper les futures attaques et de renforcer la résilience globale des systèmes de défense.