In dem Beitrag erzählen wir Ihnen, wie die Cybergruppe OceanLotus (APT32 und APT-C-00) kürzlich einen der öffentlich zugänglichen Exploits für genutzt hat
OceanLotus ist auf Cyberspionage spezialisiert, vorrangige Ziele sind die Länder Südostasiens. Angreifer fälschen Dokumente, die die Aufmerksamkeit potenzieller Opfer auf sich ziehen, um sie zum Einsetzen einer Hintertür zu bewegen, und arbeiten außerdem an der Entwicklung von Tools. Die zum Erstellen von Honeypots verwendeten Methoden variieren bei verschiedenen Angriffen – von Dateien mit „doppelter Erweiterung“, selbstextrahierenden Archiven, Makrodokumenten bis hin zu bekannten Exploits.
Verwendung des Exploits im Microsoft Equation Editor
Mitte 2018 führte OceanLotus eine Kampagne durch, bei der die Schwachstelle CVE-2017-11882 ausgenutzt wurde. Eines der bösartigen Dokumente der Cybergruppe wurde von den Spezialisten des 360 Threat Intelligence Center analysiert (
Die erste Stufe
Dokument FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) ähnelt dem in der oben genannten Studie erwähnten. Interessant ist, dass es sich an Nutzer richtet, die sich für kambodschanische Politik interessieren (CNRP – Kambodscha National Salvation Party, Ende 2017 aufgelöst). Trotz der Erweiterung .doc liegt das Dokument im RTF-Format vor (siehe Abbildung unten), enthält Junk-Code und ist außerdem verstümmelt.
Abbildung 1. Müll in RTF
Trotz des Vorhandenseins fehlerhafter Elemente öffnet Word diese RTF-Datei erfolgreich. Wie Sie in Abbildung 2 sehen können, ist hier eine EQNOLEFILEHDR-Struktur am Offset 0xC00, gefolgt von einem MTEF-Header und dann einem MTEF-Eintrag (Abbildung 3) für die Schriftart.
Abbildung 2. FONT-Datensatzwerte
Abbildung 3.
Möglicher Feldüberlauf Name, da seine Größe vor dem Kopieren nicht überprüft wird. Ein zu langer Name löst die Sicherheitslücke aus. Wie Sie dem Inhalt der RTF-Datei entnehmen können (Offset 0xC26 in Abbildung 2), wird der Puffer mit Shellcode gefüllt, gefolgt von einem Dummy-Befehl (0x90
) und Absenderadresse 0x402114
. Die Adresse ist ein Dialogelement in EQNEDT32.exe
auf Anweisungen hinweisen RET
. Dadurch zeigt EIP auf den Anfang des Feldes NameDie enthält den Shellcode.
Abbildung 4. Beginn des Exploit-Shellcodes
Adresse 0x45BD3C
speichert eine Variable, die dereferenziert wird, bis sie einen Zeiger auf die aktuell geladene Struktur erreicht MTEFData
. Hier ist der Rest des Shellcodes.
Der Zweck des Shellcodes besteht darin, den zweiten Teil des Shellcodes auszuführen, der in das geöffnete Dokument eingebettet ist. Zunächst versucht der ursprüngliche Shellcode, den Dateideskriptor des geöffneten Dokuments zu finden, indem er alle Systemdeskriptoren durchläuft (NtQuerySystemInformation
mit Argument SystemExtendedHandleInformation
) und prüfen, ob sie übereinstimmen PID Deskriptor und PID Prozess WinWord
und ob das Dokument mit einer Zugriffsmaske geöffnet wurde - 0x12019F
.
Um zu bestätigen, dass das richtige Handle gefunden wurde (und nicht das Handle eines anderen geöffneten Dokuments), wird der Inhalt der Datei mithilfe der Funktion angezeigt CreateFileMapping
, und der Shellcode prüft, ob die letzten vier Bytes des Dokuments übereinstimmen.yyyy
» (Eierjagd-Methode). Sobald eine Übereinstimmung gefunden wird, wird das Dokument in einen temporären Ordner kopiert (GetTempPath
) Wie ole.dll
. Anschließend werden die letzten 12 Bytes des Dokuments gelesen.
Abbildung 5. End-of-Document-Markierungen
32-Bit-Wert zwischen Markern AABBCCDD
и yyyy
ist der Offset des nächsten Shellcodes. Es wird mit einer Funktion aufgerufen CreateThread
. Derselbe Shellcode wurde extrahiert, der zuvor von der OceanLotus-Gruppe verwendet wurde.
Die zweite Stufe
Komponenten extrahieren
Datei- und Verzeichnisnamen werden dynamisch ausgewählt. Der Code wählt zufällig den Namen einer ausführbaren Datei oder DLL-Datei aus C:Windowssystem32
. Anschließend stellt es eine Anfrage an seine Ressourcen und ruft das Feld ab FileDescription
als Ordnernamen verwenden. Wenn das nicht funktioniert, wählt der Code zufällig einen Ordnernamen aus den Verzeichnissen aus %ProgramFiles%
oder C:Windows
(von GetWindowsDirectoryW). Es vermeidet die Verwendung eines Namens, der mit vorhandenen Dateien in Konflikt geraten könnte, und stellt sicher, dass er nicht die folgenden Wörter enthält: windows
, Microsoft
, desktop
, system
, system32
oder syswow64
. Wenn das Verzeichnis bereits existiert, wird „NLS_{6 Zeichen}“ an den Namen angehängt.
Ressource 0x102
analysiert und Dateien abgelegt %ProgramFiles%
oder %AppData%
, in einen zufällig ausgewählten Ordner. Die Erstellungszeit wurde geändert, um dieselben Werte zu haben wie kernel32.dll
.
Hier sehen Sie beispielsweise den Ordner und die Liste der Dateien, die durch Auswahl der ausführbaren Datei erstellt wurden C:Windowssystem32TCPSVCS.exe
als Datenquelle.
Abbildung 6. Extraktion verschiedener Komponenten
Ressourcenstruktur 0x102
in einer Pipette ist ziemlich kompliziert. Kurz gesagt enthält es:
- Dateinamen
– Dateigröße und Inhalt
— Komprimierungsformat (COMPRESSION_FORMAT_LZNT1
von der Funktion verwendet RtlDecompressBuffer
)
Die erste Datei wird als gespeichert TCPSVCS.exe
, was legitim ist AcroTranscoder.exe
(entsprechend FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Möglicherweise ist Ihnen aufgefallen, dass einige DLL-Dateien größer als 11 MB sind. Dies liegt daran, dass in der ausführbaren Datei ein großer zusammenhängender Puffer mit Zufallsdaten platziert wird. Es ist möglich, dass auf diese Weise die Erkennung durch einige Sicherheitsprodukte vermieden werden kann.
Beständigkeit sichern
Ressource 0x101
im Dropper enthält zwei 32-Bit-Ganzzahlen, die angeben, wie Persistenz erzwungen werden soll. Der erste Wert gibt an, wie die Malware ohne Administratorrechte bestehen bleibt.
Tabelle 1. Persistenzmechanismus für Nicht-Administratoren
Der Wert der zweiten Ganzzahl gibt an, wie die Malware ihre Persistenz sicherstellen soll, indem sie mit Administratorrechten ausgeführt wird.
Tabelle 2. Administrator-Persistenzmechanismus
Der Dienstname ist der Dateiname ohne Erweiterung; Der Anzeigename ist der Name des Ordners, aber wenn er bereits vorhanden ist, wird die Zeichenfolge „Revision 1
” (die Zahl erhöht sich, bis ein unbenutzter Name gefunden wird). Die Betreiber haben darauf geachtet, dass die Persistenz durch den Dienst belastbar ist – im Falle eines Ausfalls muss der Dienst nach 1 Sekunde neu gestartet werden. Dann der Wert WOW64
Der neue Registrierungsschlüssel für den Dienst ist auf 4 gesetzt, was darauf hinweist, dass es sich um einen 32-Bit-Dienst handelt.
Eine geplante Aufgabe wird über mehrere COM-Schnittstellen erstellt: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. Im Wesentlichen erstellt die Malware eine versteckte Aufgabe, legt die Kontoinformationen zusammen mit den aktuellen Benutzer- oder Administratorinformationen fest und legt dann den Auslöser fest.
Dies ist eine tägliche Aufgabe mit einer Dauer von 24 Stunden und Abständen zwischen zwei Durchläufen von 10 Minuten, was bedeutet, dass sie ständig ausgeführt wird.
Bösartiges Bit
In unserem Beispiel die ausführbare Datei TCPSVCS.exe
(AcroTranscoder.exe
) ist legitime Software, die die mit ihr gelöschten DLLs lädt. In diesem Fall ist es von Interesse Flash Video Extension.dll
.
Seine Funktion DLLMain
ruft einfach eine andere Funktion auf. Es gibt einige Fuzzy-Prädikate:
Abbildung 7. Fuzzy-Prädikate
Nach diesen irreführenden Prüfungen erhält der Code einen Abschnitt .text
Datei TCPSVCS.exe
, ändert seinen Schutz in PAGE_EXECUTE_READWRITE
und überschreibt es mit Dummy-Anweisungen:
Abbildung 8. Reihenfolge der Anweisungen
Am Ende die Adresse der Funktion FLVCore::Uninitialize(void)
, exportiert Flash Video Extension.dll
, die Anweisung wird hinzugefügt CALL
. Dies bedeutet, dass die schädliche DLL geladen wird, wenn die Laufzeit aufgerufen wird WinMain
в TCPSVCS.exe
, zeigt der Befehlszeiger auf NOP, was zum Aufruf führt FLVCore::Uninitialize(void)
, nächste Stufe.
Die Funktion erstellt einfach einen Mutex, beginnend mit {181C8480-A975-411C-AB0A-630DB8B0A221}
gefolgt vom aktuellen Benutzernamen. Anschließend wird die gespeicherte *.db3-Datei, die positionsunabhängigen Code enthält, gelesen und verwendet CreateThread
Inhalte auszuführen.
Der Inhalt der *.db3-Datei ist der Shellcode, den das OceanLotus-Team normalerweise verwendet. Wir haben die Nutzlast mithilfe des von uns veröffentlichten Emulatorskripts erneut erfolgreich dekomprimiert.
Das Skript ruft die letzte Stufe ab. Bei dieser Komponente handelt es sich um eine Hintertür, die wir bereits analysiert haben {A96B020F-0000-466F-A96D-A91BBF8EAC96}
Binärdatei. 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
Die OceanLotus-Gruppe demonstriert erneut eine Kombination verschiedener Techniken, um einer Entdeckung zu entgehen. Sie kehrten mit einem „fertigen“ Schema des Infektionsprozesses zurück. Durch die Wahl zufälliger Namen und das Füllen ausführbarer Dateien mit zufälligen Daten reduzieren sie die Anzahl zuverlässiger IoCs (basierend auf Hashes und Dateinamen). Darüber hinaus müssen Angreifer durch das Laden von DLLs Dritter nur die legitime Binärdatei entfernen AcroTranscoder
.
Selbstextrahierende Archive
Nach RTF-Dateien wechselte die Gruppe zu selbstextrahierenden (SFX) Archiven mit gemeinsamen Dokumentsymbolen, um den Benutzer noch mehr zu verwirren. Threatbook hat darüber geschrieben ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Seit Mitte Januar 2019 verwendet OceanLotus diese Technik wieder, ändert jedoch im Laufe der Zeit einige Konfigurationen. In diesem Abschnitt werden wir über die Technik und Änderungen sprechen.
Einen Köder herstellen
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 – in der Beschreibung (Versions Information) sagt, dass es sich um ein JPEG-Bild handelt. Das SFX-Skript sieht so aus:
Abbildung 9. SFX-Befehle
Die Malware wird zurückgesetzt {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), sowie ein Bild 2018 thich thong lac.jpg.
Das Täuschungsbild sieht so aus:
Abbildung 10. Täuschungsbild
Sie haben vielleicht bemerkt, dass die ersten beiden Zeilen im SFX-Skript die OCX-Datei zweimal aufrufen, aber das ist kein Fehler.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
Der Kontrollfluss der OCX-Datei ist dem anderer OceanLotus-Komponenten sehr ähnlich – viele Befehlssequenzen JZ/JNZ
и PUSH/RET
mit Junk-Code verschachtelt.
Abbildung 11. Verschleierter Code
Nach dem Filtern des Müllcodes erfolgt der Export DllRegisterServer
, genannt regsvr32.exe
sieht so aus:
Abbildung 12. Hauptinstallationscode
Im Grunde schon beim ersten Anruf DllRegisterServer
Export legt den Registrierungswert fest HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
für verschlüsselten Offset in der DLL (0x10001DE0
).
Wenn die Funktion ein zweites Mal aufgerufen wird, liest sie denselben Wert und wird an dieser Adresse ausgeführt. Von hier aus wird die Ressource gelesen und ausgeführt, und viele Aktionen werden im RAM ausgeführt.
Der Shellcode ist derselbe PE-Loader, der in früheren OceanLotus-Kampagnen verwendet wurde. Es kann mit emuliert werden db293b825dcc419ba7dc2c49fa2757ee.dll
, lädt es in den Speicher und führt es aus DllEntry
.
Die DLL extrahiert den Inhalt ihrer Ressource, entschlüsselt (AES-256-CBC) und dekomprimiert (LZMA). Die Ressource hat ein bestimmtes Format, das leicht zu dekompilieren ist.
Abbildung 13. Konfigurationsstruktur des Installationsprogramms (KaitaiStruct Visualizer)
Die Konfiguration wird explizit festgelegt – je nach Berechtigungsstufe werden Binärdaten beschrieben %appdata%IntellogsBackgroundUploadTask.cpl
oder %windir%System32BackgroundUploadTask.cpl
(oder SysWOW64
für 64-Bit-Systeme).
Eine weitere Persistenz wird durch die Erstellung einer Aufgabe mit dem Namen gewährleistet BackgroundUploadTask[junk].job
Wo [junk]
ist eine Menge von Bytes 0x9D
и 0xA0
.
Name der Aufgabenanwendung %windir%System32control.exe
, und der Wert des Parameters ist der Pfad zur heruntergeladenen Binärdatei. Die versteckte Aufgabe wird jeden Tag ausgeführt.
Strukturell ist eine CPL-Datei eine DLL mit einem internen Namen ac8e06de0a6c4483af9837d96504127e.dll
, wodurch die Funktion exportiert wird CPlApplet
. Diese Datei entschlüsselt ihre einzige Ressource {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, lädt dann diese DLL und ruft ihren einzigen Export auf DllEntry
.
Backdoor-Konfigurationsdatei
Die Backdoor-Konfiguration ist verschlüsselt und in ihre Ressourcen eingebettet. Der Aufbau der Konfigurationsdatei ist dem vorherigen sehr ähnlich.
Abbildung 14. Backdoor-Konfigurationsstruktur (KaitaiStruct Visualizer)
Trotz der ähnlichen Struktur wurden die Werte vieler Felder im Vergleich zu den in gezeigten Daten aktualisiert
Das erste Element des binären Arrays enthält die DLL (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Zusätzliche Forschung
Beim Sammeln von Proben haben wir auf einige Merkmale geachtet. Die gerade beschriebene Probe erschien etwa im Juli 2018, und ähnliche Exemplare tauchten erst kürzlich auf, nämlich Mitte Januar bis Anfang Februar 2019. Als Infektionsvektor wurde ein SFX-Archiv verwendet, das ein legitimes Täuschungsdokument und eine schädliche OCX-Datei hinterließ.
Obwohl OceanLotus gefälschte Zeitstempel verwendet, ist uns aufgefallen, dass die Zeitstempel von SFX- und OCX-Dateien immer gleich sind (0x57B0C36A
(08 um 14:2016 Uhr UTC) und 0x498BE80F
(02 um 06:2009 Uhr UTC). Dies weist wahrscheinlich darauf hin, dass die Autoren über eine Art „Konstruktor“ verfügen, der dieselben Vorlagen verwendet und nur einige Merkmale ändert.
Unter den Dokumenten, die wir seit Anfang 2018 untersucht haben, finden sich verschiedene Namen, die auf die angreifenden Länder hinweisen, die uns interessieren:
- Die neuen Kontaktinformationen von Cambodia Media(New).xls.exe
- 李建香 (个人简历).exe (gefälschtes PDF-Dokument eines Lebenslaufs)
– Feedback, Rallye in den USA vom 28.–29. Juli 2018.exe
Seit der Entdeckung der Hintertür {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
und der Veröffentlichung seiner Analyse durch mehrere Forscher haben wir einige Änderungen in den Malware-Konfigurationsdaten beobachtet.
Zuerst begannen die Autoren, Namen aus den Hilfs-DLL-DLLs zu entfernen (DNSprov.dll
und zwei Versionen HttpProv.dll
). Dann hörten die Betreiber auf, die dritte DLL (zweite Version) zu packen HttpProv.dll
) und entscheiden sich dafür, nur eines einzubetten.
Zweitens wurden viele Backdoor-Konfigurationsfelder geändert, wahrscheinlich um eine Entdeckung zu vermeiden, da viele IoCs verfügbar geworden sind. Zu den wichtigen Bereichen, die von den Autoren geändert wurden, gehören die folgenden:
- Registrierungsschlüssel AppX geändert (siehe IoCs)
- Mutex-Codierungszeichenfolge („def“, „abc“, „ghi“)
- Port-Nummer
Schließlich sind für alle analysierten neuen Versionen neue C&Cs im Abschnitt „IoCs“ aufgeführt.
Befund
OceanLotus entwickelt sich weiter. Die Cyber-Gruppe konzentriert sich auf die Verfeinerung und Erweiterung der Tools und Köder. Autoren maskieren bösartige Payloads mit aufmerksamkeitsstarken Dokumenten, die für die beabsichtigten Opfer relevant sind. Sie entwickeln neue Schaltkreise und nutzen auch öffentlich verfügbare Tools wie den Equation Editor-Exploit. Darüber hinaus verbessern sie die Tools, um die Anzahl der auf den Computern der Opfer verbleibenden Artefakte zu verringern und so die Wahrscheinlichkeit zu verringern, dass sie von Antivirensoftware erkannt werden.
Indikatoren für Kompromisse
Es stehen Kompromittierungsindikatoren sowie MITRE ATT&CK-Attribute zur Verfügung
Source: habr.com