CE SERVICE PEUT CONTENIR DES TRADUCTIONS GÉNÉRÉES PAR GOOGLE. GOOGLE DÉCLINE TOUTE GARANTIE, EXPLICITE OU IMPLICITE, Y COMPRIS LES GARANTIES D'EXACTITUDE, DE FIABILITÉ, AINSI QUE TOUTE GARANTIE IMPLICITE DE COMMERCIALISATION ET D'ADAPTATION À DES FINS PARTICULIÈRES ET À L'ABSENCE DE CONTREFAÇONS.

Le site internet de Kaspersky Lab a été traduit pour votre commodité en utilisant un logiciel de traduction générée par Google. Des efforts raisonnables ont été faits pour fournir une traduction exacte. Cependant, aucune traduction automatique n'est parfaite et l'objectif n'est pas de remplacer le travail des traducteurs. Le site internet de Kaspersky Lab fournit ces traductions comme un service pour ses utilisateurs, et elles ont été publiées "telles quelles". Aucune garantie, explicite ou implicite, n'est faite au sujet de l'exactitude, de fiabilité ou de conformité de ces traductions faites de l'anglais vers une autre langue. Certains contenus (images, vidéos, Flash, etc.) peuvent ne pas être traduits correctement à cause des limites du logiciel de traduction.

Virus.Win9x.Memorial

Classe Virus
Plateforme Win9x
Description

Détails techniques

Ce texte a été écrit par Peter Szor, Data Fellows Ltd

Memorial est un virus Windows 95 très intéressant. Il y a eu un long développement de l'écriture de virus Windows jusqu'à présent [fin 1997]. Cependant, la liste des infecteurs Windows 95 n'est toujours pas longue. Mémorial montre de nouvelles idées en étant un "Windows résident" virus Windows 95. En d'autres termes, il infecte les fichiers COM et EXE DOS, ainsi que les fichiers Win32 PE (Portable Executable), respectivement. Le principal format du virus est un Windows 95 VxD (Virtual Device Driver).

Le virus n'est pas crypté dans les fichiers COM et EXE DOS, mais les fichiers PE infectés sont cryptés avec une routine oligomorphe (semi-polymorphique). De plus, le corps viral principal (l'image VxD) est emballé avec un algorithme simple. Il y a déjà un virus chiffré dans les fichiers PE (appelé Win95.Mad), mais Memorial est certainement le premier virus Windows 95 qui montre des capacités oligomorphes. Ainsi, il fait le premier pas sur le chemin du polymorphisme Windows 95.

Memorial est aussi un rétro-virus efficace. Il manipule le registre Windows 95 pour désactiver plusieurs programmes antivirus bien connus.

Heureusement, le virus a quelques gros bugs, ce qui peut ralentir la propagation. Cependant, Memorial.12413 a été signalé comme étant «dans la nature» en Suède, indépendamment de ces problèmes.

Exécution d'un fichier COM DOS infecté

Les auteurs de virus Windows 95 ont commencé à comprendre le fait que les gens échangent plus de programmes DOS que les applications Windows 95. Cela devient un gros problème du point de vue du virus: il ne peut tout simplement pas se propager trop loin en infectant uniquement les programmes Windows 95. Memorial résout ce problème en infectant les exécutables DOS également. Les fichiers infectés fonctionnent comme des droppers du module VxD principal.

Lorsqu'un fichier COM infecté avec Memorial est exécuté, le virus dépose un fichier VxD à la racine du lecteur C: appelé C: CLINT.VXD. D'abord, il vérifie si Windows est en cours d'exécution. Si c'est le cas, le virus exécute simplement le programme hôte DOS. Sinon, il fait son appel "Are you there", qui est INT 2Fh AX = 0. Si, au retour de l'appel, le registre AX est défini sur 4AB3h, le virus suppose qu'il est déjà actif dans la mémoire et renvoie le contrôle au programme hôte. Ensuite, il crée le fichier C: CLINT.VXD avec un attribut caché, et commence à écrire dedans.

La routine d'écriture apparaît comme une fonction anti-heuristique. Cependant, le but de cette fonction est différent. Le corps principal du virus est compressé à 7508 octets, et cette fonction est supposée le déballer. L'algorithme est très simple mais efficace. Les fichiers VxD sont au format LE (Linear Executable). La structure de ces fichiers contient plusieurs zéros. C'est pourquoi l'emballage de ces zones peut être très efficace. Fondamentalement, le VxD complet est emballé à 7508 octets, qui passe à 12413 après le déballage. Lorsque le CLINT.VXD est prêt, Memorial copie un morceau de code dans la table des vecteurs d'interruption à 0: 200 et croise INT 2Fh (Multiplex Interrupt). De cette façon, le virus n'a pas à s'inquiéter de la façon d'allouer de la mémoire, mais il sera incompatible avec certaines applications.

Le gestionnaire INT 2Fh répond à l'appel "Are you there" et attend 1605h dans le registre AX pour vérifier la notification d'initialisation de Windows. Ce message indique aux pilotes de périphérique DOS et aux programmes RÉSIDENT que Windows 366 standard ou en mode amélioré démarre. Windows appelle cette fonction lorsqu'elle commence à permettre aux pilotes de périphérique DOS et aux programmes résidents qui surveillent INT 2Fh de se préparer à s'exécuter dans l'environnement Windows.

Lorsque ces appels initiaux arrivent dans le gestionnaire d'interruption du mémorial, le virus ouvre C: CLINT.VXD pour vérifier son existence. Si l'ouverture a réussi, Memorial initialise une structure Win386_Stratup_Info_Struc pour diriger Windows pour charger le VxD. Tout pilote de périphérique ou TSR peut utiliser un Windows VxD pour prendre en charge son fonctionnement dans l'environnement Windows. Pour spécifier le nom VxD, le pilote de périphérique ou le programme RÉSIDENT définit le membre SIS_Virt_Dev_File_Ptr à l'adresse du nom de fichier du périphérique virtuel. Ainsi, Memorial utilise un moyen documenté de diriger Windows pour charger C: CLINT.VXD. C'est plus élégant que de modifier la section de périphérique du fichier SYSTEM.INI, ce qui est plus compliqué et moins réussi.

Exécution d'un fichier DOS DOS infecté

Lorsqu'un fichier EXE infecté est exécuté, le même code de décompression prend le contrôle du point d'entrée du virus comme dans les fichiers COM. Cependant, cette fonction va écrire indéfiniment dans C: CLINT.VXD car il y a un bug majeur dans le code d'infection DOS EXE. Memorial utilise un mauvais pointeur et un mauvais paramètre de taille de virus pendant l'infection EXE. Il n'écrit pas le code VxD compressé (7508 octets) dans les fichiers EXE, mais les 12413 octets décompressés après le code de décompression. Ainsi, lors du déballage, le code du compte-gouttes extrait une image VxD déjà déballée.

Parce que le code de l'extracteur ne connaît pas ce problème possible, il écrit des mégaoctets de code dans C: CLINT.VXD jusqu'à ce qu'il remplisse tout l'espace disque disponible, mais même alors, le contrôle ne reviendra pas à DOS. En utilisant Ctrl-C pendant cette opération ou en redémarrant la machine, l'énorme C: CLINT.VXD peut être trouvé mais seulement si l'option / AH (afficher les fichiers cachés) de la commande DIR est utilisée. Ainsi, le virus dans les fichiers EXE peut être classé comme "prévu". Heureusement, la détection et la désinfection de ces fichiers restent possibles.

Exécution d'un fichier PE infecté

Lorsqu'un fichier PE infecté est exécuté, le virus se décrypte d'abord lui-même, car le corps du virus principal est chiffré et emballé. Le décrypteur est long de 46 octets et oligomorphe (voir ci-dessous).

Comme dans le cas d'une infection COM, le virus supprime également le fichier C: CLINT.VXD des fichiers PE. En cas d'infections DOS, la fonction compte-gouttes prend 275 octets de code supplémentaire au point d'entrée du virus. Dans les fichiers PE cette fonction est en code 32 bits et c'est plus compliqué que la version DOS. C'est pourquoi ce code est plus long: 1360 octets. Cette fonction inclut également la routine d'activation de Memorial et elle est également supposée charger le VxD.

Le virus calcule d'abord le point d'entrée de la fonction GetModuleHandleA en mémoire. Il le fait en utilisant un vrai hack; il fait une recherche dans les structures internes de Windows 95. Cela rend l'infection PE un peu plus facile plus tard; le virus ne doit pas ajouter de noms à la table des noms importés. Memorial n'a pas besoin d'une fonction de patch compliquée dans son code d'infection PE à cette fin.

Plus tard, il calcule le point d'entrée de GetProcAddress en utilisant la même astuce. Ensuite, il utilise GetModuleHanldeA pour obtenir le handle du module KERNEL32. En utilisant ce handle, Memorial est capable d'appeler GetProcAddress pour obtenir et enregistrer respectivement les adresses de procédures CreateFileA-, WriteFile-, ReadFile-, SetFilePointer-, CloseHandle-, GetLocalTime-, LocalAlloc. Après cela, il utilise à nouveau GetModuleHandleA, pour obtenir le handle de USER32. Ensuite, il utilise à nouveau GetProcAddress pour enregistrer l'adresse de la procédure MessageBox.

Après cela, le virus appelle la fonction GetLocalTime pour vérifier la date: si c'est le 10 avril, le virus s'active et affiche une boîte de message en utilisant la procédure MessageBox:


Clinton Haines Memorial Virus par Quantum / VLAD et Qark / VLAD
Clinton Haines, également connu sous le nom Harry McBungus, Terminator Z et Talon
est décédé d'une overdose de drogue lors de son 21ème anniversaire, le 10 avril 1997.
Au cours de son temps en tant que rédacteur de virus, il a écrit la famille No Frills, X-Fungus,
Daemon et 1984 virus. Il était un bon ami de VLAD et nous écrivons
ce virus en son honneur. Nous espérons que c'est assez bon pour lui rendre justice.
VLAD se souvient. Repose en paix
DÉCHIRURE
Sinon, il vérifie si .CLINT est déjà opérationnel. Si c'est le cas, le programme hôte est exécuté. Sinon, il crée .C: CLINT.VXD en tant que fichier normal (sans utiliser d'attribut caché cette fois) avec CreateFileA. Si cela a réussi, Memorial alloue la mémoire en appelant la procédure LocalAlloc. C'est parce qu'il doit décompresser le corps du virus empaqueté à un nouvel emplacement avant qu'il ne soit capable d'écrire le code dans le fichier. Ainsi, il décompresse le code VxD (7508 octets) dans le tampon et en écrit 12413 octets dans CLINT.VXD avec la procédure WriteFile. Ensuite, il ferme le fichier avec CloseHandle. Après cela, il exécute le VxD en utilisant la procédure CreateFileA avec le format de nom spécifié à cet effet .C: CLINT.VXD. Enfin, il démarre le programme hôte.

L'initialisation (hook API IFS)

Lorsque le fichier CLINT.VXD est exécuté, le virus attend les messages de contrôle suivants dans son gestionnaire de messages de contrôle: W32_DEVICEIOCONTROL, INIT_COMPLETE, SYS_DYNAMIC_DEVICE_INIT et SYS_DYNAMIC_DEVICE_EXIT. Dans le cas d'un message W32_DEVICEIOCONTROL, le virus renvoie 0 car il ne veut pas communiquer avec d'autres applications Win32. Lorsque le message SYS_DYNAMIC_DEVICE_EXIT arrive, Memorial renvoie 1 pour interdire la demande de déchargement. Dans le cas des messages SYS_DYNAMIC_DEVICE_INIT et INIT_COMPLETE, le virus exécute sa procédure d'initialisation.

Cette procédure connecte d'abord l'appel de l'API DOS IFS (Installable File System). Après cela, il supprime plusieurs clés du registre de Windows 95 sous 'SystemCurrentControlSetServicesVxd', où les noms VxD chargés statiquement peuvent être trouvés; tels que VxD anti-virus. D'abord, il supprime les clés 'VETMON95' et 'VETMACRO'. Ensuite, il supprime les touches 'NAVAP', 'virusafe', 'WIMMUN32'. Ensuite, il ouvre la section 'SOFTWAREMicrosoftWindowsCurrentVersionRun' et en supprime les valeurs suivantes: 'NORTON AUTO-PROTECT', 'TBAV pour Windows 95', 'Anywhere Antivirus Validation', 'Vshwin32EXE' et 'ViruSafe'. Puis il va à 'SOFTWAREMcAfeeScreenScan' et supprime 'bEnableScreenScan', 'bScanAllFiles', 'bScanSubDirs'. Puis supprime les clés suivantes sous 'SOFTWARECybecVET Antivirus pour Win32': 'ActionsInfectedAction', 'ActionsSuspectAction', 'MemoryEnabled', 'ResidentFileCheck', 'ResidentInfectedAction', 'ResidentSuspectAction', 'ScanningScan All Files', 'Type ScanningScan', 'ScanningSkip Renommé ',' ScanningSubfolders 'et définit la valeur' ​​ScanningExtension List 'à' bin, dll, doc, drv, ovl, sys, point 'supprimer' com, exe et éventuellement 'scr' de cette liste. De cette façon, Memorial désactive de nombreux programmes antivirus Windows 95.

Ensuite, le virus efface les attributs sur C: CLINT.VXD. Après cela, il ouvre le fichier et obtient et enregistre sa taille, et alloue assez de mémoire pour sa copie déballée et emballée. Puis il se lit du fichier au tampon principal. Mémorial ferme alors le fichier VxD et le supprime.

Après cela, il emballe le code VxD dans le second tampon. Finalement, il revient de sa routine d'initialisation.

COM Infection

Lorsque Memorial intercepte un appel de fichier ouvert, il vérifie d'abord l'extension du fichier en le comparant d'abord à COM. Si l'extension est 'COM', Memorial obtient et enregistre l'attribut du fichier victime et l'efface. Ainsi, l'attribut en lecture seule n'empêchera pas l'infection. Ensuite, il ouvre la victime et en lit 4 octets. Si le troisième octet (après le saut initial) était «Z», Memorial suppose que le fichier est déjà infecté. Puis il vérifie que les marqueurs 'MZ', 'ZM' sont sûrs que la structure de la victime n'est pas COM. Ensuite, il vérifie la taille de la victime et ne l'infecte pas si elle est inférieure à 7168 ou supérieure à 51200 octets. Ensuite, il lit les 5 derniers octets du programme et vérifie s'ils commencent par 'SN'. Si cela est détecté, le virus n'infecte pas le fichier. Je ne vois aucune autre raison pour cette fonctionnalité, sauf pour inoculer un certain PC (possible les auteurs de virus) en ajoutant ce marqueur spécial à la fin des fichiers COM.

Ensuite, Memorial ajoute le code du compte-gouttes DOS (275 octets) à la fin de la victime avec l'image de virus empaquetée (7508 octets). Enfin, il modifie la supplication de la victime en changeant les 4 premiers octets en un saut initial + un marqueur 'Z' et place l'attribut à l'original. Ainsi, la taille du virus est de 7783 octets en cas d'infection COM.

Infection DOS EXE

Si le fichier a été démarré avec des marqueurs 'MZ' ou 'ZM', le virus vérifie l'extension en le comparant à '.EXE' et '.SCR'. Puis il appelle IFSMgr_Get_DOSTime pour avoir un numéro de base pour son générateur de nombres aléatoires. Puisque dans les fichiers PE le virus a besoin d'un nom de section ajouté à la zone d'en-tête PE et qu'il veut être oligomorphe, il ne veut pas utiliser un nom de section constante. Ainsi, il fait d'abord passer le nom standard de 'CLINTON' à une chaîne 'garbage'.

Fondamentalement, il utilise un XOR 8 bits pour le cryptage. Pendant le cryptage, il calcule un octet de contrôle et l'enregistre en tant que dernier caractère de la chaîne de nom de section. Cet octet supplémentaire sera utilisé lors de la vérification des infections PE existantes. Memorial mute le nom de la section pendant les infections DOS EXE uniquement. Cela rend la mutation assez lente (oligomorphisme lent).

Lorsque celui-ci est prêt, Memorial ouvre la victime, lit l'en-tête et vérifie la signature «MZ,« ZM ». Puis il lit 4 octets à partir de la position 3Ch du fichier. Ce double mot contient un pointeur vers la zone d'en-tête des exécutables Windows. Si ce pointeur est 0, le virus suppose que le fichier est un fichier EXE DOS normal et tente de l'infecter en tant que tel. Il vérifie le champ checksum de l'en-tête EXE. Si celui-ci est 6666h, le virus n'infecte pas le fichier, de plus si le champ IP est 100h dans l'en-tête, le virus ne s'infectera pas non plus.

Ensuite, le virus augmente la taille des fichiers EXE à la limite de paragraphe et ajoute le code du compte VxD (275 octets) à la fin du fichier. Alors le plus gros bug dans le virus vient: Il écrit le VxD décompressé à la fin du fichier (12413 octets). Ainsi, la taille du virus est de 12688 octets en cas de fichiers victimes DOS EXE. Enfin, il modifie l'en-tête de l'exécutable pour pointer vers le point d'entrée du virus.

PE Infection

Lorsque le fichier EXE ou SCR a été considéré comme Windows Executable, Memorial vérifie d'abord la signature PE. Ensuite, il prête attention à l'attribut en lecture seule. Ensuite, il lit la dernière section de la structure Image Header et calcule l'octet de vérification sur le nom de la section. Si la somme de contrôle correspond à Memorial ne s'infecte pas. Sinon, il modifie l'en-tête PE en y ajoutant la nouvelle section de virus. Puisque Memorial est un virus oligomorphe, il mute d'abord un déchiffreur long de 46 octets (voir: Moteur oligomorphe) pour le début de son corps. Ensuite, il crypte la version PE du compte-gouttes VxD qui a une longueur de 1360 octets. Le cryptage est basé sur un XOR 8 bits. Puis ajoute le code du décrypteur + le code du compte-gouttes VxD à la fin de la victime (1406 octets). Enfin, il crypte l'image VxD compressée et l'ajoute à la fin du fichier (7508 octets). Ensuite, il restaure l'attribut de la victime et le ferme. L'infection par le PE est prête. Ainsi, la taille du code du virus est 46 + 1360 + 7508 = 8914 octets. Notez cependant que cela peut changer parce que le virus doit augmenter la taille du fichier jusqu'à un alignement de section.

Moteur oligomorphe

Ce moteur est simple mais efficace. Le décrypteur de base se compose de 11 parties différentes. Le moteur de mutation modifie l'ordre de ces petits blocs en changeant certains d'entre eux. Ainsi, le bloc 1 avec 2, 8 avec 9, 6 avec 7, 3 avec 4, 5 avec 4 et 10 avec 0 peuvent être remplacés les uns par les autres. Cela donne 2 * 2 * 2 * 2 * 6 tous ensemble 96 cas différents. Cela rend la détection du virus difficile dans les fichiers PE.

Conclusion

Memorial est un virus très complexe. Il montre que les virus polymorphes Windows 95 apparaîtront plus tard dans la caractéristique proche sur les moteurs de mutation polymorphiques qui peuvent être utilisés avec des virus Windows 95 seulement. Cela signifie qu'il est temps d'implémenter de nouveaux moteurs d'analyse pour ces nouvelles bêtes.


Lien vers l'original