Un malware qui se contente d’être malveillant sans se soucier de sa détection ne survit pas longtemps face aux dispositifs de sécurité modernes. Comprendre les techniques d’évasion n’est pas un exercice offensif gratuit : c’est la condition pour concevoir des détections qui ne les prennent pas en défaut.
Objectif
Contourner les environnements d’analyse automatique — sandbox, VM, EDR — pour éviter la détection avant même l’exécution réelle du code, puisque les logiciels de sécurité analysent le comportement des exécutables en amont.
Détecter la sandbox
La première ligne de défense d’un malware consiste à vérifier qu’il ne s’exécute pas dans un environnement d’analyse. La technique la plus simple exploite l’instruction cpuid, qui renvoie des valeurs spécifiques en environnement virtualisé (« Microsoft Hv », « VMware ») : il suffit de l’interroger pour détecter les hyperviseurs les plus courants et interrompre l’exécution si l’un d’eux est identifié.
Se camoufler par le hooking
Le hooking vise à intercepter les appels de fonctions standards pour en altérer discrètement le résultat. Des commandes aussi banales que cat, ps ou ls s’appuient sur des fonctions de la libc ; en préchargeant une bibliothèque malveillante (un « rootkit.so »), on proxifie ces symboles, puisque le chargeur dynamique les résout dès l’initialisation du processus.
Concrètement, un appel à open() est intercepté par la bibliothèque préchargée, qui répond en substance « c’est à moi, voici l’adresse ». Connaissant l’adresse réelle de real_open, elle vérifie au préalable si le fichier demandé correspond à un motif « caché » et, le cas échéant, filtre le résultat — masquant ainsi la présence d’une porte dérobée à tout outil qui interrogerait le système par ce biais.
Le rootkit noyau
Aller plus loin exige de s’attaquer directement au noyau. Sur Linux, une table des appels système (syscall table) associe à chaque code d’appel l’adresse de la routine chargée de le traiter — c’est via l’instruction syscall (précédée du chargement du numéro d’appel dans rax) que le contrôle repasse au noyau. Un rootkit noyau, sous forme de pilote, peut réécrire cette table pour substituer ses propres routines à celles du système, obtenant ainsi un contrôle qu’aucun outil en espace utilisateur ne peut détecter — puisque ces outils, eux-mêmes, dépendent des appels système compromis pour observer le système.
Les vecteurs d’infection courants
En amont de toute exécution, il faut encore que le malware atteigne sa cible. Trois vecteurs restent, aujourd’hui encore, les plus productifs pour un investigateur comme pour un attaquant.
Le courriel demeure le point d’entrée le plus fréquent. L’analyse forensique part généralement du répertoire propre au client de messagerie (Outlook), avec examen de l’en-tête et récupération de la pièce jointe ; convertir le format propriétaire .MSG en .EML facilite ensuite le traitement par des outils standards.
Le fichier PDF repose sur PostScript et se compose d’un en-tête, d’un corps et d’une table de références croisées (xref) ; un outil comme pdfid permet d’en scanner rapidement la structure à la recherche d’éléments actifs suspects (JavaScript embarqué, actions automatiques).
Les fichiers bureautiques (Office) constituent le troisième grand vecteur, par le biais de macros ou d’objets liés — terrain que je n’ai, à ce stade, qu’esquissé.