V tomto příspěvku vám prozradíme, jak kybernetická skupina OceanLotus (APT32 a APT-C-00) nedávno využila jeden z veřejně dostupných exploitů pro
OceanLotus se specializuje na kybernetickou špionáž, přičemž prioritními cíli jsou země jihovýchodní Asie. Útočníci padělají dokumenty, které přitahují pozornost potenciálních obětí, aby je přesvědčili, aby provedli zadní vrátka, a také pracují na vývoji nástrojů. Metody používané k vytváření honeypotů se u různých útoků liší, od souborů s dvojitým rozšířením, samorozbalovacích archivů, dokumentů s makry až po známé exploity.
Použití exploitu v Microsoft Equation Editor
V polovině roku 2018 provedl OceanLotus kampaň využívající zranitelnost CVE-2017-11882. Jeden ze škodlivých dokumentů kybernetické skupiny analyzovali specialisté z 360 Threat Intelligence Center (
První etapa
Dokument FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) je podobný tomu, který je zmíněn ve výše uvedené studii. Je zajímavý tím, že cílí na uživatele zajímající se o kambodžskou politiku (CNRP – Cambodia National Rescue Party, rozpuštěna na konci roku 2017). Přes příponu .doc je dokument ve formátu RTF (viz obrázek níže), obsahuje garbage code a navíc je zkreslený.
Obrázek 1. "Garbage" v RTF
Přestože jsou zde zkomolené prvky, Word tento soubor RTF úspěšně otevře. Jak můžete vidět na obrázku 2, existuje struktura EQNOLEFILEHDR na offsetu 0xC00, následuje záhlaví MTEF a poté položka MTEF (obrázek 3) pro písmo.
Obrázek 2. Hodnoty vstupu FONT
Obrázek 3.
Možný přepad v terénu název, protože jeho velikost se před kopírováním nekontroluje. Příliš dlouhý název spouští chybu zabezpečení. Jak můžete vidět z obsahu souboru RTF (offset 0xC26 na obrázku 2), vyrovnávací paměť je naplněna kódem shellu následovaným fiktivním příkazem (0x90
) a zpáteční adresu 0x402114
. Adresa je prvek dialogu EQNEDT32.exe
, s uvedením pokynů RET
. To způsobí, že EIP ukáže na začátek pole názevobsahující shell kód.
Obrázek 4. Začátek exploitu shell kódu
adresa 0x45BD3C
ukládá proměnnou, která je dereferencována, dokud nedosáhne ukazatele na aktuálně načtenou strukturu MTEFData
. Zbytek shell kódu je zde.
Účelem shell kódu je spustit druhou část kódu shellu vloženého do otevřeného dokumentu. Původní kód shellu se nejprve pokusí najít deskriptor souboru otevřeného dokumentu iterací přes všechny systémové deskriptory (NtQuerySystemInformation
s argumentem SystemExtendedHandleInformation
) a zkontrolujte, zda se shodují PID deskriptor a PID proces WinWord
a zda byl dokument otevřen s přístupovou maskou - 0x12019F
.
Aby se potvrdilo, že byl nalezen správný popisovač (a nikoli popisovač jiného otevřeného dokumentu), zobrazí se obsah souboru pomocí funkce CreateFileMapping
a shell kód zkontroluje, zda se poslední čtyři bajty dokumentu shodují "yyyy
"(Metoda lovu vajec). Jakmile je nalezena shoda, dokument se zkopíruje do dočasné složky (GetTempPath
) tak jako ole.dll
. Poté se přečte posledních 12 bajtů dokumentu.
Obrázek 5. Konec značek dokumentů
32bitová hodnota mezi značkami AABBCCDD
и yyyy
je offset dalšího shell kódu. Volá se pomocí funkce CreateThread
. Byl extrahován stejný kód shellu, který dříve používala skupina OceanLotus.
Druhá etapa
Odebírání součástí
Názvy souborů a adresářů jsou vybírány dynamicky. Kód náhodně vybere název spustitelného souboru nebo souboru DLL C:Windowssystem32
. Poté odešle požadavek na své zdroje a načte pole FileDescription
použít jako název složky. Pokud to nefunguje, kód náhodně vybere název složky z adresářů %ProgramFiles%
nebo C:Windows
(z GetWindowsDirectoryW). Vyhýbá se použití názvu, který by mohl být v konfliktu s existujícími soubory, a zajišťuje, že neobsahuje následující slova: windows
, Microsoft
, desktop
, system
, system32
nebo syswow64
. Pokud adresář již existuje, je k názvu připojeno "NLS_{6 znaků}".
prostředky 0x102
je analyzován a soubory jsou uloženy do %ProgramFiles%
nebo %AppData%
, do náhodně vybrané složky. Změněn čas vytvoření, aby měl stejné hodnoty jako kernel32.dll
.
Zde je například složka a seznam souborů vytvořených výběrem spustitelného souboru C:Windowssystem32TCPSVCS.exe
jako zdroj dat.
Obrázek 6. Extrakce různých komponent
Struktura zdrojů 0x102
v kapátku je poměrně složitý. Stručně řečeno, obsahuje:
— Názvy souborů
— Velikost a obsah souboru
— Formát komprese (COMPRESSION_FORMAT_LZNT1
, kterou funkce používá RtlDecompressBuffer
)
První soubor je resetován jako TCPSVCS.exe
, což je legitimní AcroTranscoder.exe
(podle FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Možná jste si všimli, že některé soubory DLL jsou větší než 11 MB. Důvodem je, že uvnitř spustitelného souboru je umístěna velká souvislá vyrovnávací paměť náhodných dat. Je možné, že se jedná o způsob, jak se vyhnout detekci některými bezpečnostními produkty.
Zajištění vytrvalosti
prostředky 0x101
v dropperu obsahuje dvě 32bitová celá čísla, která určují, jak má být poskytována persistence. Hodnota první určuje, jak bude malware přetrvávat bez práv správce.
Tabulka 1. Mechanismus perzistence bez administrátorských práv
Hodnota druhého celého čísla určuje, jak by měl malware dosáhnout perzistence při spuštění s právy správce.
Tabulka 2. Mechanismus perzistence s právy správce
Název služby je název souboru bez přípony; zobrazovaný název je název složky, ale pokud již existuje, je k ní připojen řetězec „Revision 1
” (číslo se zvyšuje, dokud není nalezeno nepoužité jméno). Operátoři se ujistili, že perzistence prostřednictvím služby byla robustní - v případě selhání by měla být služba restartována po 1 sekundě. Potom hodnota WOW64
Klíč registru nové služby je nastaven na 4, což znamená, že se jedná o 32bitovou službu.
Naplánovaná úloha se vytváří prostřednictvím několika rozhraní COM: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. Malware v podstatě vytvoří skrytou úlohu, nastaví informace o účtu spolu s informacemi o aktuálním uživateli nebo správci a poté nastaví spouštěč.
Jedná se o denní úlohu s trváním 24 hodin a intervaly mezi dvěma provedeními 10 minut, což znamená, že bude probíhat nepřetržitě.
Škodlivý kousek
V našem příkladu je to spustitelný soubor TCPSVCS.exe
(AcroTranscoder.exe
) je legitimní software, který načítá knihovny DLL, které se spolu s ním resetují. V tomto případě je to zajímavé Flash Video Extension.dll
.
Jeho funkce DLLMain
jen volá jinou funkci. Jsou přítomny některé fuzzy predikáty:
Obrázek 7. Fuzzy predikáty
Po těchto zavádějících kontrolách získá kód sekci .text
soubor TCPSVCS.exe
, mění svou obranu na PAGE_EXECUTE_READWRITE
a přepíše jej přidáním falešných pokynů:
Obrázek 8. Posloupnost instrukcí
Na konci k adrese funkce FLVCore::Uninitialize(void)
, exportováno Flash Video Extension.dll
, je přidána instrukce CALL
. To znamená, že po načtení škodlivé DLL, když runtime volá WinMain
в TCPSVCS.exe
, ukazatel instrukce bude ukazovat na NOP, což způsobí FLVCore::Uninitialize(void)
, další fáze.
Funkce jednoduše vytvoří mutex začínající na {181C8480-A975-411C-AB0A-630DB8B0A221}
následuje aktuální uživatelské jméno. Poté přečte uložený soubor *.db3, který obsahuje kód nezávislý na pozici, a použije jej CreateThread
spustit obsah.
Obsah souboru *.db3 je kód shellu, který skupina OceanLotus obvykle používá. Opět jsme úspěšně rozbalili jeho užitečné zatížení pomocí skriptu emulátoru, který jsme zveřejnili
Scénář extrahuje závěrečnou fázi. Tato komponenta je zadní vrátka, kterou jsme již analyzovali {A96B020F-0000-466F-A96D-A91BBF8EAC96}
binární soubor. Konfigurace malwaru je stále zašifrována v prostředku PE. Má přibližně stejnou konfiguraci, ale servery C&C se liší od předchozích:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
Tým OceanLotus opět předvádí kombinaci různých technik, jak se vyhnout odhalení. Vrátili se s „rafinovaným“ diagramem procesu infekce. Výběrem náhodných jmen a plněním spustitelných souborů náhodnými daty snižují počet spolehlivých IoC (na základě hashů a názvů souborů). Navíc díky použití načítání DLL třetích stran útočníkům stačí odstranit legitimní binární soubor AcroTranscoder
.
Samorozbalovací archivy
Po souborech RTF se skupina přesunula do samorozbalovacích (SFX) archivů s běžnými ikonami dokumentů, aby uživatele ještě více zmátla. O tom psala Threatbook ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Od poloviny ledna 2019 OceanLotus znovu používá tuto techniku, ale postupem času mění některé konfigurace. V této části budeme hovořit o technice a změnách.
Vytvoření návnady
Dokument THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) byl poprvé nalezen v roce 2018. Tento soubor SFX byl vytvořen moudře - v popisu (Informace o verzi) říká, že se jedná o obrázek JPEG. Skript SFX vypadá takto:
Obrázek 9. Příkazy SFX
Malware se resetuje {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), stejně jako obrázek 2018 thich thong lac.jpg.
Obrázek návnady vypadá takto:
Obrázek 10. Obrázek návnady
Možná jste si všimli, že první dva řádky ve skriptu SFX volají soubor OCX dvakrát, ale nejedná se o chybu.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
Řídicí tok souboru OCX je velmi podobný ostatním komponentám OceanLotus – mnoho příkazových sekvencí JZ/JNZ
и PUSH/RET
, střídající se s kódem odpadu.
Obrázek 11. Zamotaný kód
Po odfiltrování nevyžádaného kódu exportujte DllRegisterServer
, volal regsvr32.exe
, jak následuje:
Obrázek 12. Základní instalační kód
V podstatě při prvním hovoru DllRegisterServer
export nastaví hodnotu registru HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
pro zašifrovaný offset v DLL (0x10001DE0
).
Když je funkce volána podruhé, přečte stejnou hodnotu a provede se na této adrese. Odtud se čte a provádí zdroj a mnoho akcí v paměti RAM.
Shellcode je stejný PE loader používaný v minulých kampaních OceanLotus. Lze jej emulovat pomocí db293b825dcc419ba7dc2c49fa2757ee.dll
, načte jej do paměti a spustí DllEntry
.
DLL extrahuje obsah svého zdroje, dešifruje (AES-256-CBC) a dekomprimuje (LZMA). Zdroj má specifický formát, který lze snadno dekompilovat.
Obrázek 13. Struktura konfigurace instalačního programu (KaitaiStruct Visualizer)
Konfigurace je specifikována explicitně - v závislosti na úrovni oprávnění budou zapsána binární data %appdata%IntellogsBackgroundUploadTask.cpl
nebo %windir%System32BackgroundUploadTask.cpl
(nebo SysWOW64
pro 64bitové systémy).
Další perzistence je zajištěna vytvořením úlohy s názvem BackgroundUploadTask[junk].job
Kde [junk]
představuje sadu bajtů 0x9D
и 0xA0
.
Název aplikace úkolu %windir%System32control.exe
a hodnota parametru je cesta ke staženému binárnímu souboru. Skrytá úloha běží každý den.
Strukturálně je soubor CPL DLL s interním názvem ac8e06de0a6c4483af9837d96504127e.dll
, který exportuje funkci CPlApplet
. Tento soubor dešifruje svůj jediný prostředek {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, pak načte tuto knihovnu DLL a zavolá její jediný export DllEntry
.
Konfigurační soubor zadních vrátek
Konfigurace zadních vrátek je zašifrována a vložena do jejích prostředků. Struktura konfiguračního souboru je velmi podobná předchozímu.
Obrázek 14. Struktura konfigurace zadních vrátek (KaitaiStruct Visualizer)
Ačkoli je struktura podobná, mnoho hodnot polí bylo aktualizováno oproti hodnotám zobrazeným v
První prvek binárního pole obsahuje DLL (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Doplňkový výzkum
Při sběru vzorků jsme si všimli některých charakteristik. Právě popsaný exemplář se objevil kolem července 2018 a další jemu podobné se objevily až od poloviny ledna do začátku února 2019. Archiv SFX byl použit jako vektor infekce, který shodil legitimní návnadu a škodlivý soubor OSX.
Přestože OceanLotus používá falešná časová razítka, všimli jsme si, že časová razítka souborů SFX a OCX jsou vždy stejná (0x57B0C36A
(08. 14. 2016 v 7:15 UTC) a 0x498BE80F
(02/06/2009 v 7:34 UTC)). To pravděpodobně naznačuje, že autoři mají nějakého „designéra“, který používá stejné šablony a jednoduše mění některé vlastnosti.
Mezi dokumenty, které jsme studovali od začátku roku 2018, jsou různá jména označující země, které útočníky zajímají:
— Nové kontaktní informace společnosti Cambodia Media (New).xls.exe
— 李建香 (个人简历).exe (falešný pdf dokument životopisu)
— zpětná vazba, Rally v USA od 28. do 29. července 2018.exe
Od objevení zadních vrátek {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
a zveřejnění jeho analýzy několika výzkumníky jsme zaznamenali určité změny v konfiguračních datech malwaru.
Nejprve autoři začali odstraňovat názvy z pomocných knihoven DLL (DNSprov.dll
a dvě verze HttpProv.dll
). Operátoři poté přestali balit třetí DLL (druhou verzi HttpProv.dll
), který se rozhodl vložit pouze jeden.
Za druhé, mnoho konfiguračních polí zadních vrátek bylo změněno, což pravděpodobně uniklo detekci, protože bylo k dispozici mnoho IoC. Mezi důležitá pole upravená autory patří:
- Klíč registru AppX změněn (viz IoC)
- řetězec kódování mutex ("def", "abc", "ghi")
- číslo portu
A konečně, všechny nové analyzované verze mají nové C&C uvedené v sekci IoC.
Závěry
OceanLotus pokračuje ve vývoji. Kybernetická skupina se zaměřuje na zdokonalování a rozšiřování nástrojů a návnad. Autoři maskují škodlivou zátěž pomocí poutavých dokumentů, jejichž téma je relevantní pro zamýšlené oběti. Vyvíjejí nová schémata a používají také veřejně dostupné nástroje, jako je exploit Editor rovnic. Kromě toho vylepšují nástroje ke snížení počtu artefaktů zbývajících na počítačích obětí, čímž snižují šanci na odhalení antivirovým softwarem.
Ukazatele kompromisu
K dispozici jsou indikátory kompromisu i atributy MITER ATT&CK
Zdroj: www.habr.com