lundi 27 août 2012

Les virus contre-attaquent




3.1.         Stratégie de base

Avec l’apparition des premiers logiciels antivirus, les programmeurs de virus se sont mis à chercher des méthodes pour permettre à leur virus d’échapper à la détection de l’antivirus. Ils en ont trouvé de nombreuses, allant de la simple astuce de programmation à la conception sophistiquée de virus auto-modifiants.
Les méthodes les plus simples sont passives, et consistent à rendre le virus le plus discret possible dans son exécution. Les contraintes imposées au virus seront par exemple :

·        D’être le plus petit possible en terme de taille mémoire. Le virus sera donc écrit en utilisant au maximum des appels à des fonctions toutes faites intégrées au système d’exploitation (interruptions du DOS dans le cas des PC et appel à des programmes basés en ROM pour la HP48). Il évitera également de contaminer plus d’une fois un même programme afin de ne pas modifier exagérément sa taille. Pour cela, les virus posent en général une sorte de signature sur les programmes infectés, qui peuvent être une modification dans la date de création du programme ou l’insertion d’une chaîne d’octets caractéristique. A titre d’anecdote, il existe des virus infecteurs de fichiers qui compressent leur programme hôte avant de s’y recopier pour ne pas en modifier la taille. Ils le décompressent ensuite à chaque utilisation.

·        De s’exécuter rapidement pour ne pas éveiller l’attention de l’utilisateur. En effet, un lecteur de disquette en train d’écrire alors que l’utilisateur ne s’en sert pas peut l’alerter. Le virus doit donc posséder un algorithme de recherche de fichiers à contaminer et d’un mécanisme de réplication les plus rapides possibles, quitte, par exemple, à abandonner la recherche d’une cible s’il a dépassé un temps limite.

·        De ne pas apporter de modifications visibles à la structure des répertoires utilisateurs, par exemple en renommant un programme.

Tous les virus actuels répondent au moins à ces critères. Cependant, un virus qui vérifie ces conditions peut échapper à la vigilance de l’utilisateur mais pas à celle d’un logiciel antivirus, c’est pourquoi d’autres techniques plus sophistiquées ont vu le jour.


 3.2.         Les virus furtifs

Le principe de la furtivité est de faire croire à l’antivirus que le virus n’est pas là. Les techniques employées diffèrent selon que l’on considère un virus système et un virus infecteur de fichiers. Pour pouvoir être précis, plaçons nous dans un environnement PC.



3.2.1.      Cas du virus système

 L’antivirus testera la présence d’un virus système de deux manières. Il pourra commencer par aller lire les programmes du secteur de démarrage. Pour cela, il effectue une demande de lecture en faisant appel à une interruption du DOS. Or, rien n’empêche le virus d’avoir détourné l’interruption en question vers un programme interne au virus, qui teste si la demande de lecture est dirigée vers un secteur de démarrage, et si tel est le cas l’oriente vers une copie de sauvegarde saine du secteur de démarrage. L’antivirus croira ainsi le secteur sain et en conclura l’absence de virus. Cette méthode est efficace en particulier pour tromper les scanners.
Cette méthode est ancienne (année 80) et les antivirus actuels la contournent en faisant une lecture directement sur les ports d’entrée-sortie de la machine, mais cela nécessite une programmation délicate qui prenne en compte l’aspect électronique de la machine. On peut aussi imaginer que le scanner se dote d’un programme d’analyse heuristique qui vérifie que la routine d’accès en lecture pointée par la table des interruptions n’est pas celle d’un virus.
Les virus peuvent encore réagir en détournant d’autres interruptions systèmes qu’un antivirus souhaitant utiliser les entrées-sorties directement est obligé d’appeler, afin de le tromper de nouveau. L’antivirus peut à son tour contourner l’usage de ces interruptions.
On prend ici conscience d’un phénomène essentiel : virus et antivirus se font une guerre continuelle où chacun tente de dépasser l’autre par l’emploi de techniques de plus en plus complexes.

Un antivirus pourra également chercher un virus système en mémoire vive. En effet , un virus système s’installe souvent comme résidant en mémoire et doit donc y assurer sa furtivité. En général, l’antivirus teste la présence d’un virus résidant en calculant la taille de mémoire vive disponible et en la comparant avec la valeur indiquée par le système. Pour éviter d’être localisé ainsi, le virus essaie de modifier le paramètre système donnant la taille de mémoire vive. Il peut également quitter la mémoire vive dès que le système d’exploitation a fini de se charger, pour aller se cacher dans une zone mémoire inutilisée.



3.2.2.      Cas du virus infecteur de fichier

Un virus infecteur de fichier dispose lui aussi d’un large panel de tactiques pour devenir furtif.
La principale consiste à détourner les interruptions servant à lire un fichier, pour, lorsqu’il s’agit d’un fichier infecté, modifier l’accès en le re-dirigeant vers le même fichier mais sain. Là encore, virus et antivirus se talonnent pour respectivement détourner et contourner un maximum d’interruptions ayant trait à l’accès au fichiers.

Toutes les techniques si dessus concernent des virus dans un environnement PC sous DOS. Un autre système informatique ne possède pas forcement de possibilités analogues au détournement des interruptions du DOS, aussi ces techniques de furtivité ne sont elles pas généralisables. Par exemple, on ne peut rien faire de tel sur HP48, et il faut y inventer d’autres méthodes.




3.3.         Les virus répressifs

Les virus peuvent aussi adopter une attitude agressive vis à vis des antivirus. En effet, à part le scanner et les analyseurs, les antivirus ne détectent la présence d’un virus que lorsque celui-ci est exécuté ou en cours d’exécution. Le virus est donc libre de vérifier la présence d’un antivirus connu, et s’il le trouve, d’entreprendre une action en conséquence. Cette technique peut être d’autant plus efficace que les antivirus les plus répandus sont en petit nombre, et qu’il est donc possible de les lister et d’inclure dans le virus un programme de traitement pour chacun.
Les virus utilisent alors les mêmes techniques que les antivirus pour trouver ces derniers.
Le virus peut agir de différentes manières contre l’antivirus: il peut simplement faire planter l’ordinateur ou détruire le contenu d’un disque. Il peut reconnaître l’antivirus et le modifier pour le rendre inoffensif. Dans le cas d’un contrôleur d’intégrité, par exemple, il peut rechercher le fichier dans lequel le contrôleur stocke les propriétés des programmes et l’effacer, ou le modifier pour y inclure les modifications apportées à un programme lorsque celui-ci est infecté. Certains virus désassemblent l’antivirus et y cherchent certaines routines spécifiques pour les rendre inopérantes. Mais les techniques de ce genre sont employées au cas par cas, car elles sont très dépendantes de l’antivirus à contourner.

Bilan partiel :

Les virus répressifs et furtifs que nous venons d’étudier ont l’inconvénient majeur d’utiliser une surenchère d’astuces excessivement techniques, où aucune limite théorique ne vient borner la complexité que l’on peut atteindre, ni assurer que l’un des deux, virus ou antivirus, l’emportera sur l’autre. Cela conduit à l’écriture de virus de plus en plus compliqués, donc de tailles importantes et lents. Pour fuir cette impasse, les programmeurs de virus ont développé une technique totalement différente, qui est à la fois très efficace et séduisante : les virus polymorphes.
Avant d’en expliquer le principe, il conviens de regarder ce qu’est un virus autocrypté.



3.4.         Les virus autocryptés

Les virus autocryptés sont une étape préliminaire à l’écriture de virus polymorphes.
Leur objectif est de minimiser les chances d’être reconnus par un scanner ou un analyseur en modifiant d’une copie à l’autre une partie de leur code. Ceci est obtenu en chiffrant une partie du code du virus avec une clef de chiffrement qui varie à chaque génération. Ainsi, différentes copies d’un virus autocryptés ne possèdent qu’une faible portion de code en commun, portion constituée en fait par la fonction de déchiffrement. Du coup, un scanner doit posséder une portion du code de cette fonction pour espérer identifier le virus.
Un virus autocrypté agit comme suit :

·      Lorsqu’il est dans un programme hôte, il est entièrement chiffré à l’exception de la fonction de déchiffrement. Lors de l’exécution du programme hôte, c’est cette fonction qui est appelée en premier. Elle recopie alors le virus dans un espace de mémoire libre, l’y déchiffre, et lui passe le contrôle. Celui-ci s’exécute, puis passe le contrôle en retour au programme hôte qui s’exécute normalement.

·      Lorsqu’il est en mémoire à l’état déchiffré, il recherche un fichier ou un secteur à infecter. Celui-ci trouvé, il ne s’y recopie pas tel quel, mais y écris une version chiffrée de lui-même, avec une nouvelle clef de chiffrement aléatoire qu’il inclut dans la nouvelle fonction de déchiffrement, afin qu’elle puisse déchiffrer le code de son virus. Ainsi, le code de cette version lui diffère totalement, à l’exception de la boucle de déchiffement toujours visible.







Aucun commentaire:

Enregistrer un commentaire