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 RTFTrotz 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-AufnahmeformatEin Ü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-ShellcodesDie 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-MarkierungenDer 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 KomponentenDie 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 AdministratorrechteDer Wert der zweiten Ganzzahl gibt an, wie die Malware während ihrer Arbeit als Administrator die Persistenz sicherstellen soll.
Tabelle 2. Persistenzmechanismus mit AdministratorrechtenEin 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ädikateNach 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 AnweisungenAm 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-BefehleDie 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öderbildMö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 CodeNach dem Filtern des Junk-Codes sieht der von
DllRegisterServer
aufgerufene
DllRegisterServer
Export
regsvr32.exe
aus:
Abbildung 12. Grundlegender InstallationscodeTatsä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.exeSeit 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.