Ende Mai entdeckten wir eine Kampagne zur Verbreitung von Remote Access Trojan (RAT)-Malware – Programmen, die es Angreifern ermöglichen, ein infiziertes System aus der Ferne zu steuern.
Die von uns untersuchte Gruppe zeichnete sich dadurch aus, dass sie keine bestimmte RAT-Familie zur Infektion auswählte. Bei Angriffen im Rahmen der Kampagne wurden mehrere Trojaner bemerkt (die alle weit verbreitet waren). Mit diesem Merkmal erinnerte uns die Gruppe an den Rattenkönig – ein mythisches Tier, das aus Nagetieren mit ineinander verschlungenen Schwänzen besteht.
Das Original ist der Monographie von K. N. Rossikov „Mäuse und mausähnliche Nagetiere, die wirtschaftlich bedeutendsten“ (1908) entnommen.
Zu Ehren dieser Kreatur haben wir die Gruppe, die wir in Betracht ziehen, RATKing genannt. In diesem Beitrag gehen wir detailliert darauf ein, wie die Angreifer den Angriff durchgeführt haben, welche Tools sie verwendet haben, und teilen auch unsere Gedanken zur Zuordnung dieser Kampagne mit.
Fortschritt des Angriffs
Alle Angriffe dieser Kampagne erfolgten nach folgendem Algorithmus:
Der Benutzer erhielt eine Phishing-E-Mail mit einem Link zu Google Drive.
Über den Link lud das Opfer ein bösartiges VBS-Skript herunter, das eine DLL-Bibliothek angab, um die endgültige Nutzlast in die Windows-Registrierung zu laden, und startete PowerShell, um es auszuführen.
Die DLL-Bibliothek injizierte die endgültige Nutzlast – tatsächlich eine der von Angreifern verwendeten RATs – in den Systemprozess und registrierte ein VBS-Skript im Autorun, um auf dem infizierten Computer Fuß zu fassen.
Die endgültige Nutzlast wurde in einem Systemprozess ausgeführt und gab dem Angreifer die Möglichkeit, den infizierten Computer zu kontrollieren.
Schematisch lässt es sich so darstellen:
Als Nächstes konzentrieren wir uns auf die ersten drei Phasen, da wir am Mechanismus der Malware-Übermittlung interessiert sind. Wir werden den Funktionsmechanismus der Malware selbst nicht im Detail beschreiben. Sie sind weit verbreitet – entweder in speziellen Foren verkauft oder sogar als Open-Source-Projekte verbreitet – und daher nicht nur der RATKing-Gruppe vorbehalten.
Analyse der Angriffsstadien
Stufe 1. Phishing-E-Mail
Der Angriff begann damit, dass das Opfer einen böswilligen Brief erhielt (die Angreifer verwendeten unterschiedliche Vorlagen mit Text; der Screenshot unten zeigt ein Beispiel). Die Nachricht enthielt einen Link zu einem legitimen Repository drive.google.com, was angeblich zu einer Seite zum Herunterladen von PDF-Dokumenten führte.
Beispiel für eine Phishing-E-Mail
Tatsächlich wurde jedoch überhaupt kein PDF-Dokument geladen, sondern ein VBS-Skript.
Als Sie auf den Link aus der E-Mail im obigen Screenshot geklickt haben, wurde eine Datei mit dem Namen „ Cargo Flight Details.vbs. In diesem Fall versuchten die Angreifer nicht einmal, die Datei als legitimes Dokument zu tarnen.
Gleichzeitig entdeckten wir im Rahmen dieser Kampagne ein Skript namens Cargo Trip Detail.pdf.vbs. Es könnte bereits als legitimes PDF durchgehen, da Windows Dateierweiterungen standardmäßig verbirgt. Allerdings könnte in diesem Fall immer noch das Symbol, das dem VBS-Skript entsprach, Verdacht erregen.
In diesem Stadium könnte das Opfer die Täuschung erkennen: Schauen Sie sich die heruntergeladenen Dateien einfach einen Moment genauer an. Allerdings verlassen sich Angreifer bei solchen Phishing-Kampagnen häufig auf einen unaufmerksamen oder eiligen Benutzer.
Stufe 2. VBS-Skriptoperation
Das VBS-Skript, das der Benutzer versehentlich öffnen konnte, registrierte eine DLL-Bibliothek in der Windows-Registrierung. Das Skript war verschleiert: Die darin enthaltenen Zeilen wurden als durch ein beliebiges Zeichen getrennte Bytes geschrieben.
Beispiel für ein verschleiertes Skript
Der Entschleierungsalgorithmus ist recht einfach: Jedes dritte Zeichen wurde aus der verschleierten Zeichenfolge ausgeschlossen, woraufhin das Ergebnis von Base16 in die ursprüngliche Zeichenfolge dekodiert wurde. Zum Beispiel vom Wert 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (im Screenshot oben hervorgehoben) war die resultierende Zeile WScript.Shell.
Um Strings zu entschlüsseln, haben wir die Python-Funktion verwendet:
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
Unten, in den Zeilen 9–10, markieren wir den Wert, dessen Entschleierung zu einer DLL-Datei führte. Er war es, der im nächsten Schritt mit PowerShell gestartet wurde.
String mit verschleierter DLL
Jede Funktion im VBS-Skript wurde ausgeführt, während die Zeichenfolgen entschlüsselt wurden.
Nach dem Ausführen des Skripts wurde die Funktion aufgerufen wscript.sleep — Es wurde verwendet, um eine verzögerte Ausführung durchzuführen.
Als nächstes arbeitete das Skript mit der Windows-Registrierung. Er nutzte hierfür die WMI-Technologie. Mit seiner Hilfe wurde ein eindeutiger Schlüssel erstellt und der Hauptteil der ausführbaren Datei in seinen Parameter geschrieben. Auf die Registrierung wurde über WMI mit dem folgenden Befehl zugegriffen:
Ein durch ein VBS-Skript in der Registrierung erstellter Eintrag
Stufe 3. Betrieb der DLL-Bibliothek
Im dritten Schritt lud die bösartige DLL die endgültige Nutzlast, injizierte sie in den Systemprozess und sorgte dafür, dass das VBS-Skript automatisch gestartet wurde, wenn sich der Benutzer anmeldete.
Über PowerShell ausführen
Die DLL wurde mit dem folgenden Befehl in PowerShell ausgeführt:
Registrierungswertdaten mit Namen erhalten rnd_value_name — Bei diesen Daten handelte es sich um eine DLL-Datei, die auf der .Net-Plattform geschrieben wurde.
hat das resultierende .Net-Modul in den Prozessspeicher geladen powershell.exe Verwendung der Funktion [System.Threading.Thread]::GetDomain().Load()(Detaillierte Beschreibung der Load()-Funktion verfügbar auf der Microsoft-Website);
hat die Funktion ausgeführt GUyyvmzVhebFCw]::EhwwK() - damit begann die Ausführung der DLL-Bibliothek - mit Parametern vbsScriptPath, xorKey, vbsScriptName. Parameter xorKey Der Schlüssel zum Entschlüsseln der endgültigen Nutzlast und die Parameter wurden gespeichert vbsScriptPath и vbsScriptName wurden übertragen, um ein VBS-Skript im Autorun zu registrieren.
Beschreibung der DLL-Bibliothek
In dekompilierter Form sah der Bootloader so aus:
Loader in dekompilierter Form (die Funktion, mit der die Ausführung der DLL-Bibliothek begann, ist rot unterstrichen)
Der Bootloader ist durch den .Net Reactor-Schutz geschützt. Das Dienstprogramm de4dot leistet hervorragende Arbeit beim Entfernen dieses Schutzes.
Dieser Lader:
injizierte die Nutzlast in den Systemprozess (in diesem Beispiel es svchost.exe);
Ich habe ein VBS-Skript zum Autorun hinzugefügt.
Nutzlastinjektion
Schauen wir uns die Funktion an, die das PowerShell-Skript aufgerufen hat.
Vom PowerShell-Skript aufgerufene Funktion
Diese Funktion führte die folgenden Aktionen aus:
entschlüsselte zwei Datensätze (array и array2 im Screenshot). Sie wurden ursprünglich mit gzip komprimiert und mit dem XOR-Algorithmus mit dem Schlüssel verschlüsselt xorKey;
kopierte Daten in zugewiesene Speicherbereiche. Daten von array - auf den Speicherbereich, auf den verwiesen wird intPtr (payload pointer im Screenshot); Daten von array2 - auf den Speicherbereich, auf den verwiesen wird intPtr2 (shellcode pointer im Screenshot);
die Funktion aufgerufen CallWindowProcA(описание Diese Funktion ist auf der Microsoft-Website verfügbar) mit den folgenden Parametern (die Namen der Parameter sind unten aufgeführt, im Screenshot in der gleichen Reihenfolge, aber mit Arbeitswerten):
lpPrevWndFunc - Zeiger auf Daten von array2;
hWnd – Zeiger auf eine Zeichenfolge, die den Pfad zur ausführbaren Datei enthält svchost.exe;
Msg - Zeiger auf Daten von array;
wParam, lParam — Nachrichtenparameter (in diesem Fall wurden diese Parameter nicht verwendet und hatten den Wert 0);
eine Datei erstellt %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlWo <name> - Dies sind die ersten 4 Zeichen des Parameters vbsScriptName (Im Screenshot beginnt das Codefragment mit dieser Aktion mit dem Befehl File.Copy). Auf diese Weise fügte die Malware beim Anmelden des Benutzers eine URL-Datei zur Liste der Autorun-Dateien hinzu und wurde so mit dem infizierten Computer verbunden. Die URL-Datei enthielt einen Link zum Skript:
Um zu verstehen, wie die Injektion durchgeführt wurde, haben wir die Datenarrays entschlüsselt array и array2. Dazu haben wir die folgende Python-Funktion verwendet:
def decrypt(data, key):
return gzip.decompress(
bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])
Als Ergebnis haben wir Folgendes herausgefunden:
array war eine PE-Datei – dies ist die endgültige Nutzlast;
array2 war der Shellcode, der zum Ausführen der Injektion erforderlich war.
Shellcode aus einem Array array2 als Funktionswert übergeben lpPrevWndFunc in eine Funktion umwandeln CallWindowProcA. lpPrevWndFunc — Callback-Funktion, ihr Prototyp sieht so aus:
Also, wenn Sie die Funktion ausführen CallWindowProcA mit Parametern hWnd, Msg, wParam, lParam Shellcode aus dem Array wird ausgeführt array2 mit Argumenten hWnd и Msg. hWnd ist ein Zeiger auf eine Zeichenfolge, die den Pfad zur ausführbaren Datei enthält svchost.exeUnd Msg – Zeiger auf die endgültige Nutzlast.
Der Shellcode hat Funktionsadressen von erhalten kernel32.dll и ntdll32.dll basierend auf Hash-Werten aus ihren Namen und injizierte die endgültige Nutzlast in den Prozessspeicher svchost.exemit der Process Hollowing-Technik (weitere Informationen dazu finden Sie hier). Artikel). Beim Einfügen des Shellcodes:
einen Prozess erstellt svchost.exe in einem angehaltenen Zustand mithilfe der Funktion CreateProcessW;
Anschließend wurde die Anzeige des Abschnitts im Adressraum des Prozesses ausgeblendet svchost.exe mit der Funktion NtUnmapViewOfSection. Dadurch hat das Programm den Speicher des ursprünglichen Prozesses freigegeben svchost.exeum dann Speicher für die Nutzlast an dieser Adresse zu reservieren;
Zugeordneter Speicher für die Nutzdaten im Prozessadressraum svchost.exe mit der Funktion VirtualAllocEx;
Beginn des Injektionsvorgangs
hat den Inhalt der Nutzlast in den Prozessadressraum geschrieben svchost.exe mit der Funktion WriteProcessMemory (wie im Screenshot unten);
nahm den Vorgang wieder auf svchost.exe mit der Funktion ResumeThread.
Abschluss des Injektionsvorgangs
Herunterladbare Malware
Als Ergebnis der beschriebenen Aktionen wurde eine von mehreren Schadprogrammen der RAT-Klasse auf dem infizierten System installiert. Die folgende Tabelle listet die bei dem Angriff verwendete Malware auf, die wir sicher einer Gruppe von Angreifern zuordnen können, da die Proben auf denselben Befehls- und Kontrollserver zugegriffen haben.
Name der Malware
Zum ersten Mal gesehen
SHA-256
C & C
Der Prozess, in den die Injektion durchgeführt wird
Beispiele für verteilte Malware mit demselben Kontrollserver
Zwei Dinge sind hier bemerkenswert.
Erstens die Tatsache, dass die Angreifer mehrere verschiedene RAT-Familien gleichzeitig verwendeten. Dieses Verhalten ist für bekannte Cyber-Gruppen nicht typisch, die oft ungefähr die gleichen Tools verwenden, die ihnen vertraut sind.
Zweitens verwendete RATKing Schadsoftware, die entweder in Fachforen zu einem niedrigen Preis verkauft wird oder sogar ein Open-Source-Projekt ist.
Eine vollständigere Liste der in der Kampagne verwendeten Malware – mit einem wichtigen Vorbehalt – finden Sie am Ende des Artikels.
Über die Gruppe
Wir können die beschriebene Schadkampagne keinem bekannten Angreifer zuordnen. Derzeit gehen wir davon aus, dass diese Angriffe von einer grundlegend neuen Gruppe durchgeführt wurden. Wie wir zu Beginn schrieben, nannten wir es RATKing.
Um das VBS-Skript zu erstellen, nutzte die Gruppe wahrscheinlich ein dem Dienstprogramm ähnliches Tool VBS-Verschlüsselung vom Entwickler NYAN-x-CAT. Dies wird durch die Ähnlichkeit des Skripts, das dieses Programm erstellt, mit dem Skript des Angreifers angezeigt. Im Einzelnen: Beide:
Führen Sie eine verzögerte Ausführung mithilfe der Funktion durch Sleep;
WMI verwenden;
Registrieren Sie den Hauptteil der ausführbaren Datei als Registrierungsschlüsselparameter.
Führen Sie diese Datei mit PowerShell in ihrem eigenen Adressraum aus.
Vergleichen Sie der Klarheit halber den PowerShell-Befehl zum Ausführen einer Datei aus der Registrierung, die von einem mit VBS-Crypter erstellten Skript verwendet wird:
Beachten Sie, dass die Angreifer ein anderes Dienstprogramm von NYAN-x-CAT als eine der Nutzlasten verwendeten – KalkRatte.
Die Adressen der C&C-Server weisen auf eine weitere Besonderheit von RATKing hin: Die Gruppe bevorzugt dynamische DNS-Dienste (siehe Liste der C&Cs in der IoC-Tabelle).
IOC
Die folgende Tabelle enthält eine vollständige Liste der VBS-Skripte, die höchstwahrscheinlich der beschriebenen Kampagne zugeordnet werden können. Alle diese Skripte sind ähnlich und führen ungefähr die gleiche Abfolge von Aktionen aus. Sie alle injizieren Malware der RAT-Klasse in einen vertrauenswürdigen Windows-Prozess. Alle von ihnen verfügen über C&C-Adressen, die über dynamische DNS-Dienste registriert sind.
Wir können jedoch nicht behaupten, dass alle diese Skripte von denselben Angreifern verbreitet wurden, mit Ausnahme von Beispielen mit denselben C&C-Adressen (z. B. kimjoy007.dyndns.org).
Name der Malware
SHA-256
C & C
Der Prozess, in den die Injektion durchgeführt wird