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