
Kürzlich entdeckten PT ESC-Spezialisten ein Dokument im Publisher-Format mit dem Namen „Invitation 29.-30. November 2018.pub“ (1edd5b6a02ec82cec381c1a1ec74a67e). In diesem Artikel erfahren Sie, wie aus einem normal aussehenden Dokument ein Trojaner wird, mit dem ein Angreifer Bilder von Webcams aufnehmen, Ton per Befehl aufzeichnen oder bei Erkennung eines Skype-Fensters PowerShell-Skripts ausführen, Screenshots erstellen und Dateien von Mediengeräten kopieren kann.
Wenn Sie das Dokument öffnen, wird ein Fenster mit einem verschwommenen Dokumentstub und der Aufforderung angezeigt, das Microsoft Publisher-Skript einzuschließen.

Nachdem der Benutzer es aktiviert hat, wird das in das Dokument integrierte Skript in JavaScript ausgeführt. Es sieht so aus:

Das Ergebnis des Skripts ist die Dekodierung von zwei Dateien, PDF und EXE, aus Base64. Beide Dateien werden in C: \ Users \ {Benutzername} \ AppData \ Roaming \ DBFUpdate geschrieben. Dementsprechend werden beide Dateien ausgeführt, und der Benutzer sieht einen solchen Stub auf dem Dokumentbildschirm:

Schatzsucher RAT
Angreifer verwenden eine RAT mit mehreren Modulen und einer Vielzahl von Funktionen, die den vollständigen Zugriff auf den infizierten Computer ermöglichen.
Code-Funktionen:
- Vollständig in C ++ geschrieben mit einer großen Anzahl von STL-Konstrukten, die intern verwendet werden.
- Anwendung der Boost-Bibliothek, insbesondere JSON und Archive.
- Debugging-Funktionen (mehr im Abschnitt über Stager).
Haupttrojaner
Der Haupttrojaner befindet sich auf dem Computer des Opfers und ist eine Plattform, auf die schädliche Module von C2 geladen werden.
Zunächst initialisiert stager das Arbeitsverzeichnis, in dem anschließend die von den Modulen gesammelten Informationen, Dienstprogramme, die für das Funktionieren der Module erforderlich sind, usw. gespeichert werden.

Nachfolgend finden Sie die Initialisierung der Pfade zum Erstellen des Arbeitsverzeichnisses:

Nachdem die erforderlichen Verzeichnisse erstellt wurden, sammelt der Haupttrojaner Informationen über den infizierten Computer und sendet sie an den Steuerungsserver.
Troyan interessiert sich für solche Daten:
- Kennung der Version des Betriebssystems, auf dem der Haupttrojaner ausgeführt wird;
- Die Standardsprache der Benutzeroberfläche
- Die Hauptversionsnummer des Service Pack-Betriebssystems;
- Computername und Computerkennung (Einzelheiten zum Abrufen einer Computerkennung finden Sie im Abschnitt zum Netzwerkprotokoll).
So werden Informationen über den infizierten Computer gesammelt:

Als Nächstes wird der Haupttrojaner auf dem infizierten Computer durch Ändern des Werts in der Registrierung unter HKCU \ Environment \ UserInitMprLogonScript behoben. Hier wird der Name der ausführbaren Datei geschrieben, die während der Initialisierung des Arbeitsverzeichnisses zugewiesen wurde. In diesem Fall entspricht er "DCTHOST.exe". Diese Methode wird
im Hexacorn-Blog beschrieben und wurde auch von APT28 und der Cobalt-Gruppe in ihrem ComDLLDroper verwendet.

Der letzte Schritt beim Initialisieren des Haupttrojaners besteht darin, die ausführbare Datei von ihrem aktuellen Speicherort in das Arbeitsverzeichnis mit demselben Namen zu kopieren, der bei der Initialisierung des Arbeitsverzeichnisses ausgewählt wurde.
Nachdem der Haupttrojaner initialisiert wurde, wird die Vorbereitung für den Empfang von Befehlen durchgeführt. Das Kernmodul wird zur Liste der laufenden Module hinzugefügt, bei denen es sich um den Haupttrojaner handelt. Als nächstes wird ein Befehl vom Kernmodul mit der Kennung 0 gestartet. Dieser Befehl ist im Hauptmodul nicht implementiert, sondern nur ein Stub. Der Konstruktor des Objekts des Core-Moduls ist unten dargestellt.

Am Ende beginnen zwei Threads. Einer der Threads startet einen Timer, der standardmäßig jede Sekunde aktiviert wird und versucht, einen Befehl von C2 anzufordern.

Der zweite Stream lädt zusätzliche Bibliotheken und Standardmodule. Bibliotheken haben wie Module eine Kennung, aber im Gegensatz zu Modulen sind Bibliothekskennungen negativ. Beginnen Sie mit –1 und wachsen Sie zu niedrigeren Zahlen. Unten finden Sie eine Liste der von C2 heruntergeladenen Bibliotheken.

Debugging-Funktionen des Haupttrojaners
Zu Beginn seiner Arbeit setzt der Haupttrojaner unmittelbar nach der Initialisierung über SetUnhandledExceptionFilter einen Ausnahmebehandler, der interessante Funktionen enthält. Wenn Ausnahmen auftreten, fallen sie in den Handler, der den Minidump der Anwendung schreibt und gleichzeitig Informationen über die Ausnahme speichert. Dann startet es sich neu. Auf dem Bildschirm - Erstellen eines Minidumps:

Netzwerkprotokoll
Der Austausch zwischen Software und C2 erfolgt über ein selbstgeschriebenes Binärprotokoll. Jede Nachricht wird mit BinPackage (Name von RTTI) beschrieben. Jedes BinPackage ist im Wesentlichen ein Wrapper über std :: vector, in dem der PackageRecord-Satz gespeichert ist (der Name wird erfunden). PackageRecord ist die Mindesteinheit zum Speichern von Daten.
struct PackageRecord { _DWORD dataId; _DWORD datatype; _DWORD szData; char[] data; };
Mehr zu den Bereichen dieser Struktur:
- dataId - Gibt den Datensatztyp an. Entweder ist der Eintrag eine Modulkennung oder eine Befehlskennung oder eine Nutzlast.
- szData - Die Größe der im Datensatz gespeicherten Daten.
- Datentyp ist ein Datentyp.
Insgesamt wurde die Verwendung von drei Datentypen aufgezeichnet:
- Ein Wert von "0" bedeutet, dass die im Datensatz gespeicherten Daten als DWORD interpretiert werden müssen.
- Der Wert "1" - Die im Datensatz gespeicherten Daten müssen als ASCIIZ-Zeichenfolge interpretiert werden.
- Der Wert "2" - die im Datensatz gespeicherten Daten müssen als verschlüsselte Daten / Rohpuffer interpretiert werden.
Beim Senden von BinPackage an den Steuerungsserver wird die Computerkennung hinzugefügt. Der Bezeichner ist die GUID des Abschnitts, aus dem alle Sonderzeichen herausgeschnitten werden. In der Abbildung - Erhalten der Maschinenkennung:

Vor dem Senden werden alle in BinPackage gespeicherten Datensätze nacheinander in einem einzigen Puffer gesammelt und verschlüsselt. Für die Verschlüsselung wird die
WinAES- Bibliothek
verwendet , insbesondere AES-128-CBC.
Unter Verwendung von CryptoAPI Windows werden zwei 16-Byte-Pseudozufallsarrays generiert. Einer für IV, der andere für den Schlüssel. Die Verschlüsselung wird durchgeführt und die verschlüsselten Daten werden wieder zu BinPackage hinzugefügt, das das verschlüsselte Paket enthält und aus drei Einträgen besteht:
- Datensatz mit der ID 0x777 - enthält den für die Verschlüsselung verwendeten Schlüssel;
- Datensatz mit der ID 0x555 - enthält die für die Verschlüsselung verwendete IV;
- Datensatz mit der ID 0x999 - enthält verschlüsselte Daten (im Allgemeinen zeigt ein Datensatz mit dieser ID eine Nutzlast an und wird nicht nur zum Speichern verschlüsselter Daten verwendet).
Nach Abschluss des Verschlüsselungsprozesses wird das generierte BinPackage erneut in einem einzelnen Puffer gesammelt und per HTTP-POST-Anforderung an den Verwaltungsserver 151.80.237.222 gesendet.

Unten finden Sie ein Beispiel für ein Paket mit Maschineninformationen:

Dies ist ein Beispiel für ein verschlüsseltes Paket mit Systeminformationen:

Module
Jedes Modul mit Ausnahme von Core wird vom Steuerungsserver geladen. Alle Module können in zwei Kategorien unterteilt werden - Module, die automatisch geladen werden, und Module, die auf Anfrage vom Steuerungsserver geladen werden.
Ein Beispiel für ein Paket, das ein Modul anfordert:

Antwort auf die Modulanforderung:

Jedes Modul verfügt über eine einfache Schnittstelle, die aus drei Funktionen besteht: Aufrufen beim Laden des Init-Moduls, Aufrufen nach Abschluss von fini und Funktion zum Ändern der Konfiguration des Moduls. Jedes Modul verfügt außerdem über einen Export namens GetModule, der ein Objekt erstellt, das dieses Modul darstellt, und es an den Haupttrojaner zurückgibt. Alle Module, die wir entdeckt haben, werden durch reflektierende Belastung im Speicher gestartet.

Ferner werden die Namen der Module in der Form angegeben, in der sie in RTTI als Klassennamen vorhanden sind.
CCore-Modul
Dieses Modul stellt die Grundfunktionalität dar und ist direkt in den Haupttrojaner integriert. Der Konstruktor ist in der folgenden Tabelle aufgeführt:
Modul-ID | Team ID | Beschreibung |
---|
0 | 0 | Grundsätzlich ist ein Trojaner anstelle eines Befehls ein Stub, und sein genauer Zweck wurde nicht gefunden |
1 | Ändern Sie die Modulkonfiguration |
2 | Computerinformationen anfordern |
3 | Laden Sie das Dienstprogramm vom Steuerungsserver herunter |
4 | Fordern Sie eine Liste eines Verzeichnisses mit Dienstprogrammen an |
5 | Laden Sie das Modul herunter und führen Sie es aus |
CShell-Modul
Dieses Modul stellt einem infizierten Computer eine Remote-Shell zur Verfügung. Bei der Initialisierung des Moduls wird der Prozess cmd.exe erstellt, an den zwei Pipes angeschlossen sind: eine für die Standardeingabe und eine für die Standardausgabe, über die Befehle vom Steuerungsserver empfangen und gesendet werden und umgekehrt. Ebenfalls in diesem Moment wird ein Thread gestartet, der automatisch die gesamte Ausgabe aufnimmt und an den Steuerungsserver sendet. Die Abbildung zeigt die Initialisierung des CShell-Moduls.

Modul-ID | Team ID | Beschreibung |
---|
2 | 0 | Befehl an Shell senden |
1 | Drucken Sie die Datei. Es wird eine Datei gelesen, deren Pfad vom Steuerungsserver übertragen wird, und der Inhalt dieser Datei wird auf den Steuerungsserver hochgeladen |
2 | Rufen Sie eine Liste aller im System vorhandenen Festplatten ab. Daten werden im JSON-Format an den Steuerungsserver gesendet |
3 | Laden Sie die Datei vom Steuerungsserver herunter. Der Pfad zum Speichern der Datei und der Daten, die vom Steuerungsserver empfangen werden |
CFileSystemBrowser-Modul
Dies ist ein passives Modul, mit dem Sie auf Anfrage Informationen über die Struktur des Dateisystems erhalten. So erfolgt die Initialisierung des CFileSystemBrowser-Moduls:

Modul-ID | Team ID | Beschreibung |
---|
3 | 0 | Rufen Sie eine Liste aller im System vorhandenen Festplatten ab. Daten werden im JSON-Format an C2 gesendet |
1 | Verzeichnisliste abrufen. Die Auflistung wird im JSON-Format generiert |
2 | Drucken Sie die Datei. Es wird eine Datei gelesen, deren Pfad von C2 übertragen wird, und der Inhalt dieser Datei wird nach C2 hochgeladen |
3 | Datei löschen. Der Pfad zur Datei wird von C2 übertragen |
CScreenShot-Modul
Mit diesem Modul können Sie Screenshots machen oder Bilder von einer Webcam aufnehmen. Dies kann sowohl auf Anfrage als auch mit einem bestimmten Zeitraum im Timer erfolgen.

Modul-ID | Team ID | Beschreibung |
---|
4 | 0 | Machen Sie einen Screenshot und senden Sie ihn an den Kontrollserver |
1 | Führen Sie einen Timer aus, wonach ein Screenshot vom Bildschirm des Geräts aufgenommen wird. Die resultierenden Screenshots werden in BinPackage gepackt und im Protokollordner gespeichert. Namen für Dateien werden mithilfe der GetTempFileName-API mit dem Präfix „MS_“ generiert. |
2 | Holen Sie sich Videos von Geräten, die auf einem infizierten Computer verfügbar sind |
3 | Erfassen Sie einen Frame von der Webcam und senden Sie ihn an den Steuerungsserver |
CSender-Modul
Dieses Modul ist zunächst nicht aktiviert. Der Inhalt des Protokollordners wird auf den Steuerungsserver hochgeladen. Es wird aktiviert, wenn eine Anforderung zum Ändern der Konfiguration eingeht, die den Überprüfungszeitraum enthält.

CKeylogger-Modul
Dieses Modul ist auch zunächst nicht aktiviert. Sie wird aktiviert, wenn eine Anforderung für eine Konfigurationsänderung eingeht, die die Größe des Puffers enthält, in dem das Protokoll gespeichert ist. Das Abfangen der Eingabe erfolgt über die
Roheingabe . Darüber hinaus überwacht der Keylogger das Fenster, in dem der Benutzer eine Eingabe vornimmt, und protokolliert seinen Titel.

CDictaphone-Modul
Dieses Modul zeichnet den Ton per Befehl oder bei Erkennung eines Skype-Fensters auf. Beim Start wird ein Thread gestartet, der alle Fenster und ihre untergeordneten Fenster im System auflistet und das Fenster unter den Klassen sucht, deren Klassenname TLiveConversation oder TCallMonitorControl ist. Wenn ein solches Fenster gefunden wurde, beginnt die Aufnahme. Nachfolgend finden Sie die Initialisierung des CDictaphone-Moduls:

Und Skype-Fenstersuche

Die Aufzeichnung erfolgt über das MCI durch Senden spezieller Befehle. So sieht der Schreibzyklus des CDictaphone-Moduls aus:

Nach dem Schließen des Fensters oder dem Empfang eines Befehls zum Abschließen der Aufzeichnung werden die empfangenen Daten in einem temporären Ordner gespeichert. Anschließend werden sie vom lahmen MP3-Encoder codiert (es wird als Dienstprogramm betrachtet und sollte bereits geladen sein, es war nicht möglich, sie vom Steuerungsserver abzurufen). Die verschlüsselte Datei wird im Protokollordner gespeichert. Das Generieren eines Ordnernamens ähnelt dem Generieren von Namen für Screenshots.
Modul-ID | Team ID | Beschreibung |
---|
7 | 0 | Starten Sie die Aufnahme und beenden Sie sie nach 15 Minuten |
1 | Beenden Sie die Aufnahme |
2 | Status prüfen: wird gerade aufgezeichnet |
CProcessesManager-Modul
Dies ist ein passives Modul, das auf Anfrage eine Liste von Prozessen zurückgeben oder durch die an ihn übergebene PID beenden kann.

Modul-ID | Team ID | Beschreibung |
---|
8 | 0 | Gibt eine Liste von Prozessen zurück: deren Namen, PID und den Namen des Benutzers, dem der Prozess gehört. |
1 | Abschluss des PID-Prozesses |
CDownloader-Modul
Das Modul dient zum Hochladen großer Dateien auf den Steuerungsserver. Führt die Datenübertragung durch Chunks durch, deren Größe durch die Konfiguration festgelegt wird. Das Modul liest Daten aus einer Datei, dem Pfad, zu dem es vom Steuerungsserver empfängt, und packt Chunks in BinPackage. Für jedes BinPackage, das den Block enthält, wird ein Eintrag mit der Kennung 0x888 hinzugefügt, einschließlich des Pfads zur Datei. Nach dem Passieren jedes Blocks wird 5 Sekunden lang geschlafen.

Modul-ID | Team ID | Beschreibung |
---|
9 | 0 | Stub konnte den genauen Wert nicht einstellen |
1 | Es überträgt eine große Datenmenge (0x500000 Bytes), misst danach die für die Übertragung aufgewendete Zeit und sendet diesen Wert an C2 |
2 | Laden Sie eine Datei von einem Computer herunter |
CPS-Modul
Mit diesem Modul können Sie PowerShell-Skripts ausführen.

Modul-ID | Team ID | Beschreibung |
---|
10 | 0 | Empfängt ein PowerShell-Skript von C2 und führt es aus |
CDeviceMonitor-Modul
Ein passives Modul, das angeschlossene Mediengeräte überwacht und Dateien von diesen kopiert. Es verwendet WM_DEVICECHANGE-Broadcast-Nachrichten, um die Gerätekonnektivität zu erkennen. Nach dem Verbinden des Geräts mit dem Steuerungsserver werden Informationen darüber gesendet, wann das Gerät verbunden wurde, seine Datenträgerbezeichnung und der Pfad zum Gerät. Der Code, mit dem der Pfad zum Gerät abgerufen wird, ist diesem sehr ähnlich. Alle Dateien werden in den Protokollordner kopiert. Namen werden auf die gleiche Weise wie für Screenshots generiert. Die Datei fsIndex.dat wird separat erstellt, in der sich das mit boost :: archive serialisierte Wörterbuch befindet. In diesem Wörterbuch werden die ursprünglichen Pfade zu den kopierten Dateien und deren MD5-Hashes gespeichert. Unten ist der Empfang von DevicePath:

Als Nachwort einige Empfehlungen:
- Anhänge in Briefen unbekannter Empfänger müssen nicht geöffnet werden, geschweige denn ein Microsoft Publisher-Skript.
- Es ist nicht weniger gefährlich, auf die Links in den Briefen unbekannter Absender zu klicken. Auf der Website, auf der Sie sich befinden, kann Malware gehostet werden, die automatisch auf Ihren PC heruntergeladen wird.
- Sie müssen die Software regelmäßig aktualisieren, insbesondere Microsoft Windows und Microsoft Office, um den Zugriff auf eine Vielzahl von Malware zu schließen.