lundi 27 août 2012

Structure des Virus Informatiques


L’objectif de cette partie est de présenter les principes généraux de la programmation des virus et des logiciels antivirus, par ordre de complexité croissante des techniques employées, et avec une volonté de généralisation.
Elle a été entre autre inspiré par les travaux de Mark Ludwig, chercheur américain, et en particulier par son livre ‘Du virus à l’antivirus’.

  1. Structure d’un virus informatique
  1. 1. Définition d’un système informatique

     
On entendra par ordinateur une machine dotée d’une mémoire contenant des programmes et des données, et d’une unité centrale (ou CPU) capable d’exécuter ces programmes, de lire et d’écrire en mémoire. Pour la CPU, toute information située en mémoire (programme comme donnée) peut être modifiée, donc en particulier, un programme peut s’auto-modifier ou modifier d’autres programmes.
On entendra par système informatique un ordinateur, isolé ou en réseau, muni d’un système d’exploitation et de logiciels et données utilisateurs. On définit deux types de fichiers : ceux utilisés par le système et un éventuel administrateur système, et ceux de l’utilisateur normal. Dans un usage courant, on souhaite conserver l’intégrité de certains fichiers, c’est à dire d’en interdire toute modification non autorisée. Ce peut être le cas des fichiers systèmes en général, ou de fichiers utilisateurs de type logiciel ou données importantes. Le virus informatique, par son principe de fonctionnement, va porter atteinte à l’intégrité des fichiers, et présente donc une menace.


1.2.         Principe de fonctionnement du virus

Un virus informatique est un programme, intégré dans un programme hôte ou localisé dans un champ spécifique de la mémoire, capable lors de son exécution de créer une copie de lui même qu’il insère dans un autre programme hôte ou sur un autre champ de mémoire. Ce programme possède donc une propriété essentielle et originale : il s’auto-reproduit. De tels programmes sont donc assez mobile, et échappent aisément au contrôle de l’utilisateur, c’est pourquoi ils sont souvent utilisés pour véhiculer un algorithme destructeur.
Un virus doit contenir au moins deux parties pour pouvoir se reproduire lui même : un algorithme de recherche d’un fichier hôte à infecter, et un algorithme de recopie sur le fichier hôte. On y ajoute éventuellement une troisième étape (destruction, espionnage…) qui sera détaillée en 1.5.
 L’organigramme fondamental d’un virus informatique est donc le suivant :


On verra par la suite qu’il s’agit la d’un schéma simplifié, et que chacune de ces parties existe sous de très nombreuses variantes que l’on choisira en fonction de l’environnement dans lequel doit évoluer le virus : nature du système informatique, structure des fichiers à infecter, antivirus à affronter…
Nous tacherons de faire le tour de toutes ces variantes.



1.3.         Comparaison critique avec le virus biologique.

Le terme de ‘virus informatique’ fut proposé pour la première fois par Fred Cohen en 1985 dans une thèse sur les programmes auto-reproducteur (voir Références Bibliographiques), et s’appuie sur des similitudes entre les virus informatiques et biologiques.
Ils ont en effet pour point commun d’introduire une séquence d’instruction, sous forme de programme pour l’un et de morceau d’ADN pour l’autre, dans un environnement (la cellule ou l’ordinateur), où cette séquence va être exécutée, c’est à dire reproduite. De plus, les virus les plus évolués possèdent des moteurs de mutations leur permettant de générer des versions nouvelles d’eux même, et sont capables de s’adapter à la présence d’un antivirus pour optimiser leur chance de lui échapper (virus génétiques, voir 4.6). Ils ont ainsi des propriétés qui rappellent les capacités de mutation et d’adaptation des virus biologiques, leur point commun étant de devoir s’adapter à un environnement hostile, où il faut affronter selon le cas le système immunitaire ou le logiciel antivirus.
Cependant, le terme de virus est sujet à polémique. En effet, la métaphore biologique qui l’a inspirée est limitée car ces deux entités agissent dans des environnements totalement différents, et leurs fonctionnements détaillés n’ont rien en commun. En particulier, la notion de vie attachée au virus biologique ne peut être appliquée à un programme informatique. De plus, le terme ‘virus’ est porteur d’une forte charge émotionnelle, largement entretenue par la presse informatique, et qui déforme l’opinion qu’on peut se faire de ces programmes. Enfin, pour beaucoup de gens, un virus est simplement un programme nuisible, indépendamment de toute notion d’auto-reproductibilité. Une dénomination mieux appropriée a été suggérée par Mark Ludwig dans son ouvrage de référence ‘Naissance d’un virus’ : il s’agit de Code Parasite Auto-Propageable (CPA). Dans le présent rapport, le terme virus sera toujours à prendre dans le sens de CPA.


1.4.         Les principaux types de virus : Virus système et infecteur de fichier

On distingue 2 grandes catégories de virus, indépendamment de la machine pour laquelle un virus est écrit : les virus infecteurs de fichiers et les virus systèmes (ou résident).
Tout système informatique possède des programmes à l’usage de l’utilisateur, qui sont susceptibles de contenir un virus. Ceux-ci sont dit infecteurs de fichiers. Ils sont exécutés à chaque appel du programme qui les contient et assurent alors leur propagation.
D’autre part, à chaque mise sous tension, tout ordinateur commence par évaluer une série de programmes de démarrage qui lui permettent de se configurer. Bien souvent, on peut modifier le contenu de ces programmes pour y introduire le code d’installation d’un virus ce qui permettra à celui-ci de prendre le contrôle du système dès sa mis en service. Un tel virus est dit virus système.
La différence entre ces deux virus viens donc de ce que le second infecte des programmes du système et n’est exécuté qu’au démarrage, tandis que le premier infecte les programmes de l’utilisateur et est exécuté à chaque appel de l’un d’eux. Il existe également des virus hybrides présentant à la fois ces deux modes de fonctionnements.

Le fonctionnement de ces virus dépend intimement du système informatique, c’est à dire :

·        Du microprocesseur employé, car un virus efficace est programmé en langage machine et n’est donc pas portable.

·        De la façon dont interagissent les périphériques et l’unité centrale. Par exemple, les PCs emploient une table d’interruptions utilisée par les virus pour détourner certaines fonctions du système, dont on ne trouve pas l’équivalent sur une calculatrice de type HP48.

·        Du fonctionnement du démarrage de la machine, dans le cas des virus systèmes.

·        De la structure des objets exécutables. Sur un PC, les fichiers .COM, .SYS et .EXE qui sont les cibles privilégiées des virus infecteurs de fichiers ne sont pas structurés de la même façon en mémoire. De même pour les objets programmes et librairies que nous étudierons sur la HP48.

On constate au vu de ces contraintes qu’un virus est un programme très spécifique, adapté à une cible précise, et dans un environnement précis. Cependant, un virus peut être conçu de telle sorte qu’il infecte toute forme de code, même celui qui doit encore être compilé ou interprété avant d’être exécuté. Ainsi, un virus peut infecter des programmes de types différents, ou encore un programme en C ou en Basic et n’est donc absolument pas limité à l’infection des programmes écrits en langage machine.




1.5.         La charge facultative d’un virus

D’un certain point de vue, le virus informatique est un support pour véhiculer un programme de façon invisible et efficace. Sous ce point de vue, la partie facultative décrite en 1.2 a un rôle essentiel. Dans la majorité des virus, il s’agit d’un programme destructeur, visant à effacer des fichiers importants ou à planter la machine. Il peut aussi servir à espionner le système pour, par exemple, lister les mots de passes des utilisateurs et les transmettre au programmeur du virus. Le champ des possibilités a en fait l’imagination du programmeur pour seule limite.
Notons que cette action peut aussi être bénéfique. Il existe par exemple des virus antivirus, qui élimine certains virus cibles lorsqu’ils sont présents sur le programme hôte qu’ils infectent, et contrôlent ensuite leur hôte pour alerter toute tentative d’infection. D’autres servent à économiser de la mémoire en compressant le programme hôte, et en le décompressant à chaque exécution.
Ainsi, la propriété de reproduction autonome des virus présente à la fois de nets risques et de grands avantages. C’est donc une technique digne d’étude.

1 commentaire: