Pour la majoritĂ© des utilisateurs, un antivirus scanne un fichier et dĂ©tecte la prĂ©sence de code malveillant grĂące aux signatures de dĂ©tection. Si cela fonctionne encore, aujourdâhui, la complexitĂ© des malwares fait que les antivirus doivent intĂ©grer plusieurs dĂ©fenses.
En effet, les techniques dâoffuscation avancĂ©es utilisĂ©es par les trojans et autres malwares ont pour but de cacher le code malveillant , de retarder lâanalyse par les antivirus ou les analystes, et de contourner les systĂšmes de dĂ©tection . Le but est donc de se cacher des antivirus pour Ă©chapper aux dĂ©tections.
Dans ce guide, je passe en revue les méthodes et techniques utilisées par les logiciels malveillants pour se dissimuler ou tromper les antivirus.
Chiffrement et encodage
Pour masquer les Ă©lĂ©ments les plus rĂ©vĂ©lateurs dâun malware, les attaquants chiffrent ou encodent massivement le code et les donnĂ©es embarquĂ©es. Les chaĂźnes de texte en clair sont rarissimes dans les malwares modernes : adresses URL de C2, noms dâAPI Windows, chemins de fichiers⊠tout est souvent cachĂ© derriĂšre des encodages ou un chiffrement custom. Le but est de brouiller le code afin quâaucune partie rĂ©vĂ©latrice dâun code malveillant ne soit pas facilement dĂ©tectable. Par exemple, un trojan comme Pikabot remplace les noms de fonctions et variables par des chaĂźnes alĂ©atoires ou codĂ©es, et chiffre ses chaĂźnes de caractĂšres sensibles (telles que les URLs de commande & contrĂŽle) qui ne sont dĂ©chiffrĂ©es quâau moment de leur utilisation. De mĂȘme, les documents Office piĂ©gĂ©s (macros VBA) ou scripts malveillants insĂšrent des chaĂźnes hexadĂ©cimales ou du Base64 Ă la place de commandes lisibles pour Ă©viter les dĂ©tections simples.
LâEncodage Base64 est une mĂ©thode trĂšs rĂ©pandue dâobfuscation de commandes script. Par exemple, PowerShell permet dâexĂ©cuter un code encodĂ© en Base64 via le paramĂštre -EncodedCommand
. Les malwares en abusent pour cacher des instructions malveillantes dans un long texte illisible. Plusieurs campagnes ont utilisĂ© des commandes PowerShell encodĂ©es en base64 pour dissimuler les charges utiles. Un cas courant : un downloader lance PowerShell avec une commande encodĂ©e qui va Ă son tour tĂ©lĂ©charger et exĂ©cuter du code distant. Voici un exemple illustratif dâune commande PowerShell chiffrĂ©e en Base64.
CĂŽtĂ© JavaScript, on retrouve des approches similaires. Le trojan Astaroth (vers 2019â2020, toujours actif en 2022) utilisait du code JScript obfusquĂ© et alĂ©atoire dans des fichiers XSL : son script malveillant construisait les chaĂźnes de caractĂšres critiques via String.fromCharCode
au lieu de les Ă©crire en clair, Ă©vitant ainsi dâexposer des mots-clĂ©s suspects (noms de processus, commandes). De plus, Astaroth employait une fonction de randomisation pour modifier lĂ©gĂšrement son code Ă chaque exĂ©cution, si bien que la structure du script variait constamment, bien que sa finalitĂ© reste la mĂȘme. Ces techniques combinĂ©es (gĂ©nĂ©ration dynamique de strings et permutation alĂ©atoire) rendaient le JScript malveillant unique Ă chaque run , contournant les signatures et retardant lâanalyse manuelle.
Au-delĂ de lâencodage, les malwares chiffrent leur charge utile binaire ou certaines portions de code avec des clĂ©s secrĂštes. Un schĂ©ma classique consiste Ă XORer chaque octet du shellcode ou de la DLL malveillante avec une clĂ© dâun octet ou plus (parfois stockĂ©e dans le code, parfois dĂ©rivĂ©e de lâenvironnement du systĂšme infectĂ©). Le XOR est trivial Ă implĂ©menter et a un effet de masquer tout motif en clair dans le binaire. Dâautres utilisent des algorithmes symĂ©triques plus forts (RC4, AES) pour chiffrer leur payload, empĂȘchant toute analyse statique tant que le malware nâa pas effectuĂ© la dĂ©cryption en mĂ©moire.
Ă lire : Virus PowerShell
En somme, chiffrement et encodage sont devenus la norme dans les malwares rĂ©cents : les concepteurs ajoutent des couches de chiffrement sur les composants (configuration, charge finale, chaĂźnes, etc.) pour que les dĂ©fenses ne puissent y reconnaĂźtre ni motif ni signature tant que le malware nâest pas activement en train de sâexĂ©cuter.
Packers et Crypters
Les packers et crypters sont deux outils majeurs utilisĂ©s dans lâobfuscation des malwares, en particulier pour masquer le code binaire exĂ©cutable et ainsi tromper les antivirus.
Un crypter chiffre tout ou partie du code malveillant (souvent la « payload ») Ă lâaide dâun algorithme (XOR, AES, RC4, etc.) et lâencapsule dans un stub (petit programme) capable de le dĂ©chiffrer et de lâexĂ©cuter en mĂ©moire. Lâobhectif est de rendre le fichier indĂ©tectable statiquement , car ce dernier ne contient aucune chaĂźne suspecte, pas de signature reconnaissable.
Un packer compresse ou chiffre un exĂ©cutable, puis le combine avec un stub qui le dĂ©compresse ou dĂ©chiffre au moment de lâexĂ©cution . Son objectif est dâempĂȘcher lâanalyse statique et retarder la rĂ©tro-ingĂ©nierie. Ils sont habituellement utilisĂ©s par les malwares pour se faire passer pour des logiciels lĂ©gitimes (mĂȘme hash modifiĂ© Ă chaque fois). Les antivirus tentent de les âdĂ©packerâ ou de les dĂ©tecter via heuristiques comportementales. FrĂ©quemment utilisĂ©s par les malwares pour se faire passer pour des logiciels lĂ©gitimes (mĂȘme hash modifiĂ© Ă chaque fois). Notez quâil existe des packers lĂ©gitimes, par exemple, UPX (Ultimate Packer for eXecutables) est un packer open-source qui principalement vise Ă compresser les exĂ©cutables pour en rĂ©duire la taille. Il est trĂšs utilisĂ© par les Setup des applications pour proposer exĂ©cutable auto-extractible.PECompact est un packer commercial utilisĂ© aussi pour les Setup, car il embarque une fonctionnalitĂ© dâoffuscation pour protĂ©ger la logique mĂ©tier. Il est donc apprĂ©ciĂ© des concepteurs de malwares (notamment keyloggers, RATs ) parce quâil rend la rĂ©tro-ingĂ©nierie plus difficile ayant des fonctionnalitĂ©s intĂ©grĂ©es dâanti-debug. Il sâagit souvent de version de PECompact modifiĂ©e.
Notez que dans lâĂ©cosystĂšme des logiciels malveillants, certains groupes sont spĂ©cialisĂ©s dans la vante de crypters et packers, dit FUD (Fully Undetectable ).
Code polymorphe
Un malware polymorphe gĂ©nĂšre du code diffĂ©rent Ă chaque infection ou exĂ©cution, tout en prĂ©servant sa logique malveillante dâorigine. Cela se fait via un moteur polymorphique qui modifie certaines parties du programme (ex: clĂ©s de chiffrement, ordres des instructions, registres utilisĂ©s) de façon alĂ©atoire ou variable. Chaque instance du malware possĂšde ainsi une signature unique , rendant la dĂ©tection par empreintes statiques trĂšs difficile.
Un exemple classique est le ver Storm qui altĂ©rait son code Ă chaque nouvelle infection pour tromper lâantivirus. Plus rĂ©cemment, des trojans comme Pikabot intĂšgrent ce polymorphisme : Ă chaque installation, Pikabot gĂ©nĂšre une nouvelle version de lui-mĂȘme en modifiant ses routines critiques (par ex. les fonctions de chiffrement ou de connexion rĂ©seau) afin de produire des empreintes diffĂ©rentes Ă chaque fois.
Code métamorphe
Encore plus sophistiquĂ©s, les malwares mĂ©tamorphes réécrivent intĂ©gralement tout ou partie de leur code Ă chaque propagation, sans mĂȘme conserver de dĂ©chiffreur polymorphe fixe.
Le virus Win32/Simile et le cĂ©lĂšbre virus Zmist (2000) illustrent ce concept extrĂȘme oĂč le code Ă©tait auto-rĂ©organisĂ© de maniĂšre quasi alĂ©atoire. Dans les annĂ©es 2020, peu de malwares grand public utilisent un mĂ©tamorphisme complet (coĂ»teux en ressources), mais on en retrouve des Ă©lĂ©ments. Par exemple, Pikabot est capable de transformer son propre code Ă la volĂ©e en mĂ©moire : rĂ©ordonner les instructions, modifier les flux de contrĂŽle ou remplacer des algorithmes par des Ă©quivalents fonctionnels, rendant sa signature trĂšs mouvante. Ce bot intĂšgre Ă©galement des algorithmes de mutation de code qui réécrivent certaines parties Ă chaque exĂ©cution (inversions de conditions, boucles, etc.), pour quâaucun Ă©chantillon nâest identique Ă un autre. De telles mutations dynamiques produisent un code statistiquement indĂ©tectable par des scanners basĂ©s sur des motifs fixes.
En résumé, polymorphisme et métamorphisme fournissent aux malwares un camouflage évolutif : chaque exemplaire devient une nouvelle créature inconnue des bases antivirales.
Injection en mémoire et attaques sans fichier
Le malware injecte du code dans des processus légitimes (ex: explorer.exe, svchost.exe) pour masquer son activité. Cela est fortement utilisé notamment dans les trojans bancaires ou les RATs (Remote Access Trojans) . De plus, cela permet de contourner des protections firewall, car bien souvent, les processus légitimes de Windows ont des rÚgles moins restrictives.
Mais, de plus en plus de malwares adoptent des attaques âfileless â (sans fichier) , sâexĂ©cutant exclusivement en mĂ©moire pour Ă©chapper aux scans de fichiers sur disque. PlutĂŽt que dâĂ©crire un binaire malveillant identifiable sur le disque dur, ces malwares injectent leur code directement dans la mĂ©moire dâun processus lĂ©gitime du systĂšme. Cette technique permet de ne laisser que trĂšs peu de traces : pas de fichier malveillant Ă analyser, et un code malveillant qui âvitâ au sein dâun processus approuvĂ©, ce qui complique Ă©normĂ©ment la dĂ©tection. Par exemple, PyLoose (2023) est un malware fileless Ă©crit en Python qui a chargĂ© directement un mineur de cryptomonnaie (XMRig) en mĂ©moire sans jamais dĂ©poser dâexĂ©cutable sur le disque.
Ă lire :
Chargeurs multi-étapes et exécution de code à la volée
PlutĂŽt que de livrer tout le code malveillant en une fois, les attaquants prĂ©fĂšrent dĂ©sormais des infections en plusieurs Ă©tapes . Un loader (chargeur) initial relativement lĂ©ger est dĂ©posĂ© sur la machine victime ; son rĂŽle est de prĂ©parer lâexĂ©cution de la charge finale (payload) qui reste chiffrĂ©e, distante ou fragmentĂ©e tant que le loader nâa pas fait son travail. Cela permet de contourner nombre de dĂ©tections statiques, car le loader seul peut paraĂźtre anodin ou inconnu, tandis que la charge malveillante principale nâest dĂ©voilĂ©e quâau dernier moment, souvent uniquement en mĂ©moire .
Le concept de âcode Ă la volĂ©eâ recouvre aussi lâutilisation de langages de script et du code auto-modifiant . Par exemple, de nombreux malware en PowerShell, JavaScript ou VBA gĂ©nĂšrent ou tĂ©lĂ©chargent du code au moment de lâexĂ©cution plutĂŽt que de lâinclure en dur. PowerShell est notoirement utilisĂ© dans des attaques fileless : un document malveillant va lancer une commande PowerShell qui Ă son tour tĂ©lĂ©charge du code distant en mĂ©moire et lâexĂ©cute immĂ©diatement . Pour Ă©viter la dĂ©tection, ce code PowerShell est fortement obfusquĂ© (variables nommĂ©es alĂ©atoirement, concatĂ©nations bizarres, encodage en base64 comme vu prĂ©cĂ©demment, etc.) afin de ne pas rĂ©vĂ©ler en clair les URL ou les commandes dangereuses.
Par exemple : Trojan LNK, Trojan.VBS et Malware PowerShell : Exemple dâune campagne visant la France
Stéganographie
La stĂ©ganographie , dans le contexte des malwares, est lâart de cacher du code malveillant ou des donnĂ©es utiles Ă lâattaque Ă lâintĂ©rieur de fichiers apparemment inoffensifs , souvent des images , vidĂ©os , audios ou mĂȘme documents bureautiques . Contrairement au chiffrement (qui cache le sens), la stĂ©ganographie cache lâexistence mĂȘme des donnĂ©es .
Lâobjectif de lâattaquant est :
Ăviter la dĂ©tection par antivirus (aucune charge utile visible dans les fichiers exĂ©cutables).
Passer les firewalls et filtres rĂ©seau (un fichier JPG passe mieux quâun EXE ou un .dll).
Cacher des commandes (C2), des configurations, des chargeurs ou du code .
Contourner la surveillance des réseaux et des hÎtes.
Par exemple, des malwares reçoivent leurs instructions sous forme de fichiers « bĂ©nins » (mĂȘme publiĂ©s publiquement sur Reddit, GitHub, TwitterâŠ) : Cela sert Ă rĂ©cupĂ©rer des URL, des configurations, ou des scripts obfusquĂ©s . Le botnet extrait une chaĂźne cachĂ©e dans lâimage (texte invisible, exĂ©cution conditionnelle).
Les macros peuvent charger des images ou documents qui contiennent du code caché . Le script PowerShell lit un fichier image téléchargé, extrait des données binaires depuis des pixels ou des métadonnées, les déchiffre, puis les injecte en mémoire .
Cela rend la détection de malware difficile pour plusieurs raisons :
Invisible Ă lâĆil nu et aux antivirus classiques.
Les outils de sécurité traditionnels ne vérifient pas les images ligne par ligne pour y chercher du code.
La charge utile est dissociée du malware , donc la détection du fichier malveillant ne permet pas de bloquer les commandes à venir .
Combine souvent obfuscation + chiffrement + stéganographie pour maximiser la furtivité.
Conclusion
De 2020 Ă 2024, les techniques dâobfuscation des malwares ont atteint un niveau de complexitĂ© sans prĂ©cĂ©dent. Polymorphisme et mĂ©tamorphisme produisent des variantes inĂ©dites Ă la volĂ©e, le chiffrement omniprĂ©sent des codes et donnĂ©es cache les intentions malveillantes, lâinjection furtive en mĂ©moire permet dâopĂ©rer depuis lâombre des processus lĂ©gitimes, et des loaders multi-Ă©tapes sophistiquĂ©s dĂ©ploient les charges utiles de façon conditionnelle et indĂ©tectable. Du cĂŽtĂ© du dĂ©fenseur, cela implique de multiplier les couches de protection (analyse comportementale, dĂ©tection en mĂ©moire, sandbox Ă©vasion-aware, etc.) et de constamment mettre Ă jour les outils dâanalyse pour suivre lâĂ©volution de ces menaces. En fin de compte, comprendre en profondeur ces techniques dâobfuscation avancĂ©es est indispensable pour anticiper les tactiques des malwares modernes et renforcer les mĂ©canismes de dĂ©tection et de rĂ©ponse. Les professionnels cybersĂ©curitĂ© doivent maintenir une veille continue sur ces ruses en constante mutation, car lâingĂ©niositĂ© des attaquants ne cesse de repousser les limites de lâĂ©vasion.
Lâarticle Comment les malwares se cachent des antivirus est apparu en premier sur malekal.com .