Pour être qualifié de virus, un programme doit être capable de se
dupliquer. Mais pour se répandre, le virus doit être aussi discret que possible. Comme
une souris, sa principale défense est de passer inaperçu, parce que vous interviendrez
dès que vous détecterez sa présence.
Le terme couramment utilisé pour qualifier un virus qui essaie d'être
le plus discret possible est "furtif". Mais il y a différents degrés et
différentes techniques de dissimulation. Dans l'ensemble et pour des raisons dont nous
discuterons, nous avons noté une tendance croissante dans cette direction.
Quelques informations techniques sont données dans ce chapitre. Nous
vous assurons qu'elles ne sont pas réservées à l'usage des auteurs de virus
puisqu'elles sont publiées dans des manuels de référence standard tels que
l'Encyclopédie MS DOS de Microsoft.
Certains virus sont très visibles. Par exemple, Burger écrase
le début du fichier qu'il infecte. L'utilisateur décèle donc sa présence en constatant
que le programme ne fonctionne plus. Il n'y a absolument aucun risque de ne pas voir un
tel virus. Nous appelons cela une dissimulation négative : niveau -1. Environ 10% des
virus sont classés dans cette catégorie. Certains auteurs de virus ne se soucient donc
pas d'écrire un virus qui puisse survivre et se propager. Tout ce qu'ils recherchent
c'est la satisfaction d'avoir écrit un virus et de le faire savoir. Les virus de secteur
d'amorce ne peuvent pas avoir une dissimulation négative car s'ils ne passent pas le
contrôle au programme d'amorce original, l'ordinateur ne démarrera pas du tout.
Un niveau de dissimulation supérieur est nécessaire pour que le virus
puisse se répandre: le programme infecté doit pouvoir être exécuté. Ceci est possible
si le virus s'ajoute au fichier en conservant toutes les informations nécessaires à
l'exécution. Cette opération est correctement réalisée par au moins 90% des virus.
Nous appelons cela une dissimulation 0. Même en utilisant que cette technique le virus
peut souvent passer inaperçu: beaucoup d'utilisateurs ne vérifient pas l'heure de leurs
fichiers.
Au cas où ils le feraient (beaucoup de revues considèrent cette
vérification comme une mesure anti-virus), la plupart des virus utilisent une
dissimulation de niveau 1 (virus qualifiés de furtifs élémentaires):
Si la date et l'heure des fichiers ne sont pas préservées lors de
l'infection, un nombre croissant de fichier affichera une date récente. Ce fait pourra
être remarqué par un utilisateur averti. Pour parer à cette éventualité, certains
virus utilisent la fonction 57h de l'interruption 21h.
S i un virus utilise les fonctions d'écriture DOS pour s'ajouter au
fichier alors que le support est protégé contre l'écriture, le système retourne
l'erreur critique "Abandon, Reprise, Echec". Ce message intriguera l'utilisateur
qui se demandera d'où vient cette tentative d'écriture alors qu'il essayait simplement
d'exécuter un programme. En revanche, un utilisateur averti comprendra rapidement ce qui
se passe. Nous remarquons que peu de sociétés protègent leurs disquettes contre
l'écriture. De plus, un virus détourne facilement ce problème: l'erreur critique est
acheminée par l'intermédiaire de l'interruption 24h, qui peut être remplacée par un
petit programme qui n'a aucune action.
Un virus de secteur d'amorce n'est pas concerné par les remarques
mentionnées ci-dessus.
Un virus appliquant ces deux méthodes de dissimulation rentre dans la
catégorie des furtifs de niveau 1. De plus, pour rester dans ce niveau, le virus ne doit
pas attirer l'attention par un effet d'affichage quelconque. Par exemple, Diamond
(V1024) provoque l'affichage d'un diamant multicolore toutes les heures. Ce
diamant éclate ensuite en petits morceaux qui se promènent sur l'écran. Si vous ne
remarquez pas cet effet, c'est que vous avez besoin de nouvelles lunettes, et si vous n'en
déduisez pas que quelque chose ne va pas, vous êtes sûrement très fatigué.
La dissimulation de niveau 2 (virus qualifiés de furtifs avancés)
commence à être plus intéressante. Aux niveaux inférieurs, le virus peut être
détecté à l'oeil nu. Dans le cas du virus de fichier, vous remarquerez la modification
de la taille du fichier. Dans le cas d'un virus de secteur d'amorce, vous noterez une
différence dans le programme d'amorce. Il existe plusieurs méthodes pour dissimuler
l'augmentation de la taille des fichiers:
La plus simple consiste à ne pas modifier du tout cette taille. Pour
cela, le virus recherche dans le fichier un groupe de zéros consécutifs qu'il remplace
alors par son propre code. La taille du fichier reste ainsi constante. Lorsque le
programme infecté est lancé, le virus s'exécute en premier. Une fois en mémoire, il
modifie l'image du programme en mémoire en remplaçant le groupe de zéros pour que le
fichier s'exécute normalement. Le Rat utilise une technique similaire, mais
ne s'attaque qu'aux fichiers EXE. Il recherche dans ces derniers le groupe de zéros que
beaucoup de compilateurs placent juste après l'en-tête EXE.
Pour consulter la taille d'un fichier, la plupart des utilisateurs
exécutent une commande DIR. DIR utilise les fonctions 11h et 12h de l'interruption 21h.
Si le virus surveille cette interruption et piège ses fonctions, il peut alors dissimuler
la valeur retournée en soustrayant la taille du virus. Les tailles de fichiers affichées
par la commande DIR semblent ainsi incorrectes. Zero-Eater (appelé aussi Zero-Bug)
utilise cette méthode.
Les fonctions 4Eh et 4Fh de l'interruption 21h sont aussi utilisées
pour obtenir la taille d'un fichier. Elles sont gérées de la même façon que les
fonctions 11h et 12h, et sont appelées par certains programmes DOS. Etant plus faciles à
programmer que les fonctions 11h et 12h, elles sont généralement utilisées par les
programmes anti-virus. Naturellement, le virus peut aussi les piéger et les fausser.
La troisième façon de connaître la taille d'un fichier est la sous
fonction 2, fonction 42h de l'interruption 21h. Cette instruction recherche la fin du
fichier et la taille du fichier est retournée dans les registres. Un anti-virus
soupçonneux peut utiliser cette méthode, mais il existe également des virus sournois
tels que Tequila qui modifient la valeur retournée par cette fonction.
Toutes ces astuces sont inapplicables si vous démarrez à partir d'une disquette DOS
saine, ce que nous vous recommandons naturellement de faire. Nous savons également que
les utilisateurs appliquant cette méthode de démarrage avant d'exécuter leur logiciel
anti-virus se comptent sur les doigts de la main. Nous devons tenir compte de
l'inconscience de certains utilisateurs qui ne suivent pas les instructions données dans
le manuel. Soit pour la bonne et simple raison qu'il ne le lise pas, ou encore parce
qu'ils estiment que cette procédure est inutile.
L'un des problèmes posé par les trois méthodes précédentes est
que le virus doit être résident en mémoire pour pouvoir se dissimuler. Or, il est
possible, qu'à l'instant où vous vérifiez la taille des fichiers, le virus n'ait pas
encore été chargé. Une autre technique de dissimulation consiste donc à ne pas
modifier l'entrée du répertoire lorsque le virus s'ajoute au fichier. Number of
the Beast fait 512 octets et infecte un fichier en remplaçant son premier
secteur. Cependant, il a besoin de cette partie de code afin que le programme puisse être
exécuté. Il le copie donc dans l'espace disponible entre la fin du fichier et la fin de
l'unité d'allocation. Beaucoup de disques utilisent des unités d'allocation de 2Ko,
ainsi 75% des fichiers laisseront un espace suffisant pour copier ce secteur.
L'inconvénient de cette approche apparaît lorsque le fichier infecté est copié sur
disquette. La taille de l'unité d'allocation est alors de 1Ko maximum et même de 0,5Ko
sur les disquettes haute densité.
Une partie du fichier original sera donc perdu lors de la copie et le programme ne
s'exécutera plus. Number of the Beast n'est que peu répandu aux États-Unis
et n'a pas encore été signalé en Europe de l'ouest.
Le virus V1963 (ainsi que V1963B également
appelé Necrophilia) occupe 1963 octets et ne peut donc pas utiliser cette
technique. A la place, il ajoute une unité d'allocation dans le chaînage de la FAT et
l'utilise pour mémoriser les 1963 premiers octets du fichier original. L'entrée de
répertoire n'est pas mise à jour, ainsi même lorsque le fichier n'est pas en mémoire
la taille du fichier ne paraît pas suspecte.
Pour les virus de secteur d'amorce, le niveau de dissimulation
intermédiaire, consiste à afficher le secteur d'amorce original, à chaque fois qu'une
lecture de ce secteur est demandée. Brain est le premier virus à procéder
de cette façon. Cependant, le fait qu'il modifie le nom du volume pour écrire '(c)'
Brain', ainsi que les 3Ko de secteurs défectueux marqués sur la disquette infectée, ne
permettent pas de le qualifier de furtif intermédiaire.
La plupart des virus furtifs actuellement catalogués utilisent une
technique de dissimulation intermédiaire. Très peu de virus furtifs intermédiaires
réussissent. Etant donné que le nombre d'utilisateurs sensibilisés au problème des
virus est faible, l'utilisation d'une technique de dissimulation intermédiaire plutôt
qu'élémentaire n'est pas aussi avantageuse qu'il paraît. Pour obtenir une dissimulation
beaucoup plus probante, il est nécessaire d'atteindre le niveau supérieur. Le virus
furtif avancé est en lutte directe avec les logiciels anti-virus. Mais avant de rentrer
dans le vif de ce sujet, nous devons aborder quelques autres méthodes de dissimulation.