Ce qu'est un virus métamorphique
Un virus métamorphique est un programme autoréplicatif qui ne se contente pas de cacher son code, il le modifie. Chaque nouvelle copie est produite par un moteur intégré qui réécrit les instructions : les copies se comportent de la même façon, mais partagent presque aucun motif d'octets. C'est tout l'enjeu : l'antivirus classique reconnaît un logiciel malveillant à son apparence, et un virus métamorphique n'a jamais deux fois la même.
Ce qu'il fait une fois lancé est une autre question. Le moteur de mutation n'est que le déguisement, et la charge utile peut être n'importe quoi, de l'infection de fichiers à un keylogger ou à un canal discret d'exfiltration de données. Mieux vaut séparer les deux : le moteur décide si vous pouvez reconnaître le programme, la charge utile décide de ce qu'il vous coûtera.
Comment il se réécrit
La mutation se déroule dans un cycle que le virus porte en lui, sans aucune aide extérieure.
- 1
Lecture de son code
Le moteur désassemble le corps du virus en une liste d'instructions qu'il sait comprendre et modifier.
- 2
Transformation
Il applique des règles de réécriture, comme remplacer une instruction par une équivalente, réordonner des blocs indépendants ou insérer du remplissage inoffensif.
- 3
Reconstruction
Il réassemble les instructions modifiées en un nouveau corps fonctionnel, avec de nouvelles adresses et de nouveaux sauts.
- 4
Infection et répétition
La nouvelle copie est greffée sur une cible et, lorsqu'elle s'exécute, relance le même cycle.
Métamorphique contre polymorphe
On confond souvent les deux. Un virus polymorphe garde le même code central et ne change que son enveloppe, en général une couche de chiffrement avec une clé différente à chaque fois. Une fois l'enveloppe retirée, le même corps apparaît, ce qui donne aux analystes un point fixe à comparer. Un virus métamorphique n'a pas de corps stable à retrouver.
| Aspect | Virus polymorphe | Virus métamorphique |
|---|---|---|
| Ce qui change | La couche de chiffrement et son décrypteur | Le code du programme lui-même |
| Corps après dépaquetage | Identique dans chaque copie | Différent dans chaque copie |
| Ce qu'il embarque | Un moteur de mutation pour l'enveloppe | Un moteur qui désassemble et reconstruit le code |
| Effort d'écriture | Modéré | Nettement plus élevé |
| Point faible | Le corps déchiffré peut être comparé | Son comportement et les motifs du moteur lui-même |
Techniques de mutation courantes
Les moteurs métamorphiques combinent un petit nombre de transformations. Aucune n'est sophistiquée seule, et l'effet vient de leur empilement au fil des générations.
- Substitution d'instructions : remplacer une instruction par une autre qui donne le même résultat.
- Réordonnancement du code : mélanger des blocs indépendants et corriger les sauts qui les relient.
- Renommage de registres : utiliser d'autres registres du processeur pour les mêmes opérations.
- Insertion de code inutile : ajouter des instructions qui ne font rien, comme des opérations vides ou qui s'annulent.
- Expansion et réduction : remplacer une courte séquence par un équivalent plus long, ou l'inverse.
Pourquoi les signatures échouent
L'analyse par signatures compare un fichier à des motifs d'octets tirés d'échantillons connus. Le métamorphisme attaque directement cette hypothèse, car une nouvelle variante ne porte aucun motif déjà enregistré. La détection passe donc de l'apparence du fichier à son comportement.
Une couche voisine est la surveillance de l'intégrité des fichiers. Elle ne reconnaît pas du tout le virus : elle remarque qu'un fichier protégé a changé sans que personne n'ait autorisé la modification, ce qui fonctionne quelle que soit l'apparence du code.
| Approche de détection | Exige un motif d'octets connu | Voit le comportement à l'exécution |
|---|---|---|
| Comparaison de signatures | ||
| Heuristique statique | ||
| Surveillance du comportement | ||
| Bac à sable ou émulation |
Une défense en couches
Aucun contrôle isolé ne reconnaissant toutes les variantes, la défense se construit en couches qui échouent de façons différentes. La protection des postes fondée sur le comportement, les listes d'applications autorisées et les mises à jour rapides réduisent le risque d'infection. La plupart des infections commencent pourtant par une personne, via un message de type clone phishing ou un fichier venant d'un support amovible : le filtrage du courrier et les règles sur les périphériques comptent autant que l'analyseur.
Partez du principe qu'une variante finira par s'exécuter. La segmentation du réseau, les comptes à privilèges minimaux et les sauvegardes testées limitent ce qu'elle peut toucher et la durée du nettoyage.
Une analyse propre ne prouve pas qu'une machine est saine : face à un échantillon métamorphique, un analyseur à signatures peut seulement indiquer qu'il n'a rien trouvé de connu.
Par où commencer
Commencez par vous demander ce qu'une infection réussie pourrait atteindre, plutôt que comment attraper chaque variante. Recensez les postes qui détiennent des données sensibles, activez-y la détection comportementale et veillez à ce que les modifications de fichiers inhabituelles et les transferts sortants soient remarqués.
La dernière ligne de défense, ce sont les données elles-mêmes. Un contrôle de DLP sur poste, tel qu'Anexet DLP, surveille les canaux par lesquels les données sortent, de sorte qu'une fuite peut être stoppée même si le programme qui l'a déclenchée n'a jamais été reconnu.
On ne reconnaît pas toujours l'intrus, mais on peut toujours surveiller ce qui franchit la porte.
