ESET: Neue Backdoor-Lieferprogramme für OceanLotus Cybergroup

In einem Beitrag werden wir beschreiben, wie die OceanLotus-Cybergroup (APT32 und APT-C-00) kürzlich einen der öffentlichen Exploits für CVE-2017-11882 verwendet hat , die Sicherheitsanfälligkeit bezüglich Speicherbeschädigung in Microsoft Office, und wie die Malware der Gruppe in kompromittierten Systemen Persistenz bietet, ohne Spuren zu hinterlassen . Als nächstes beschreiben wir, wie die Gruppe ab Anfang 2019 selbstextrahierende Archive verwendete, um den Code auszuführen.

OceanLotus ist auf Cyberspionage spezialisiert und hat vorrangige Ziele in Südostasien. Angreifer fälschen Dokumente, die die Aufmerksamkeit potenzieller Opfer auf sich ziehen, um sie davon zu überzeugen, eine Hintertür zu öffnen, und arbeiten auch an der Entwicklung von Werkzeugen. Die Methoden zum Erstellen von Ködern variieren bei verschiedenen Angriffen - von Dateien mit "doppelter Erweiterung", selbstextrahierenden Archiven, Dokumenten mit Makros bis hin zu bekannten Exploits.


Verwenden eines Exploits im Microsoft Equation Editor


Mitte 2018 startete OceanLotus eine Kampagne mit der Sicherheitsanfälligkeit CVE-2017-11882. Eines der schädlichen Dokumente der Cybergroup wurde von 360 Experten des Threat Intelligence Center (eine Studie auf Chinesisch ) analysiert, einschließlich einer detaillierten Beschreibung des Exploits. Im folgenden Beitrag eine Übersicht über ein solches schädliches Dokument.

Erste Stufe


FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3 ) ähnelt dem in der obigen Studie erwähnten. Es ist insofern interessant, als es sich an Benutzer richtet, die an kambodschanischer Politik interessiert sind (CNRP - Kambodschas Nationale Heilspartei, aufgelöst Ende 2017). Trotz der Erweiterung .doc hat das Dokument das RTF-Format (siehe Abbildung unten), enthält Junk-Code und ist auch verzerrt.


Abbildung 1. Papierkorb in RTF

Trotz des Vorhandenseins verzerrter Elemente öffnet Word diese RTF-Datei erfolgreich. Wie aus Abbildung 2 ersichtlich ist, befindet sich hier die EQNOLEFILEHDR-Struktur bei Offset 0xC00, gefolgt vom MTEF-Header und dem MTEF-Eintrag (Abbildung 3) für die Schriftart.


Abbildung 2. FONT-Aufzeichnungswerte


Abbildung 3. FONT-Aufnahmeformat

Ein Überlauf im Namensfeld ist möglich, da dessen Größe vor dem Kopieren nicht überprüft wird. Ein zu langer Name löst eine Sicherheitsanfälligkeit aus. Wie aus dem Inhalt der RTF-Datei ersichtlich ist (Offset 0xC26 in Abbildung 2), wird der Puffer mit Shell-Code gefüllt, gefolgt von einem Dummy-Befehl ( 0x90 ) und der Rücksprungadresse 0x402114 . Die Adresse ist ein Dialogelement in EQNEDT32.exe , das auf eine RET Anweisung verweist. Dies führt dazu, dass EIP auf den Anfang des Namensfelds zeigt, das den Shellcode enthält.


Abbildung 4. Start des Exploit-Shellcodes

Die Adresse 0x45BD3C speichert eine Variable, die dereferenziert wird, bis sie einen Zeiger auf die aktuell geladene MTEFData Struktur erreicht. Hier ist der Rest des Shellcodes.

Der Zweck des Shell-Codes besteht darin, das zweite Fragment des in ein offenes Dokument eingebetteten Shell-Codes auszuführen. Zunächst versucht der Quell-Shellcode, den Dateideskriptor des geöffneten Dokuments zu finden, NtQuerySystemInformation er alle Systemdeskriptoren ( NtQuerySystemInformation mit dem Argument SystemExtendedHandleInformation ) SystemExtendedHandleInformation und prüft, ob die PID des Deskriptors und die PID des WinWord Prozesses WinWord und ob das Dokument mit der Zugriffsmaske 0x12019F .

Um die Erkennung des richtigen Deskriptors (und nicht des Deskriptors eines anderen geöffneten Dokuments) zu bestätigen, wird der Inhalt der Datei mithilfe der Funktion CreateFileMapping angezeigt, und der Shell-Code prüft, ob die letzten vier Bytes des Dokuments " yyyy " (Egg Hunting-Methode) entsprechen. Sobald eine Übereinstimmung gefunden wurde, wird das Dokument als ole.dll in einen temporären Ordner ( GetTempPath ) ole.dll . Dann werden die letzten 12 Bytes des Dokuments gelesen.


Abbildung 5. Dokumentende-Markierungen

Der 32-Bit-Wert zwischen den Markierungen AABBCCDD und yyyy ist der Versatz des nächsten AABBCCDD . Es wird mit der Funktion CreateThread . Extrahiert den gleichen Shellcode, den OceanLotus zuvor verwendet hat. Das Python-Emulationsskript, das wir im März 2018 veröffentlicht haben, funktioniert immer noch, um die zweite Stufe zu sichern.

Zweite Stufe


Komponentenabruf


Datei- und Verzeichnisnamen werden dynamisch ausgewählt. Der Code wählt zufällig den Namen einer ausführbaren Datei oder DLL-Datei in C:\Windows\system32 . Anschließend stellt er eine Anfrage an seine Ressourcen und ruft das Feld FileDescription zur Verwendung als FileDescription . Wenn dies nicht funktioniert, wählt der Code den Ordnernamen zufällig aus den Verzeichnissen %ProgramFiles% oder C:\Windows (aus GetWindowsDirectoryW) aus. Es vermeidet die Verwendung eines Namens, der mit vorhandenen Dateien in Konflikt stehen kann, und stellt sicher, dass er nicht die folgenden Wörter enthält: windows , Microsoft , desktop , system , syswow64 oder syswow64 . Wenn das Verzeichnis bereits vorhanden ist, wird dem Namen "NLS_ {6 Zeichen}" hinzugefügt.

Die Ressource 0x102 analysiert und Dateien werden in %ProgramFiles% oder %AppData% in einem zufällig ausgewählten Ordner %AppData% . Die Erstellungszeit wurde geändert und hat dieselben Werte wie kernel32.dll .

Hier ist beispielsweise ein Ordner und eine Liste von Dateien, die durch Auswahl der ausführbaren Datei C:\Windows\system32\TCPSVCS.exe als Datenquelle erstellt wurden.


Abbildung 6. Extrahieren verschiedener Komponenten

Die Struktur der 0x102 Ressource in der Pipette ist ziemlich kompliziert. Kurz gesagt, es enthält:
- Dateinamen
- Größe und Inhalt der Dateien
- Komprimierungsformat ( COMPRESSION_FORMAT_LZNT1 das von der Funktion COMPRESSION_FORMAT_LZNT1 verwendet wird)

Die erste Datei wird als TCPSVCS.exe zurückgesetzt. TCPSVCS.exe ist die legitime AcroTranscoder.exe (gemäß FileDescription , SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3 ).

Möglicherweise haben Sie bemerkt, dass einige DLL-Dateien größer als 11 MB sind. Dies liegt daran, dass sich in der ausführbaren Datei ein großer zusammenhängender Puffer mit zufälligen Daten befindet. Es ist möglich, dass dies eine Möglichkeit ist, die Erkennung durch einige Sicherheitsprodukte zu vermeiden.

Ausdauer


Die 0x101 Ressource im Dropper enthält zwei 32-Bit-Ganzzahlen, die bestimmen, wie die Persistenz aufrechterhalten werden soll. Der Wert des ersten gibt an, wie die Malware ohne Administratorrechte die Persistenz beibehält.


Tabelle 1. Persistenzmechanismus ohne Administratorrechte

Der Wert der zweiten Ganzzahl gibt an, wie die Malware während ihrer Arbeit als Administrator die Persistenz sicherstellen soll.


Tabelle 2. Persistenzmechanismus mit Administratorrechten

Ein Dienstname ist ein Dateiname ohne Erweiterung. Der Anzeigename ist der Name des Ordners. Wenn er jedoch bereits vorhanden ist, wird ihm die Zeichenfolge „ Revision 1 “ hinzugefügt (die Anzahl erhöht sich, bis ein nicht verwendeter Name gefunden wird). Die Bediener stellten sicher, dass die Persistenz durch den Dienst stabil war. Im Falle eines Fehlers sollte der Dienst nach 1 Sekunde neu gestartet werden. Dann wird der WOW64 Wert des neuen Dienstregistrierungsschlüssels auf 4 gesetzt, was anzeigt, dass es sich um einen 32-Bit-Dienst handelt.

Die geplante Aufgabe wird über mehrere COM-Schnittstellen erstellt: ITaskScheduler , ITask , ITaskTrigger , IPersistFile und ITaskScheduler . Im Wesentlichen erstellt das Schadprogramm eine versteckte Aufgabe, legt Kontoinformationen zusammen mit Informationen über den aktuellen Benutzer oder Administrator fest und setzt dann den Auslöser.

Dies ist eine tägliche Aufgabe mit einer Dauer von 24 Stunden und Intervallen zwischen zwei Läufen von 10 Minuten, was bedeutet, dass sie kontinuierlich ausgeführt wird.

Bösartiges Stück


In unserem Beispiel ist die ausführbare Datei TCPSVCS.exe ( AcroTranscoder.exe ) eine legitime Software, die DLLs herunterlädt, die damit TCPSVCS.exe werden. In diesem Fall ist Flash Video Extension.dll von Interesse.

Die DLLMain Funktion ruft einfach eine andere Funktion auf. Einige Fuzzy-Prädikate sind vorhanden:


Abbildung 7. Fuzzy-Prädikate

Nach diesen irreführenden Überprüfungen empfängt der Code den .text der Datei TCPSVCS.exe , ändert seinen Schutz in PAGE_EXECUTE_READWRITE und überschreibt ihn, indem er Dummy-Anweisungen hinzufügt:


Abbildung 8. Die Reihenfolge der Anweisungen

Am Ende wird der CALL Befehl an die Adresse der von Flash Video Extension.dll exportierten FLVCore::Uninitialize(void) -Funktion hinzugefügt. Dies bedeutet, dass nach dem Laden der schädlichen DLL, wenn die Laufzeit WinMain in TCPSVCS.exe , der Anweisungszeiger auf NOP zeigt, was zum Aufrufen von FLVCore::Uninitialize(void) , dem nächsten Schritt.

Die Funktion erstellt einfach einen Mutex, der mit {181C8480-A975-411C-AB0A-630DB8B0A221} gefolgt vom aktuellen Benutzernamen. Anschließend liest sie die Speicherauszugsdatei mit der Erweiterung * .db3, die positionsunabhängigen Code enthält, und verwendet CreateThread , um den Inhalt auszuführen.

Der Inhalt der * .db3-Datei ist der Shellcode, der üblicherweise von der OceanLotus-Gruppe verwendet wird. Wir haben die Nutzdaten erneut erfolgreich mit dem Emulator-Skript entpackt, das wir auf GitHub veröffentlicht haben .

Das Skript ruft die letzte Phase ab. Diese Komponente ist eine Hintertür, die wir bereits in einer früheren OceanLotus-Studie analysiert haben. Dies kann durch die GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} Binärdatei bestimmt werden. Die Malware-Konfiguration ist weiterhin in der PE-Ressource verschlüsselt. Es hat ungefähr die gleiche Konfiguration, aber die C & C-Server unterscheiden sich von den vorherigen:

- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz


OceanLotus demonstriert erneut eine Kombination verschiedener Techniken, um eine Erkennung zu vermeiden. Sie kehrten mit einem „verfeinerten“ Überblick über den Infektionsprozess zurück. Durch die Auswahl zufälliger Namen und das Auffüllen ausführbarer Dateien mit zufälligen Daten wird die Anzahl vertrauenswürdiger IoCs (basierend auf Hashes und Dateinamen) reduziert. Darüber hinaus müssen Angreifer dank der Verwendung von DLLs von Drittanbietern nur die legitime AcroTranscoder Binärdatei entfernen.

Selbstextrahierende Archive


Nach RTF-Dateien wechselte die Gruppe zu selbstextrahierenden Archiven (SFX) mit allgemeinen Dokumentsymbolen, um den Benutzer weiter zu verwirren. Dies wurde von Threatbook geschrieben ( Link auf Chinesisch ). Nach dem Start werden selbstextrahierende RAR-Dateien ausgegeben und DLLs mit der Erweiterung .ocx ausgeführt, deren endgültige Nutzlast zuvor dokumentiert wurde. {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll . Seit Mitte Januar 2019 hat OceanLotus diese Technik wiederverwendet, aber im Laufe der Zeit haben sich einige Konfigurationen geändert. In diesem Abschnitt werden wir über Technologie und Veränderungen sprechen.

Ködererstellung


Das Dokument THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB ) wurde erstmals 2018 gefunden. Diese SFX-Datei wurde mit Bedacht erstellt - die Beschreibung ( Versionsinfo ) besagt, dass dies ein JPEG-Bild ist. Das SFX-Skript lautet wie folgt:


Abbildung 9. SFX-Befehle

Die Malware setzt {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC ) sowie das Bild 2018 thich thong lac.jpg.

Das Köderbild ist wie folgt:


Abbildung 10. Das Köderbild

Möglicherweise haben Sie bemerkt, dass die ersten beiden Zeilen im SFX-Skript die OSX-Datei zweimal aufrufen, dies ist jedoch kein Fehler.

{9ec60ada-a200-4159-b310-8071892ed0c3} .ocx (ShLd.dll)


Der Ablauf der OSX-Dateisteuerung ist anderen OceanLotus-Komponenten sehr ähnlich - es gibt viele Sequenzen von JZ/JNZ und PUSH/RET Befehlen, die sich mit Junk-Code abwechseln.


Abbildung 11. Verschleierter Code

Nach dem Filtern des Junk-Codes sieht der von DllRegisterServer aufgerufene DllRegisterServer Export regsvr32.exe aus:


Abbildung 12. Grundlegender Installationscode

Tatsächlich legt DllRegisterServer Export beim ersten DllRegisterServer den Registrierungswert HKCU\SOFTWARE\Classes\CLSID\{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}\Model für den verschlüsselten Offset in der DLL ( 0x10001DE0 ) fest.

Wenn eine Funktion ein zweites Mal aufgerufen wird, liest sie denselben Wert und wird an dieser Adresse ausgeführt. Von hier aus wird eine Ressource gelesen und ausgeführt und viele Aktionen im RAM ausgeführt.

Der Shellcode ist derselbe PE-Loader, der in früheren OceanLotus-Kampagnen verwendet wurde. Es kann mit unserem Skript emuliert werden. Infolgedessen gibt er db293b825dcc419ba7dc2c49fa2757ee.dll , lädt es in den Speicher und führt DllEntry .

Die DLL extrahiert den Inhalt ihrer Ressource, entschlüsselt (AES-256-CBC) und entpackt sie (LZMA). Die Ressource hat ein bestimmtes Format, das leicht zu dekompilieren ist.


Abbildung 13. Konfigurationsstruktur des Installationsprogramms (KaitaiStruct Visualizer)

Die Konfiguration wird explizit festgelegt. Abhängig von der Berechtigungsstufe werden Binärdaten in %appdata%\Intel\logs\BackgroundUploadTask.cpl oder %windir%\System32\BackgroundUploadTask.cpl (oder SysWOW64 für 64-Bit-Systeme) geschrieben.

Die Persistenz wird dann sichergestellt, indem eine Aufgabe mit dem Namen BackgroundUploadTask[junk].job , wobei [junk] eine Menge von Bytes 0x9D und 0xA0 .

Der Anwendungsname der Aufgabe lautet %windir%\System32\control.exe , und der Parameterwert ist der Pfad zur entladenen Binärdatei. Die versteckte Aufgabe wird jeden Tag ausgeführt.

Strukturell ist die CPL-Datei eine DLL mit dem internen Namen ac8e06de0a6c4483af9837d96504127e.dll , die die CPlApplet Funktion exportiert. Diese Datei entschlüsselt ihre einzige Ressource {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll , lädt dann diese DLL und ruft ihren einzigen DllEntry Export auf.

Backdoor-Konfigurationsdatei


Die Backdoor-Konfiguration ist verschlüsselt und in ihre Ressourcen eingebettet. Die Struktur der Konfigurationsdatei ist der vorherigen sehr ähnlich.


Abbildung 14. Backdoor-Konfigurationsstruktur (KaitaiStruct Visualizer)

Trotz der ähnlichen Struktur wurden die Werte vieler Felder im Vergleich zu den in unserem alten Bericht angegebenen Daten aktualisiert.

Das erste Element des binären Arrays enthält die von Tencent identifizierte DLL ( HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759 ). Da der Exportname jedoch aus der Binärdatei entfernt wurde, stimmen die Hashes nicht überein.

Zusätzliche Forschung


Beim Sammeln von Proben haben wir auf einige Merkmale hingewiesen. Die soeben beschriebene Stichprobe erschien um Juli 2018 und andere mögen sie erst kürzlich Mitte Januar - Anfang Februar 2019. Ein SFX-Archiv wurde als Infektionsvektor verwendet, wobei ein legitimes Köderdokument und eine schädliche OSX-Datei ausgegeben wurden.

Obwohl OceanLotus gefälschte Zeitstempel verwendet, haben wir festgestellt, dass die Zeitstempel von SFX- und OCX-Dateien immer gleich sind ( 0x57B0C36A (14.08.2016 um 19:15 Uhr UTC) und 0x498BE80F (02/06/2009 um 7:34 Uhr UTC) ) jeweils). Dies weist wahrscheinlich darauf hin, dass die Autoren einen bestimmten „Konstruktor“ haben, der dieselben Vorlagen verwendet und einfach einige Merkmale ändert.

Unter den Dokumenten, die wir seit Anfang 2018 untersucht haben, gibt es verschiedene Namen, die die Länder angeben, die für den Angriff von Interesse sind:

- Die neuen Kontaktinformationen von Cambodia Media (neu) .xls.exe
- 李建 香 (个人 简历) .exe (gefälschtes PDF-Dokument eines Lebenslaufs)
- Feedback, Rallye in den USA vom 28. bis 29. Juli 2018.exe

Seit der Entdeckung der Hintertür {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll und der Veröffentlichung ihrer Analyse durch mehrere Forscher haben wir einige Änderungen in den Malware-Konfigurationsdaten beobachtet.

Zunächst begannen die Autoren, Namen aus zusätzlichen DLL-DLLs ( DNSprov.dll und zwei Versionen von HttpProv.dll ) zu entfernen. Dann haben die Bediener das Packen der dritten DLL (der zweiten Version von HttpProv.dll ) eingestellt und nur eine eingebettet.

Zweitens wurden viele Backdoor-Konfigurationsfelder geändert, wahrscheinlich um eine Erkennung zu vermeiden, da viele IoCs verfügbar wurden. Zu den wichtigen von den Autoren modifizierten Bereichen gehören:

  • AppX-Registrierungsschlüssel geändert (siehe IoCs)
  • Mutex-Codierungszeichenfolge ("def", "abc", "ghi")
  • Portnummer

Schließlich werden in allen neu analysierten Versionen neue C & Cs im Abschnitt IoCs aufgeführt.

Schlussfolgerungen


OceanLotus entwickelt sich weiter. Die Cybergroup konzentriert sich auf die Verfeinerung und Erweiterung von Werkzeugen und Ködern. Autoren maskieren böswillige Nutzlasten mithilfe aufmerksamkeitsstarker Dokumente, die für mutmaßliche Opfer relevant sind. Sie entwickeln neue Designs und verwenden auch öffentlich verfügbare Tools wie den Equation Editor Exploit. Darüber hinaus perfektionieren sie Tools, um die Anzahl der auf den Computern der Opfer verbleibenden Artefakte zu verringern und damit die Wahrscheinlichkeit der Erkennung durch Antivirensoftware zu verringern.

Kompromissindikatoren


Kompromissindikatoren sowie MITRE ATT & CK-Attribute sind auf Welivesecurity und auf GitHub verfügbar.

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


All Articles