V tej objavi vam bomo povedali, kako je kibernetska skupina OceanLotus (APT32 in APT-C-00) nedavno uporabila enega od javno dostopnih podvigov za
OceanLotus je specializiran za kibernetsko vohunjenje, prednostne tarče pa so države v jugovzhodni Aziji. Napadalci ponarejajo dokumente, ki pritegnejo pozornost potencialnih žrtev, da bi jih prepričali, da izvedejo stranska vrata, poleg tega pa razvijajo orodja. Metode, ki se uporabljajo za ustvarjanje honeypots, se razlikujejo glede na napade, od datotek z »dvojno razširitvijo«, samoraztegljivih arhivov, dokumentov z makri do znanih podvigov.
Uporaba izkoriščanja v urejevalniku Microsoft Equation Editor
Sredi leta 2018 je OceanLotus izvedel kampanjo, ki je izkoriščala ranljivost CVE-2017-11882. Enega od zlonamernih dokumentov kibernetske skupine so analizirali strokovnjaki iz 360 Threat Intelligence Center (
Prva faza
Dokument FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) je podoben tistemu, omenjenemu v zgornji študiji. Zanimiva je, ker je namenjena uporabnikom, ki jih zanima kamboška politika (CNRP - Cambodia National Rescue Party, razpuščena konec leta 2017). Kljub končnici .doc je dokument v formatu RTF (glej sliko spodaj), vsebuje smeti kodo in je tudi popačen.
Slika 1. "Smeti" v RTF
Čeprav so elementi popačeni, Word uspešno odpre to datoteko RTF. Kot lahko vidite na sliki 2, obstaja struktura EQNOLEFILEHDR pri odmiku 0xC00, ki ji sledi glava MTEF in nato vnos MTEF (slika 3) za pisavo.
Slika 2. Vrednosti vnosa FONT
Slika 3.
Možno prelivanje na terenu Ime, ker se njegova velikost pred kopiranjem ne preverja. Predolgo ime sproži ranljivost. Kot lahko vidite iz vsebine datoteke RTF (odmik 0xC26 na sliki 2), je medpomnilnik napolnjen z ukazno kodo, ki ji sledi navidezni ukaz (0x90
) in povratni naslov 0x402114
. Naslov je element pogovornega okna v EQNEDT32.exe
, ki označuje navodila RET
. To povzroči, da EIP kaže na začetek polja Imeki vsebuje lupinsko kodo.
Slika 4. Začetek lupinske kode izkoriščanja
naslov 0x45BD3C
shrani spremenljivko, ki je dereferencirana, dokler ne doseže kazalca na trenutno naloženo strukturo MTEFData
. Preostanek lupinske kode je tukaj.
Namen lupinske kode je izvršiti drugi del lupinske kode, ki je vdelan v odprt dokument. Izvirna lupinska koda najprej poskuša najti datotečni deskriptor odprtega dokumenta s ponavljanjem čez vse sistemske deskriptorje (NtQuerySystemInformation
z argumentom SystemExtendedHandleInformation
) in preverjanje, ali se ujemajo PID deskriptor in PID proces WinWord
in ali je bil dokument odprt z masko za dostop - 0x12019F
.
Za potrditev, da je bil najden pravilni ročaj (in ne ročaj drugega odprtega dokumenta), se vsebina datoteke prikaže s funkcijo CreateFileMapping
, lupinska koda pa preveri, ali se zadnji štirje bajti dokumenta ujemajo z "yyyy
« (metoda lova na jajca). Ko je ujemanje najdeno, se dokument prekopira v začasno mapo (GetTempPath
) Kako ole.dll
. Nato se prebere zadnjih 12 bajtov dokumenta.
Slika 5. Označevalci konca dokumenta
32-bitna vrednost med markerji AABBCCDD
и yyyy
je odmik naslednje lupinske kode. Imenuje se z uporabo funkcije CreateThread
. Ekstrahirana ista lupinska koda, ki jo je prej uporabljala skupina OceanLotus.
Druga faza
Odstranjevanje komponent
Imena datotek in imenikov se izbirajo dinamično. Koda naključno izbere ime izvedljive datoteke ali datoteke DLL C:Windowssystem32
. Nato pošlje zahtevo svojim virom in pridobi polje FileDescription
uporabiti kot ime mape. Če to ne deluje, koda naključno izbere ime mape iz imenikov %ProgramFiles%
ali C:Windows
(iz GetWindowsDirectoryW). Izogiba se uporabi imena, ki bi lahko bilo v nasprotju z obstoječimi datotekami, in zagotavlja, da ne vsebuje naslednjih besed: windows
, Microsoft
, desktop
, system
, system32
ali syswow64
. Če imenik že obstaja, se imenu doda "NLS_{6 znakov}".
vir 0x102
se analizira in datoteke se vržejo vanj %ProgramFiles%
ali %AppData%
, v naključno izbrano mapo. Spremenjen čas ustvarjanja, da ima enake vrednosti kot kernel32.dll
.
Tukaj je na primer mapa in seznam datotek, ustvarjenih z izbiro izvršljive datoteke C:Windowssystem32TCPSVCS.exe
kot vir podatkov.
Slika 6. Ekstrahiranje različnih komponent
Struktura virov 0x102
v kapalki je precej zapleteno. Na kratko, vsebuje:
— Imena datotek
— Velikost in vsebina datoteke
— Format stiskanja (COMPRESSION_FORMAT_LZNT1
, ki ga uporablja funkcija RtlDecompressBuffer
)
Prva datoteka je ponastavljena kot TCPSVCS.exe
, kar je legitimno AcroTranscoder.exe
(po navedbah FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Morda ste opazili, da so nekatere datoteke DLL večje od 11 MB. To je zato, ker je v izvedljivo datoteko nameščen velik neprekinjen medpomnilnik naključnih podatkov. Možno je, da je to način, kako se izogniti odkrivanju nekaterih varnostnih izdelkov.
Zagotavljanje vztrajnosti
vir 0x101
v kapalnici vsebuje dve 32-bitni celi števili, ki določata, kako naj bo zagotovljena obstojnost. Vrednost prve določa, kako bo zlonamerna programska oprema obstajala brez skrbniških pravic.
Tabela 1. Mehanizem obstojnosti brez skrbniških pravic
Vrednost drugega celega števila določa, kako naj zlonamerna programska oprema doseže obstojnost, ko deluje s skrbniškimi pravicami.
Tabela 2. Mehanizem obstojnosti s skrbniškimi pravicami
Ime storitve je ime datoteke brez končnice; prikazno ime je ime mape, če pa že obstaja, se ji doda niz »Revision 1
” (število se povečuje, dokler se ne najde neuporabljeno ime). Operaterji so poskrbeli, da je bila vztrajnost skozi storitev robustna – v primeru okvare je treba storitev znova zagnati po 1 sekundi. Potem vrednost WOW64
Registrski ključ nove storitve je nastavljen na 4, kar pomeni, da gre za 32-bitno storitev.
Načrtovano opravilo se ustvari prek več vmesnikov COM: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. V bistvu zlonamerna programska oprema ustvari skrito nalogo, nastavi podatke o računu skupaj s podatki o trenutnem uporabniku ali skrbniku in nato nastavi sprožilec.
To je dnevna naloga s trajanjem 24 ur in intervali med dvema izvršitvama po 10 minut, kar pomeni, da bo potekala neprekinjeno.
Zlonamerni bit
V našem primeru je izvršljiva datoteka TCPSVCS.exe
(AcroTranscoder.exe
) je zakonita programska oprema, ki naloži DLL-je, ki se ponastavijo skupaj z njo. V tem primeru je zanimivo Flash Video Extension.dll
.
Njegova funkcija DLLMain
samo pokliče drugo funkcijo. Prisotnih je nekaj mehkih predikatov:
Slika 7. Mehki predikati
Po teh zavajajočih preverjanjih koda dobi razdelek .text
mapa TCPSVCS.exe
, spremeni svoj zagovor v PAGE_EXECUTE_READWRITE
in ga prepiše z dodajanjem navideznih navodil:
Slika 8. Zaporedje navodil
Na koncu naslova funkcije FLVCore::Uninitialize(void)
, izvoženo Flash Video Extension.dll
, je dodano navodilo CALL
. To pomeni, da po nalaganju zlonamerne DLL, ko kliče izvajalno okolje WinMain
в TCPSVCS.exe
, bo kazalec ukaza pokazal na NOP, kar povzroči FLVCore::Uninitialize(void)
, naslednja stopnja.
Funkcija preprosto ustvari mutex, ki se začne z {181C8480-A975-411C-AB0A-630DB8B0A221}
ki mu sledi trenutno uporabniško ime. Nato prebere izstavljeno datoteko *.db3, ki vsebuje kodo, neodvisno od položaja, in uporabi CreateThread
za izvedbo vsebine.
Vsebina datoteke *.db3 je ukazna koda, ki jo običajno uporablja skupina OceanLotus. Z uporabo skripta emulatorja, ki smo ga objavili, smo ponovno uspešno razpakirali njegov uporabni tovor
Skript izloči zadnjo stopnjo. Ta komponenta je stranska vrata, ki smo jih že analizirali {A96B020F-0000-466F-A96D-A91BBF8EAC96}
binarna datoteka. Konfiguracija zlonamerne programske opreme je še vedno šifrirana v viru PE. Ima približno enako konfiguracijo, vendar se C&C strežniki razlikujejo od prejšnjih:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
Ekipa OceanLotus ponovno prikazuje kombinacijo različnih tehnik za preprečevanje odkrivanja. Vrnili so se z "izpopolnjenim" diagramom procesa okužbe. Z izbiro naključnih imen in polnjenjem izvedljivih datotek z naključnimi podatki zmanjšajo število zanesljivih IoC (na podlagi zgoščenj in imen datotek). Poleg tega morajo napadalci zaradi uporabe nalaganja DLL tretjih oseb le odstraniti zakonito dvojiško datoteko AcroTranscoder
.
Samoraztegljivi arhivi
Po datotekah RTF se je skupina premaknila na samoraztegljive (SFX) arhive s skupnimi ikonami dokumentov, da bi uporabnika dodatno zmedli. Threatbook je pisal o tem ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Od sredine januarja 2019 OceanLotus ponovno uporablja to tehniko, vendar sčasoma spreminja nekatere konfiguracije. V tem razdelku bomo govorili o tehniki in spremembah.
Ustvarjanje vabe
Dokument THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) je bil prvič najden leta 2018. Ta datoteka SFX je bila ustvarjena pametno - v opisu (Informacije o različici) pravi, da je to slika JPEG. Skript SFX izgleda takole:
Slika 9. Ukazi SFX
Zlonamerna programska oprema se ponastavi {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), pa tudi sliko 2018 thich thong lac.jpg.
Slika vabe je videti takole:
Slika 10. Slika vabe
Morda ste opazili, da prvi dve vrstici v skriptu SFX dvakrat kličeta datoteko OCX, vendar to ni napaka.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
Nadzorni tok datoteke OCX je zelo podoben drugim komponentam OceanLotus – veliko zaporedij ukazov JZ/JNZ
и PUSH/RET
, izmenično s kodo smeti.
Slika 11. Zakrita koda
Po filtriranju neželene kode izvozite DllRegisterServer
, poklical regsvr32.exe
, izgleda na naslednji način:
Slika 12. Osnovna koda namestitvenega programa
V bistvu na prvi klic DllRegisterServer
izvoz nastavi vrednost registra HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
za šifriran odmik v DLL (0x10001DE0
).
Ko je funkcija drugič poklicana, prebere isto vrednost in se izvede na tem naslovu. Od tu se vir in številna dejanja v RAM-u berejo in izvajajo.
Shellcode je isti nalagalnik PE, uporabljen v preteklih kampanjah OceanLotus. Lahko ga posnemate z uporabo db293b825dcc419ba7dc2c49fa2757ee.dll
, ga naloži v pomnilnik in izvede DllEntry
.
DLL ekstrahira vsebino svojega vira, jo dešifrira (AES-256-CBC) in dekompresira (LZMA). Vir ima poseben format, ki ga je enostavno razstaviti.
Slika 13. Struktura konfiguracije namestitvenega programa (KaitaiStruct Visualizer)
Konfiguracija je podana eksplicitno - glede na raven privilegijev bodo zapisovani binarni podatki %appdata%IntellogsBackgroundUploadTask.cpl
ali %windir%System32BackgroundUploadTask.cpl
(Ali SysWOW64
za 64-bitne sisteme).
Nadaljnja obstojnost je zagotovljena z ustvarjanjem naloge z imenom BackgroundUploadTask[junk].job
Če [junk]
predstavlja niz bajtov 0x9D
и 0xA0
.
Ime aplikacije opravila %windir%System32control.exe
, vrednost parametra pa je pot do prenesene binarne datoteke. Skrita naloga se izvaja vsak dan.
Strukturno je datoteka CPL DLL z notranjim imenom ac8e06de0a6c4483af9837d96504127e.dll
, ki izvozi funkcijo CPlApplet
. Ta datoteka dešifrira svoj edini vir {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, nato naloži ta DLL in pokliče njegov edini izvoz DllEntry
.
Backdoor konfiguracijska datoteka
Konfiguracija zakulisnih vrat je šifrirana in vdelana v njene vire. Struktura konfiguracijske datoteke je zelo podobna prejšnji.
Slika 14. Konfiguracijska struktura backdoor (KaitaiStruct Visualizer)
Čeprav je struktura podobna, je bilo veliko vrednosti polj posodobljenih glede na prikazane v
Prvi element binarnega polja vsebuje DLL (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Dodatne raziskave
Med zbiranjem vzorcev smo opazili nekatere značilnosti. Pravkar opisani primerek se je pojavil okoli julija 2018, drugi podobni pa so se pojavili šele od sredine januarja do začetka februarja 2019. Arhiv SFX je bil uporabljen kot vektor okužbe, pri čemer je bil odvržen zakonit dokument z vabo in zlonamerna datoteka OSX.
Čeprav OceanLotus uporablja lažne časovne žige, smo opazili, da so časovni žigi datotek SFX in OCX vedno enaki (0x57B0C36A
(08. 14. 2016 ob 7:15 UTC) in 0x498BE80F
(02. 06. 2009 ob 7:34 UTC). To verjetno kaže na to, da imajo avtorji nekakšnega "dizajnera", ki uporablja iste predloge in preprosto spremeni nekatere lastnosti.
Med dokumenti, ki smo jih preučevali od začetka leta 2018, so različna imena, ki označujejo države, ki so zanimive za napadalce:
— Novi kontaktni podatki Cambodia Media (novo).xls.exe
— 李建香 (个人简历).exe (lažni pdf dokument življenjepisa)
— povratne informacije, Rally v ZDA od 28. do 29. julija 2018.exe
Ker so bila zadnja vrata odkrita {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
in objavo analize več raziskovalcev smo opazili nekaj sprememb v podatkih o konfiguraciji zlonamerne programske opreme.
Najprej so avtorji začeli odstranjevati imena iz pomožnih DLL (DNSprov.dll
in dve različici HttpProv.dll
). Operaterji so nato prenehali pakirati tretji DLL (druga različica HttpProv.dll
), pri čemer se odločite za vdelavo samo enega.
Drugič, veliko konfiguracijskih polj zakulisnih vrat je bilo spremenjenih, kar bi se verjetno izognilo zaznavanju, ko je postalo na voljo veliko IoC. Pomembna polja, ki so jih spremenili avtorji, vključujejo:
- Spremenjen registrski ključ AppX (glejte IoC)
- kodirni niz mutex ("def", "abc", "ghi")
- številko vrat
Končno imajo vse nove analizirane različice v razdelku IoC navedene nove C&C.
Ugotovitve
OceanLotus se še naprej razvija. Kibernetska skupina je osredotočena na izboljšanje in razširitev orodij in vab. Avtorji prikrijejo zlonamerno vsebino z dokumenti, ki pritegnejo pozornost, katerih tema je pomembna za predvidene žrtve. Razvijajo nove sheme in uporabljajo tudi javno dostopna orodja, kot je Equation Editor exploit. Poleg tega izboljšujejo orodja za zmanjšanje števila artefaktov, ki ostanejo na strojih žrtev, s čimer se zmanjša možnost odkrivanja s protivirusno programsko opremo.
Kazalniki kompromisa
Na voljo so indikatorji kompromisa in atributi MITER ATT&CK
Vir: www.habr.com