
Das Donot-Team der APT-Gruppe (auch bekannt als APT-C-35, Sektor E02) ist seit mindestens 2012 aktiv. Das Interesse der Angreifer ist darauf gerichtet, vertrauliche Informationen und geistiges Eigentum zu erlangen. Zu den Zielen der Kriminellen zählen die Länder Südasiens, insbesondere der öffentliche Sektor Pakistans. 2019 beobachten wir ihre Aktivitäten in Bangladesch, Thailand, Indien, Sri Lanka und auf den Philippinen sowie außerhalb des asiatischen Raums - in Argentinien, den Vereinigten Arabischen Emiraten und im Vereinigten Königreich.
Wir haben mehrere Monate lang Änderungen im Code der böswilligen Downloader der Gruppe verfolgt. In diesem Artikel werden wir einen der Angriffsvektoren betrachten, näher auf die erwähnten Loader eingehen und die Merkmale der Netzwerkinfrastruktur ansprechen.
Angriffskette
Zu Beginn der Infektion erhält das Opfer ein MS Word-Dokument im Office Open XML-Format. Trotz des Fehlens expliziter Beweise sind wir zuversichtlich, dass der anfängliche Penetrationsvektor auf Phishing-E-Mails mit einem Office-Anhang abzielt. Das Dokument selbst ist nicht böswillig, es missbraucht jedoch die Fähigkeit, externe Elemente automatisch zu laden, um das Dokument der nächsten Stufe zu starten.
Zugriff auf ein verknüpftes externes ObjektDie Download-Datei ist ein RTF-Dokument, das die Sicherheitsanfälligkeit in Microsoft Equation bezüglich CVE-2018-0802 ausnutzt. Der Shellcode-Hauptoperation geht eine Kette von Zwischenoperationen voraus, die die nächste Schicht mit Einzelbyte-XOR mit den Schlüsseln 0x90 und 0xCE entschlüsseln:
Entschlüsselung durch den ersten Shellcode des zweiten
Entschlüsselung durch den zweiten Shellcode des dritten
Entschlüsselung durch den dritten Shellcode des MainsDer Haupt-Shellcode führt die folgenden Aktionen aus:
- Ein Einzelbyte-XOR mit dem Schlüssel 0x79 entschlüsselt Binärdaten aus der Datei % TEMP% \ one .
- Erstellt ausführbare Dateien C: \ Windows \ Tasks \ Serviceflow.exe und C: \ Windows \ Tasks \ sinter.exe . Dies sind böswillige Gruppen-Downloader, über die wir sprechen werden.
- Erstellt die Datei C: \ Windows \ Tasks \ S_An.dll , in die zwei Bytes 0x90 geschrieben werden.
- Erstellt die Datei C: \ Windows \ Tasks \ A64.dll . Je nach Kapazität des Systems handelt es sich um eine geänderte x64- oder x86-Version des UACMe- Dienstprogramms, um die Berechtigungen für das System zu erhöhen. Zusätzlich zur Umgehung der UAC-Steuerung erstellt und führt die Bibliothek das BAT-Skript % TEMP% \ v.bat aus , mit dem einer der zuvor erstellten Bootloader mit den folgenden Befehlen als Dienst registriert wird:
sc create ServiceTool displayname= "ServiceFill" binpath= "C:\Windows\Tasks\Serviceflow.exe" start= "auto" sc start ServiceTool
Decodierung von BAT-Skriptzeichenfolgen in modifizierten UACMe-Bibliotheken- Erstellt das JScript-Skript C: \ Windows \ Tasks \ bin.js und führt es aus. Ihre Aufgabe ist es, die Bibliothek A64.dll durch den Export von RnMod mit rundll32 zu starten.
- Erstellt eine Verknüpfung WORDICON.lnk im Startverzeichnis. Ihre Aufgabe ist es, den Bootloader sinter.exe nach einem Systemneustart zu starten.
- Erstellt eine Support.lnk- Verknüpfung im Startverzeichnis. Ihre Aufgabe ist es, das JScript-Skript bin.js nach dem Neustart des Systems auszuführen.
Dekompilierter HauptshellcodeSomit sind zu diesem Zeitpunkt zwei Bootloader zuverlässig im System fixiert, auf deren Funktionsweise wir noch näher eingehen werden.
Lo2 Lader
Trotz der Klassifizierung haben Trojaner unterschiedliche Aufgaben. Die
Serviceflow.exe- Datei hat also eine Watchdog-Rolle. Es sammelt Informationen über das System:
- Benutzername,
- Computername
- den Inhalt der Verzeichnisse \ Programme \ und \ Programme (x86) \
- Betriebssystemversion
- Prozessordaten -
und schreibt die Ergebnisse in eine log.txt-Datei. Es prüft,
ob die Dateien A64.dll und
sinter.exe im Verzeichnis \ Windows \ Tasks \ vorhanden sind, lädt sie gegebenenfalls vom Top-Management-Server skillsnew [.] Herunter und startet sie im Namen des aktuellen Benutzers, wobei das entsprechende Token aus dem Prozess winlogon.exe extrahiert wird. Der Trojaner
sinter.exe signalisiert einem Angreifer, dass er
hxxps://mystrylust.pw/confirm.php
indem er auf
hxxps://mystrylust.pw/confirm.php
und sendet vorab gesammelte Informationen über das System an skillsnew [.] Top. Wenn der Computer des Opfers von weiterem Interesse ist, erhält er den Inhalt der Datei
hxxp://docs.google.com/uc?id=1wUaESzjGT2fSuP_hOJMpqidyzqwu15sz&export=download
. Die Datei enthält den Namen des Steuerungsservers car [.] Drivethrough.top, mit dem eine weitere Interaktion stattfindet. Herunterladbare Komponenten befinden sich im Verzeichnis \ AppData \ Roaming \ InStore \ und werden über den Taskplaner gestartet.
Entschlüsselte Zeilen von Befehlsfragmenten und AufgabenvorlagenDas Ergebnis der Arbeit böswilliger Downloader ist die Einbettung der
drei Framework-Komponenten in das System, mit denen vollständigere Informationen über das Opfer extrahiert werden können, einschließlich Dateien mit angegebenen Erweiterungen, abgefangenen Eingabezeilen, einer Liste von Prozessen und Screenshots. Wir werden die Berücksichtigung der Funktionsweise von Plugins über den Rahmen dieses Artikels hinaus belassen.
Bei der Untersuchung anderer ähnlicher Beispiele haben wir die Pfade und Projektnamen in den Debug-Informationen gefunden:
- D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2 \ SingleV2 \ Release \ BinWork.pdb
- D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2
\ SingleV2_Task_Layout_NewICON \ Release \ BinWork.pdb - D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2
\ SingleV2_Task_Layout_NewICON_N_Lnk \ Release \ BinWork.pdb - D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ New_Single_File \ Lo2 \ SingleV3 \ Release \ WorkFile.pdb
- D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ Off \ Off_New_Api \ Release \ C ++ \ ConnectLink.pdb
- D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ Off \ Off_New_Api \ Release \ C ++ \ TerBin.pdb
- D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ m0 \ yty 2.0 - Mit AES Chunks LOC FOR XP Nur Bit-Change_Name \ Release \ TaskTool.pdb
- D: \ Soft \ DevelopedCode_Last \ BitDefenderTest \ yty 2.0 - Mit AES Chunks OFFS nur Bit \ Release \ C ++ \ MsBuild.pdb
- D: \ Soft \ DevelopedCode_Last \ yty 2.0 \ Release \ C ++ \ Setup.pdb
Neben dem Teilstring "yty 2.0", der Trojaner mit dem oben genannten Framework verbindet, haben wir auch den Teilstring "Lo2" erwähnt, der als "Loader 2" abgekürzt werden kann.
In Bootloader-Versionen wurden bis Mitte 2018 alle verwendeten Zeilen in einer geöffneten Datei in einer Datei gespeichert. In den folgenden Builds verwendeten Angreifer die Zeichenfolgenverschlüsselung. Von Version zu Version änderte sich der Algorithmus wie folgt:
- Ab Mai 2018: Kehre die Zeile um und kodiere Base64.
- Ab April 2019: Führen Sie die vorherigen Schritte zweimal aus .
- Ab Januar 2019: Zeichenfolge mit AES-Algorithmus im CBC-Modus verschlüsseln und Base64 codieren. Beispiel-Python-Code zur Entschlüsselung:
import base64 from Cryptodome.Cipher import AES aeskey = (0x23, 0xd4, 0x67, 0xad, 0x96, 0xc3, 0xd1, 0xa5, 0x23, 0x76, 0xae, 0x4e, 0xdd, 0xca, 0x13, 0x55) def aes_decrypt(data, aeskey): iv = bytes(list(range(0, 16))) key = bytes(aeskey) aes = AES.new(key, AES.MODE_CBC, iv) return aes.decrypt(data).decode().strip('\x00') def base64_aes_decrypt(data, aeskey): data = base64.b64decode(data) data = aes_decrypt(data, aeskey) return data
- Ab Juni 2019: Führen Sie eine zeichenweise zyklische Subtraktion mit einem bestimmten Array von Bytes durch, codieren Sie mit UTF-8 und codieren Sie Base64. Beispiel-Python-Code zur Entschlüsselung:
subgamma = (0x2d, 0x55, 0xf, 0x59, 0xf, 0xb, 0x60, 0x33, 0x29, 0x4e, 0x19, 0x3e, 0x57, 0x4d, 0x56, 0xf) def sub_decrypt(data, subgamma): o = '' length = len(data) subgamma_length = len(subgamma) for i in range(length): o += chr((0x100 + ord(data[i]) - subgamma[i%subgamma_length]) & 0xff) return o def base64_utf8_sub_decrypt(data, subgamma): data = base64.b64decode(data) data = data.decode('utf-8') data = sub_decrypt(data, subgamma) return data
- Ab Oktober 2019: Zeichenweise zyklisch modifiziertes XOR mit einem gegebenen Byte-Array ausführen und Base64 zweimal codieren. Die Besonderheit des XOR-Algorithmus besteht darin, dass XOR nicht erforderlich ist, wenn der Wert des Zeichenstrings mit dem Wert des Zeichens im angegebenen Byte-Array übereinstimmt. Beispiel-Python-Code zur Entschlüsselung:
xorgamma = (0x56, 0x2d, 0x61, 0x21, 0x16) def modxor_decrypt(data, xorgamma): o = '' length = len(data) xorgamma_length = len(xorgamma) for i in range(length): c = data[i] if c != xorgamma[i%xorgamma_length]: c = data[i] ^ xorgamma[i%xorgamma_length] o += chr(c) return o def base64_modxor_decrypt(data, xorgamma): data = base64.b64decode(data) data = modxor_decrypt(data, xorgamma) return data
Beim Schreiben eines Skripts zur Entschlüsselung stellten wir fest, dass einige einzelne Zeilen nicht entschlüsselt werden konnten. Dann stellte sich jedoch heraus, dass jede der anderen oben beschriebenen Entschlüsselungsmethoden für solche Zeichenfolgen geeignet war. Nachdem wir sichergestellt hatten, dass in jedem Beispiel nur eine Methode zum Dekodieren der Daten implementiert war, kamen wir zu dem Schluss, dass die Angreifer einfach vergessen hatten, nicht verwendete Zeilen zu löschen oder durch korrekt verschlüsselte Zeilen für die nächste Malware-Version zu ersetzen.
Die Zeilen in einem der Bootloader-Beispiele wurden auf verschiedene Weise verschlüsselt, während in der ausführbaren Datei nur eine vorhanden warSolche Fehler sind immer in der Hand von Forschern: So kamen zum Beispiel immer wieder in den vergessenen Zeilen die Kontrollserver von Eindringlingen, die uns bisher unbekannt waren.
Merkmale der Netzwerkinfrastruktur
Der Vollständigkeit halber weisen wir auf einige charakteristische Merkmale hin, die dazu beitragen werden, zukünftige Gruppierungsangriffe zu verbinden:
- Die meisten Verwaltungsserver werden vom Anbieter DigitalOcean, LLC (ASN 14061) gemietet und befinden sich in Amsterdam.
- Angreifer verwenden nicht dieselben Server für unterschiedliche DNS-Namen: Für jeden neuen Domainnamen reservieren sie lieber einen neuen dedizierten Host.
- In den meisten Fällen werden die Registrierungsdaten von Domain-Inhabern von Datenschutzdiensten ausgeblendet. Dazu werden folgende Dienste genutzt: WhoisGuard, Inc .; Whois Privacy Protection Service, Inc .; Domänen von Proxy, LLC; Whois Datenschutzstiftung. In einigen Fällen sind die Daten verfügbar, und Sie können den allgemeinen Anweisungen zum Ausfüllen der Felder folgen.
Brennende Wälder der WHOIS-Gebietsinformationen [.] Com
WHOIS Domain Information Cloud-Speicherdienst [.] Com- Am häufigsten werden .top, .pw, .space, .live und .icu TLD verwendet.
Fazit
Donot Team zeichnet sich in jeder Phase des Angriffs durch die Verwendung eigener Tools aus. Angewandte Techniken, um die Code-Analyse zu erschweren - zum einen das Fehlen von Versuchen, ihre Aktionen im System sorgfältig zu verbergen oder zu maskieren - zum anderen.
Mehrere Angriffe auf dasselbe Ziel können nicht nur auf ein besonderes Interesse am gewählten Opferkreis hinweisen, sondern auch die geringe Effizienz der angewandten Taktiken und Techniken bestätigen.
Gepostet
von Alexey Vishnyakov, Positive Technologies
IOCs6ce1855cf027d76463bb8d5954fcc7bb - Bootloader im MS Word-Format
hxxp: //plug.msplugin.icu/MicrosoftSecurityScan/DOCSDOC
21b7fc61448af8938c09007871486f58 - Pipette im MS Word-Format
71ab0946b6a72622aef6cdd7907479ec - Lo2-Ladeprogramm unter C: \ Windows \ Tasks \ Serviceflow.exe
22f41b6238290913fc4d196b8423724d - Lo2-Lader unter C: \ Windows \ Tasks \ sinter.exe
330a4678fae2662975e850200081a1b1 - x86-modifizierte Version von UACMe
22e7ef7c3c7911b4c08ce82fde76ec72 - x64-modifizierte Version von UACMe
skillsnew [.] nach oben
hxxps: //mystrylust.pw/confirm.php
hxxp: //docs.google.com/uc? id = 1wUaESzjGT2fSuP_hOJMpqidyzqwu15sz & export = download
Auto [.] durchfahren
brennende Wälder [.] com
Cloud-Speicher-Service [.] com