TrickBot-Malspam nutzt Black Lives Matter aus

TrickBot-Malspam nutzt Black Lives Matter aus

Zusammenfassung

Das Hornetsecurity Security Lab hat eine Malspam-Kampagne zur Verteilung von TrickBot [1] entdeckt, die die Bewegung Black Lives Matter ausnutzt, um Opfer zum Öffnen eines bösartigen Anhangs zu verleiten. Das Dokument zum Download von TrickBot injiziert als Erstes einen Shellcode in den Prozess WINWORD.EXE ein. Über diesen Shellcode startet es dann einen cmd.exe-Prozess, in den es wiederum mehr von demselben Shellcode injiziert. Dieser cmd.exe-Prozess lädt anschließend die TrickBot-DLL herunter und führt sie über rundll32.exe aus.

Hintergrund

Die ursprünglichen E-Mails stammen angeblich von State office, Country authority oder Country administration:

E-Mail zur Verbreitung von TrickBot.

Durch Betreffe wie Vote confidentially about "Black Lives Matter", Tell your government your opinion, Give your opinion und Speak out confidentially about "Black Lives Matter" wird der Absender dazu aufgefordert, seine Meinung zu Black Lives Matter abzugeben.

Im Anhang befindet sich eine Datei mit dem Namen e-vote_form_0000.doc, die den Eindruck verstärkt, dass die E-Mail ein offizielles Abstimmungsinstrument ist.

Allerdings wird in dem Dokument nur ein Bild angezeigt, das ein vorgetäuschtes Office-Update ankündigt und Anleitungen für Bearbeitung aktivieren und Inhalt aktivieren zeigt:

TrickBot-Dokument.

Falls die Anleitungen befolgt werden, wird das bösartige VBA-Makro im Dokument ausgeführt und es lädt die TrickBot-Malware herunter.

Fachliche Analyse

Das folgende Flussdiagramm zeigt die Anfangsphase der Infektionskette (bis zum Deployment der TrickBot-Malware):

Anfang der Trickbot-Infektionskette.

Die folgende Analyse befasst sich mit jeder Phase dieser Kette.

VBA-Makro

Das VBA-Makro ist vor der Anzeige in Word geschützt:

Geschütztes TrickBot-Makro.

Dieser „Schutz“ verhindert jedoch nur, dass das VBA-Makro ohne Passwort in Word angezeigt wird. Auf den Code des VBA-Makros kann weiterhin zugegriffen werden.

Das VBA-Makro zeigt als Erstes eine gefälschte Fehlermeldung an:

Private Sub Document_Open()
    MsgBox "Error #80013123"

Das führt zu der folgenden Pop-up-Meldung:

Gefälschte Fehlermeldung von TrickBox

Auf diese Weise soll der Benutzer vermutlich zur Interaktion bewegt werden, um eine Aufspürung durch die Sandbox zu verhindern. Es könnte auch ein Versuch sein, von dem fehlenden Dokument abzulenken. Ein Opfer könnte durch den Fehler zufriedengestellt werden und das Dokument für beschädigt halten.

Das Makro injiziert über VirtualProtectEx und CreateThread Shellcode in den Prozess WINWORD.EXE ein. Zu diesem Zweck setzt der Code einen langen String zusammen:

    uriSubscriber = "i-j-[...]-a-a-a-"
    uriSubscriber = uriSubscriber & "i-l-[...]-a-a-"
    uriSubscriber = uriSubscriber & "g-k-a-a-p-p-h-f-p-i-[...]-o-g-c-c-p-k-h-c-g-j-h-d"

Dieser String enthält den codierten Shellcode. Er wird anschließend mit der folgenden Funktion decodiert:

    Dim f() As Byte
    ReDim f(0 To Len(uriSubscriber) / 2 - 1) As Byte
    Dim sSmart As Long, regOptimize As Long
    For Each destEnd In Split(uriSubscriber, "-")
        If sSmart Mod 2 Then
            regOptimize = sSmart - 1
            regOptimize = regOptimize / 2
            f(regOptimize) = (CByte(Asc(destEnd)) - CByte(Asc("a"))) + f((sSmart - 1) / 2)
        Else
            regOptimize = sSmart / 2
            f(regOptimize) = (CByte(Asc(destEnd)) - CByte(Asc("a"))) * 16
        End If
        sSmart = sSmart + 1
    Next

Schließlich wird der decodierte Shellcode mit VirtualProtectEx, das zuvor in extensionsComment umbenannt wurde, als PAGE_EXECUTE_READWRITE gesetzt. Daraufhin wird mit CreateThread, das zuvor in sMail umbenannt wurde, ein Thread mit der Adresse des Shellcodes als Startadresse gestartet:

    Private Declare Function extensionsComment Lib "kernel32" Alias "VirtualProtectEx" ( _
        iMail As Long, _
        bConsole As Long, _
        regFunction As Long, _
        tablePosition As Long, _
        colMail As Long) As Long
    Private Declare Function sMail Lib "kernel32" Alias "CreateThread" ( _
        textTimer As Long, _
        uriMail As Long, _
        m As Long, _
        dateMembers As Long, _
        textTimer0 As Long, _
        lServer As Long) As Long
[...]
    sConsole = destN_ - angleTexture + UBound(f)
    q = extensionsComment(ByVal ipFunction, ByVal angleTexture, ByVal sConsole, ByVal PAGE_EXECUTE_READWRITE, ByVal VarPtr(extensionsComment0))
    adsLogon = sMail(ByVal 0&, ByVal 0&, ByVal destN_, ByVal 2&, ByVal 0, ByVal 0&)
    adsScr 5000

Der Shellcode kann am einfachsten extrahiert werden, indem CreateThread in einem Debugger analyisiert wird.

Extraktion von TrickBot-Shellcode über x64dbg.

Shellcode WINWORD.EXE

Der Shellcode, der im Prozess WINWORD.EXE läuft, löst zuerst die Adressen von verschiedenen Bibliotheksfunktionen auf. Der Shellcode führt dann mit CreateProcessA ein cmd.exe mit dem Befehl pause aus, sodass cmd.exe angehalten wird:

TrickBot-Shellcode startet cmd.exe mit pause-Befehl

Danach verwendet der Shellcode eine klassische Abfolge von OpenProcess, VirtualAllocEx, WriteProcessMemory und CreateRemoteThread, um Shellcode in den pausierten cmd.exe-Prozess zu injizieren:

TrickBot Shellcode-Injektion in den cmd.exe-Prozess.

Der Prozess cmd.exe /c pause wird vermutlich eingesetzt, um eine Aufspürung zu verhindern. Eine gängige Technik der Prozess-Injektion besteht darin, einen ausgesetzten (z. B. pausierten) Prozess zu schaffen, indem bei der Erstellung des Prozesses der Flag CREATE_SUSPENDED gesetzt wird. Anschließend wird Code in den Prozess injiziert und der Prozess danach wieder aufgenommen. Bei dem hier beschriebenen TrickBot wird der Code stattdessen als Thread in den pausierten cmd.exe injiziert.

Der injizierte Shellcode ist derselbe Shellcode, der in den Prozess WINWORD.EXE injiziert wurde. Jedoch ist der Eintrittspunkt, der an CreateRemoteThread übergeben wird, anders, wodurch die Ausführung des Shellcodes im cmd.exe-Prozess anders abläuft.

Shellcode cmd.exe

Auch der Shellcode im cmd.exe-Prozess löst die Adressen von verschiedenen Bibliotheksfunktionen auf. Darüber hinaus decodiert er die URLs zum Download von TrickBot.

Danach stellt der Shellcode die Anfragen GetSystemMetrics(SM_CXSCREEN) und GetSystemMetrics(SM_CYSCREEN), um die Anzeigeauflösung zu erfragen. Daraufhin wird zweimal die Anfrage GetCursorPos gestellt und dazwischen mit dem Befehl Sleep(0x1388) zu einer Unterbrechung aufgefordert, wodurch es zu einer Verzögerung von 5 Sekunden kommt.

TrickBot erkundet das System.

Das dient vermutlich dazu, die Cursor-Bewegungen zu überprüfen und hierdurch Sandboxen zu umgehen.

Die Daten werden dann wie folgt als HTTP-Query-String codiert: &scr=1280x1024&cur1=604x250&cur2=622x310

Ein ID-Query-String &id=00000000 und der obere System-Metriken-Query-String werden dann an eine URL angehängt, um die endgültige Download-URL zu bilden, die anschließend über InternetOpenUrlA abgefragt wird:

TrickBot verwendet InternetOpenUrlA für Download.

Falls der Download erfolgreich ist, wird die heruntergeladene Datei auf C:\\Users\\<username>\\AppData\\Local\\system.rre geschrieben und mit ShellExecuteA über rundll32.exe %userprofile%/system.rre,Initialize ausgeführt. Die Datei system.rre ist die DLL des TrickBots.

Falls der Download nicht erfolgreich ist, ruht der Downloader und eine zweite Download-URL wird ausprobiert.

Schlussfolgerungen und Gegenmaßnahmen

Durch die doppelte Shellcode-Injizierung soll vermutlich eine Verhaltenserkennung verhindert werden, denn WINWORD.EXE lädt normalerweise keine Dateien aus dem Internet herunter oder führt rundll32.exe aus. So ein ungewöhnliches Verhalten wird daher leichter erkannt als das Aufrufen des Prozesses rundll32.exe durch cmd.exe. Die Abfrage der Anzeigeauflösung des Systems sowie die doppelte Abfrage der Cursor-Position dient vermutlich ebenfalls dazu, die TrickBot-DLL vor Sandbox-Systemen zu bewahren.

Spam and Malware Protection von Hornetsecurity, das die höchsten Erkennungsraten auf dem Markt hat, hat das bösartige TrickBot-Dokument mithilfe einer Erkennungssignatur bereits erkannt und blockiert.

Falls die grundlegenden Erkennungssignaturen die E-Mails nicht blockiert hätten, wäre auch Advanced Threat Protection (ATP) von Hornetsecurity nicht von den verschiedenen Anti-Sandboxing-Mechanismen gehindert gewesen. Die Simulation der menschlichen Interaktion der ATP Sandbox klickt die gefälschte Fehlermeldung erfolgreich weg, um das bösartige Dokument komplett auszuführen:

Hornetsecurity Advanced Threat Protection Sandbox klickt auf Button

Die ATP Sandbox erkennt die von dem Dokument ausgehenden Prozesse ebenso wie die Prozess-Injektionen:

Hornetsecurity Advanced Threat Protection Sandbox erkennt Prozess-Injektion

Die Simulation der menschlichen Interaktion sorgt außerdem dafür, dass die beiden abgefragten Cursor-Positionen, die als cur1 und cur2 an den TrickBot-Download-Server geschickt werden, voneinander abweichen:

Hornetsecurity Advanced Threat Protection Sandbox Internetverbindung

So wird die ATP Sandbox von Hornetsecurity nicht durch die verschiedenen Anti-Sandboxing-Techniken getäuscht.

Quellen

Indicators of Compromise (IOCs)

Hashes

SHA256 Dateiname Beschreibung
d6a44f6460fab8c74628a3dc160b9b0f1c8b91b7d238b6b4c1f83b3b43a0463d e-vote_form_1967.doc TrickBot downloader document

URLs

  • hxxps[:]//ppid.indramayukab.go[.]id/may.php?omz=1&pic=b&id=[0-9]{8}&scr=[0-9]{3,4}x[0-9]{3,4}&cur1=[0-9]{3,4}x[0-9]{3,4}&cur2=[0-9]{3,4}x[0-9]{3,4}
  • hxxps[:]//www.inspeclabeling[.]com/wp-content/themes/processing/may.php?omz=1&pic=b&id=[0-9]{8}&scr=[0-9]{3,4}x[0-9]{3,4}&cur1=[0-9]{3,4}x[0-9]{3,4}&cur2=[0-9]{3,4}x[0-9]{3,4}

DNS

  • ppid.indramayukab.go.id
  • www.inspeclabeling.com