Neuer Buhtrap Downloader

Heute werden wir Ihnen einen neuen Ansatz zum Senden von Malware an die Buhtrap-Gruppe vorstellen.



Bootloader-Modul


Am 19. Dezember wurde uns ein böswilliges Mailing mit einer ausführbaren Datei ( md5: faf833a1456e1bb85117d95c23892368 ) bekannt. Die Datei hatte verschiedene Namen: "Abgleich für December.exe", "Docs wednesday.exe", "Documents 19.12.exe", "Closing documents wednesday.exe".

Von interessant - die Datei ist in .Net geschrieben, was für diese kriminelle Gruppe nicht typisch ist. Zum Dekompilieren von .Net können Sie eine beliebige Software verwenden: Reflector , dotPeek , dnSpy , ILSpy . In dem Artikel werden wir über die Funktionen der Implementierung dieser Datei sprechen und wie wir sie analysiert haben.

Erstinspektion des Bootloaders


Für die Analyse haben wir dnSpy verwendet , und alle weiteren Screenshots werden davon stammen.
Öffnen Sie aus Gewohnheit die ausführbare Datei in IDA Pro und sehen Sie sich den Importabschnitt an. Beispiele:



Das Vorhandensein einiger Funktionen deutet auf das Vorhandensein einer gepackten Nutzlast ( LoadCursorW , LoadIconW - hat das Objekt aus den Ressourcen abgerufen , VirtualProtect - hat die Seitenattribute geändert, dann können Sie den Code ausführen) und eines einfachen Anti-Debugging ( IsDebuggerPresent ) hin. Aber alles stellte sich als noch einfacher heraus. Die Ausführung erreichte nicht einmal IsDebuggerPresent, und LoadCursorW und LoadIconW funktionierten nutzlos, weil sie versuchten, auf nicht vorhandene Ressourcen zuzugreifen (LoadCursorW von " fiza " und LoadIconW von " saxikulatebutohutejijobodugore "):





Aber zurück zum dnSpy- Dekompiler. In der ausführbaren Datei sehen wir eine erhebliche Menge nicht verwalteten Codes:



Um zu verstehen, welcher nicht verwaltete Code in der untersuchten Datei enthalten ist, verwenden wir IDA Pro. Am einfachsten ist es, den nicht verwalteten Code in hexadezimaler Form anzuzeigen. Wechseln Sie dazu zum Offset File Offset. Verwenden Sie die Funktion _main () als Beispiel:





Als nächstes werden wir in IDA Pro nach Hex-Reihenfolge suchen:



Am Ausgang erhalten wir die nicht verwaltete Funktion _main (), mit der Sie bequem mit Hilfe des idov-Dekompilierers arbeiten können:





Nutzlast bekommen


Zurück zu dnSpy. Es wird auf die Variable payloadData hingewiesen .





Wir finden diese Sequenz in IDA Pro, erhalten Links dazu und stellen fest, dass der Aufruf nur in der Funktion _main () erfolgt :



Der mit diesem Puffer dekompilierte Code sieht folgendermaßen aus:



Die folgenden Funktionen sind für die Konvertierung dieses Puffers verantwortlich:



Hier wird die Holdrand- Variable auf 0xEA48CB16 initialisiert und die Funktion foo () wird in einer Schleife für jedes Byte aus payloadData ( Parameter sbyte c ) aufgerufen . Es ist zu beachten, dass die Funktion t () aus einem unsicheren Code stammt: Wenn Sie sich den Code ansehen, können Sie sicherstellen, dass er immer 0x343FD zurückgibt .

Wir rüsten uns mit IDA Pro aus und stellen beim Betrachten des resultierenden entpackten Puffers fest, dass er am Anfang Code enthält:



Bei Offset 0x15A0 vom Anfang des Puffers befindet sich eine ausführbare Datei:



Speichern Sie es für eine spätere Analyse.

Nun, im ausführbaren Code selbst ist eine ziemlich triviale Sache implementiert. Zunächst wird die folgende Struktur gebildet ( hier ist mz_base die Offset-Adresse im Puffer mit dem entpackten PE, und die verbleibenden Felder sind die Adressen der erforderlichen Funktionen und Bibliothekshandles ):



Anschließend wird mithilfe der erhaltenen Funktionen der Prozess derselben ausführbaren Datei erstellt ( md5: faf833a1456e1bb85117d95c23892368 ), und die entpackte ausführbare Datei wird den virtuellen Adressen des neuen Prozesses zugeordnet. Nach dem Ändern der Adresse der ausführbaren Anweisung ( GetThreadContext- und SetThreadContext- Bundle) wird der Thread des neuen Prozesses gestartet und der übergeordnete Prozess selbst wird beendet.

Nun wenden wir uns der Analyse der resultierenden ausführbaren Datei (Nutzdaten) zu.

Nutzlast auspacken


Die Nutzdaten ( md5 dump: d8f40c7060c44fab57df87ab709f058f ) werden ebenfalls im .Net Framework geschrieben.

Zum Schutz vor statischen und dynamischen Analysen verwendeten Malware- Entwickler den neuesten beliebten ConfuserEx- Protector:



ConfuserEx ist ein etablierter Open Source Protector.

Primäres Auspacken


Der Einstiegspunkt für Dateien, die durch diesen Protektor geschützt sind, lautet wie folgt:



Nach der Entschlüsselung wird das Byte-Array in Form eines Moduls namens Koi in den Speicher geladen. Dann wird die Hauptmethode dieses Moduls bestimmt und aufgerufen. Auf der .Net-Plattform kann eine Methode oder ein Konstruktor in einem Modul aus dem Metadaten-Token abgerufen werden, indem die Funktion Module.ResolveMethod () aufgerufen wird . Um die Steuerung auf die erhaltene Methode zu übertragen, wird die Funktion MethodBase.Invoke () verwendet.



Der ausführbare Code im Koi- Modul lautet wie folgt:



Um das Profil zu entfernen, haben wir die folgenden Dienstprogramme verwendet:


ConfuserEx-Unpacker entschlüsselte die Zeilen und den Code innerhalb der Methoden und de4dot machte die Namen der Methoden lesbar.

Das Ergebnis ist ein Code, der für die statische Analyse geeignet ist:



Natürlich hatten wir das Glück, lesbaren Code zu erhalten. Virenschreiber können den Quellcode für das ConfuserEx- Profil ändern , um die Analyse weiter zu erschweren.
Es gab noch zwei Probleme, die für eine komfortable Analyse der Datei gelöst werden mussten.

1. Problem


Nach dem Entfernen des Profils konnte der Dekompiler einige der Methoden nicht analysieren. Zum Beispiel:



Wenn Sie zum IL-Code wechseln, werden Sie Aufrufe an Nullzeigern bemerken:



Ersetzen Sie falsche Anweisungen durch keine Anweisungen, um Dekompilierungsfehler zu beheben. (Mit dem Dienstprogramm dnSpy können Sie sowohl dekompilierten Code als auch IL-Code ändern.)
Nach dem Ersetzen sieht der dekompilierte Code korrekt aus:



Wenn wir den IL-Code in allen problematischen Methoden ändern, erhalten wir eine vollständig dekompilierte Datei.

2. Problem


Es ist unwahrscheinlich, dass die resultierende Datei gestartet wird, und dies schließt die Möglichkeit einer dynamischen Analyse aus. Um dieses Problem zu lösen, müssen Sie das Token der Eingabemethode in der Struktur der ausführbaren Datei angeben.

Sie können es auf zwei Arten finden:

  • Schauen Sie unter Debugging nach, mit welchem ​​Parameter die Funktion aufgerufen wurde

Module.ResolveMethod () vor dem Entpacken der Datei:



  • Suchen Sie in der entpackten Datei die Methode mit der Bezeichnung [STAThread] :



In diesem Fall lautet das Metadaten-Token für die Eingabemethode 0x6000106 . Wir ändern es mit dem Dienstprogramm CFF Explorer :



Nach dem Speichern der Änderungen wird die entpackte Datei gestartet und ordnungsgemäß debuggt.

Bootloader-Analyse


Unmittelbar nach Arbeitsbeginn prüft der Bootloader, ob er in einer virtuellen Umgebung ausgeführt wird.
Die Ausführung unter VMWare oder QEMU wird durch Suchen nach den Teilzeichenfolgen "vmware" und "qemu" im folgenden Registrierungswert bestimmt:

  • [HKLM \ System \ CurrentControlSet \ Services \ Disk \ Enum \ 0].

Wenn eine virtuelle Maschine erkannt wird, zeigt der Bootloader die entsprechende Fenstermeldung an:



Interessanterweise hat die Ausgabe dieser Nachricht keinen Einfluss auf den Betrieb des Prozesses.

Danach versucht die Malware, die Bibliotheken aus der folgenden Liste in den Speicher zu laden: SbieDll.dll, dbghelp.dll, api_log.dll, dir_watch.dll, pstorec.dll, vmcheck.dll, wpespy.dll, snxhk.dll, guard32.dll .

Darüber hinaus prüft der Loader anhand der Aufrufe der Funktionen Debugger.IsLogging () und Debugger.get_IsAttached () , ob er unter dem Debugger ausgeführt wird.
Wenn mindestens eine der Bibliotheken erfolgreich geladen wurde oder der Loader feststellt, dass sie unter dem Debugger ausgeführt wird, wird sie mit dem Befehl „ cmd / C ping 8.8.8.8 -n 1 -w 3000> Nul & Delautomatisch gelöscht . Interessanterweise kann sich der Bootloader selbst auf einem realen System selbst löschen, indem er die Bibliothek dbghelp.dl l lädt .

Als nächstes prüft die Malware, ob sie aus dem Verzeichnis gestartet wird, das den Teilstring "Mozilla" enthält.

Wenn der Prozess nicht aus dem Verzeichnis gestartet wird, das den Teilstring "Mozilla" enthält


  • VPO erstellt eine Liste von Verzeichnissen, die sich auf dem Desktop befinden und die folgenden Teilzeichenfolgen enthalten (alle Zeilen im Bootloader werden mit dem AES-256-ECB-Algorithmus verschlüsselt, Verschlüsselungsschlüssel werden durch fest codierte Kennwörter generiert):



  • Generiert eine Liste von URLs aus dem Browserverlauf, die die folgenden Teilzeichenfolgen enthalten:



  • Erzeugt eine Liste von Dateien, die sich in den Verzeichnissen "% UserProfile% \\ Desktop", "% AppData%", "C: \\ Programme (x86)", "C: \\ Programme (x86) (x86)" und befinden haben die folgenden Namen:



  • Zählt die Anzahl der nicht leeren Listen anhand von Indikatoren für Bankgeschäfte (in der aktuellen Version des Bootloaders hat diese Funktionalität keine Auswirkungen).
  • Erstellt eine Aufgabe, um diese Datei jedes Mal auszuführen, wenn sich ein Benutzer mit dem Befehl "schtasks / create / f / sc ONLOGON / RL HIGHEST / tn LimeRAT-Admin / tr" anmeldet.
  • Wenn die Aufgabe nicht erstellt werden konnte, wird die Verknüpfung "% AppData% \\ Microsoft \\ Windows \\ Startmenü \\ Programme \\ Startup \\ MozillaUpdate.lnk" mit der Angabe "% Appdata% \\ Mozilla \\ xaudiodg.exe" erstellt. Dies stellt sicher, dass die Datei xaudiodg.exe bei jedem Neustart des Systems gestartet wird.
  • Es kopiert sich entlang des Pfads "% AppData% \\ Mozilla \\ xaudiodg.exe".
  • Löscht die Datei <self_path>: Zone.Identifier, führt xaudiodg.exe aus und löscht sich selbst.

Wenn der Prozess aus dem Verzeichnis gestartet wird, das den Teilstring "Mozilla" enthält


  • Malware sucht auch nach den oben genannten Indikatoren für Bankgeschäfte innerhalb des infizierten Systems.
  • Sammelt andere Systeminformationen zum Senden an den Verwaltungsserver.
  • In einem separaten Thread werden Informationen an C & C gesendet und auf eine Antwort vom Server gewartet.
  • In einem anderen Thread wird eine verschlüsselte Zeichenfolge "PING?" In einer Endlosschleife an den Server gesendet.

Management Server-Interaktion


Die Server-IP-Adresse im getesteten Malware-Beispiel lautet 213.252.244 [.] 200. Die Verbindung wird durch einen zufällig ausgewählten Port aus der Liste initialisiert:

• 8989,
• 5656,
• 2323.

Unmittelbar nach der Initialisierung der Verbindung sendet der Bootloader Informationen über das infizierte System an C & C:

• Benutzer-ID,
• Benutzername,
• Betriebssystemversion,
• eine eigene Version (Loader v0.2.1),
• Listen von Indikatoren für Bankgeschäfte auf dem infizierten System.

Ein Beispiel für eine vom Loader an den Verwaltungsserver gesendete Zeile:

«INFO<NYANxCAT>9D3A4B22D21C<NYANxCAT>IEUser<NYANxCAT> Windows 7 Enterprise SP 1 <NYANxCAT>loader v0.2.1<NYANxCAT><NYANxCAT><NYANxCAT>1c, » 


Diese Zeile wird gesendet, wenn sich auf dem Desktop des infizierten Benutzers ein Ordner "1c" befindet und keine anderen Anzeigen vorhanden sind.
Die Funktion zum Verarbeiten der Antwort vom Server lautet wie folgt:



Die entschlüsselte Antwort vom Server lautet wie folgt:

  •  COMMAND<NYANxCAT>DATA1<NYANxCAT>DATA2<NYANxCAT> 

Wie aus dem Screenshot ersichtlich, kann COMMAND einen der folgenden Werte annehmen:

  • SCHLIESSEN - Beendet die Verbindung und schließt den aktuellen Prozess.
  • DW - dekodiert base64-Inhalte aus DATA2, schreibt sie mit der Erweiterung aus DATA1 in die Datei <temp_file_name> und startet die Datei zur Ausführung.
  • UPDATE - Dekodiert Base64-Inhalte aus DATA1, schreibt sie in eine Datei mit dem Namen <Temp_Dateiname> und der Erweiterung .exe, startet eine neue ausführbare Datei und löscht sich selbst.
  • RD- - sendet als Antwort die Zeichenfolge "RD-";
  • RD + - sendet einen Screenshot an den Verwaltungsserver.
  • DEL - löscht sich selbst.

Während der Bootloader-Untersuchung ist es uns gelungen, den DW-Befehl vom Angreifer-Server abzurufen. Infolgedessen wurde die Punto Switcher-Software mit der schädlichen DLL winmm.dll (md5: 9d25553bb09e2785262b2f7ba7923605) installiert, bei der es sich um ein Buhtrap-Spyware-Modul handelt.

TCP Stream ist wie folgt:





Zum Verschlüsseln von Daten, die zwischen dem Client und dem Verwaltungsserver übertragen werden, wird der AES-128-ECB- Algorithmus verwendet. Der Verschlüsselungsschlüssel wird mit einem fest codierten Kennwort initialisiert.

Nach der Entschlüsselung ist der Verkehr wie folgt:





Ab base64 wird das NSIS-Installationsprogramm mit den folgenden Inhalten dekodiert:



Interessanterweise antwortete der Server, obwohl die Liste der Bankindikatoren leer war.

Schädliche DLL


Die Bibliothek winmm.dll wird mithilfe der DLL-Hijacking-Technik ausgeführt. Das schädliche Modul sendet Informationen über das infizierte System und eine Liste der aktiven Smartcard-Leser an C & C. Darüber hinaus verfügt es über eine Keylogger-Komponente und kann andere schädliche Module vom verwaltenden Server empfangen, von der Festplatte oder im Speicher des aktuellen Prozesses ausführen. C & C-Server der untersuchten Stichprobe befinden sich unter folgenden Adressen:

  • hxxp: // my1cprovider [.] xyz: 6060 / klog [.] php
  • hxxp: // tinderminderorli1999 [.] xyz: 7764 / klog [.] php

Fazit


Der Infektionsprozess kann wie folgt dargestellt werden:



Trotz des guten Schutzes vor Analysen ist klar, dass der Bootloader derzeit nicht richtig funktioniert und sich höchstwahrscheinlich im Entwicklungsprozess befindet:

  • kann sich selbst auf einem realen System selbst löschen;
  • Überprüft die Verbindung des infizierten Systems mit Bankgeschäften, bevor es sich selbst in "% AppData% \\ Mozilla \\ xaudiodg.exe" kopiert und mit C & C interagiert, verwendet diese Informationen jedoch in keiner Weise.

Erinnern Sie sich schließlich an die seltsame Fenstermeldung. Interessanterweise ist dies ein Fehler bei den Entwicklern - oder wird dies speziell getan, um Benutzer zu ermutigen, die virtuelle Umgebung zu verlassen und auf einer realen Maschine zu starten? Willkommen in den Kommentaren.

IOCs


MD5:

faf833a1456e1bb85117d95c23892368
9d25553bb09e2785262b2f7ba7923605

URLs:

hxxp: // my1cprovider [.] xyz: 6060 / klog [.] php
hxxp: // tinderminderorli1999 [.] xyz: 7764 / klog [.] php
IPs:
213.252.244 [.] 200

Source: https://habr.com/ru/post/de434626/


All Articles