Postit räägime, kuidas küberrühm OceanLotus (APT32 ja APT-C-00) kasutas hiljuti ühte avalikult kätte saadavat eksploiti, , Microsoft Office'i mälu kahjustamise haavatavust, ning kuidas rühma pahavara tagab püsivuse kompromiteeritud süsteemides, jättes vähe jälgi. Edasi kirjeldame, kuidas rühm on alates 2019. aastast kasutanud iseeneslikult lahti pakendavaid arhiive koodi käivitamiseks.
OceanLotus spetsialiseerub küberluurele, prioriteetsed sihid on Kagu-Aasia riigid. Ründajad valetavad dokumentides, mis köidavad potentsiaalsete ohvrite tähelepanu, et veenda neid sellega tagauste käivitamist, ning töötavad ka tööriistakomplekti arendamise kallal. Nende kütikute loomise meetodid varieeruvad erinevates rünnakutes - alates 'topeltpikendusega' failidest, iseeneslikult lahti pakendavatest arhiividest, makrosid sisaldavatest dokumentidest kuni tuntud eksploitideni.

Eksploidi kasutamine Microsoft Equation Editor'is
2018. aasta keskpaiku viis OceanLotus ellu kampaania, kasutades haavatavust CVE-2017-11882. Ühte rühma pahatahtlikku dokumenti analüüsis 360 Threat Intelligence Center (), sealhulgas üksikasjalik ülevaade eksploidi kohta. Allpool on kirjeldusega sarnane pahatahtlik dokument.
Esimene etapp
Dokument FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) sarnaneb ülemäänsuses mainituga. See on huvitav, kuna see on suunatud kasutajatele, keda huvitab Kambodža poliitika (CNRP – Kambodža Rahvusliku Päästearmee Partei, mis lahutati 2017. aasta lõpus). Kuigi sellel on .doc pikendus, on dokument RTF formaadis (vt allolevat joonist), sisaldab prügikoodi ning on moonutatud.

Joonis 1. „Prügi“ RTFs
Hoolimata moonutatud elementide olemasolust avab Word selle RTF-faili edukalt. Nagu näha jooniselt 2, on siin EQNOLEFILEHDR struktuur nihkega 0xC00, järgnes MTEF pealkiri ja seejärel MTEF kirje (joonis 3) fondi jaoks.

Joonis 2. Fondi kirje väärtused

Joonis 3.
Võib esineda ülevoolu väljale nimi, kuna selle suurust ei kontrollita enne kopeerimist. Liialt pikk nimi aktiveerib haavatavuse. Nagu näha RTF faili sisust (nihke 0xC26 joonisel 2), täidetakse puhver shell-koodiga, millele järgneb vale käsk (0x90) ja tagasipöördumise aadress 0x402114. Aadress on dialoogielement EQNEDT32.exe, näidates juhiseid RET. See viib selleni, et EIP osutab välja algusele nimi, mis sisaldab shell-koodi.

Joonis 4. Koodijupi algus
Aadress 0x45BD3C hoiab muutuja, mis muudetakse, kuni jõuab viitaja praegusele laaditud struktuurile MTEFData. Siin asub ülejäänud shell-kood.
Shell-koodi eesmärk on teise shell-koodi tüki käivitamine, mis on sisseehitatud avatud dokumenti. Esmalt püüab algne shell-kood leida avatud dokumendi failitöötlejat, läbides kõiki süsteemi töödeldavaid faile (NtQuerySystemInformation argumentidega SystemExtendedHandleInformation) ja kontrollides, kas PID töötleja ja PID protsessi WinWord ning kas dokument avati juurdepääsu maskiga – 0x12019F.
Korrektse töödeldava leidmise kinnitamiseks (mitte teise avatud dokumendi töödeldava), kuvatakse faili sisu funktsiooni abil CreateFileMapping, ning shell-kood kontrollib, kas dokumendi viimased neli baiti on «yyyy» (mugavustunne meetod). Kui vaste leitud, kopeeritakse dokument ajutisse kausta (GetTempPathja avage brauser. aadressi järgi kirjutage: ole.dll. Seejärel loetakse dokumendi viimased 12 baiti.
![]()
Joonis 5. Dokumendi lõpu markerid
32-bitine väärtus markerite vahel AABBCCDD ja yyyy – on järgmise shell-koodi offset. See käivitatakse funktsiooni abil CreateThread. Sama shell-kood, mida rühm OceanLotus varem kasutas, on välja tõmmatud. , mille me välja andsime märtsis 2018, töötab endiselt teise etapi dumpinguks.
Teine etapp
Komponentide eraldamine
Failide ja kaustade nimed valitakse dünaamiliselt. Kood valib juhuslikult teatud täitmisfaili või DLL-faili nime C:Windowssystem32. Seejärel teeb see oma ressursside päringu ja eraldab välja FileDescription kaustana kasutamiseks. Kui see ei toimi, valib kood juhuslikult kaustade nime kataloogidest %ProgramFiles% või C:Windows (GetWindowsDirectoryW kaudu). See väldib nimede kasutamist, mis võivad konflikti minna olemasolevate failidega ning jälgib, et see ei sisaldaks järgmisi sõnu: windows, Microsoft, desktop, system, Käivita uuesti või syswow64. Kui kaust juba eksisteerib, lisatakse nimele «NLS_{6 sümbolit}».
Allikas 0x102 analüüsitakse ja failid esitatakse %ProgramFiles% või %AppData%, juhuslikult valitud kausta. Loomise aeg muudetakse, et see oleks samasugune, nagu kernel32.dll.
Näiteks on siin kaust ja failide loend, mis on loodud täidesaatva faili valimise teel C:Windowssystem32TCPSVCS.exe andmeallikana.

Joonis 6. Erinevate komponentide väljavõtmine
Ressursi struktuur 0x102 droppis on üsna keeruline. Lühidalt öeldes sisaldab see:
— Failinimed
— Failide suurus ja sisu
— Kompressiooniformaat (COMPRESSION_FORMAT_LZNT1, mida kasutab funktsioon RtlDecompressBuffer)
Esimene fail saadetakse välja nagu TCPSVCS.exe, mis on seaduslik AcroTranscoder.exe ('sõltuvalt FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).
Võib-olla olete märganud, et mõned DLL-failid ületavad 11 MB. See on tingitud sellest, et suur pidev juhuslike andmete puhver on paigutatud täidesaatvasse faili. On võimalik, et see on viis, kuidas vältida avastamist mõnede turvatoodete poolt.
Püsimise tagamine
Allikas 0x101 droppis sisaldab kahte 32-bitist täisarvu, mis määravad, kuidas püsivust tagada. Esimese väärtus näitab, kuidas pahavara säilitab püsivuse ilma administreerimisõigusteta.

Tabel 1. Püsivuse mehhanism ilma administreerimisõigusteta
Teise täisarvu väärtus näitab, kuidas pahavara peab tagama püsivuse administreerimisõigustega.

Tabel 2. Püsivuse mehhanism administreerimisõigustega
Teenuse nimi on faili nimi ilma laiendita; kuvatav nimi on kausta nimi, kuid kui see on juba olemas, lisatakse sellele joon "Revision 1" (number suureneb seni, kuni leitakse kasutamata nimi). Operaatoreid on hoolt kandnud selle eest, et teenuse kaudu püsimine oleks stabiilne – tõrke korral tuleb teenus taaskäivitada 1 sekundi pärast. Seejärel määratakse WOW64 uue teenuse registrivõtme väärtuseks 4, mis näitab, et see on 32-bitine teenus.
Planeeritud ülesanne luuakse mitme COM-liidese kaudu: ITaskScheduler, ITask, ITaskTrigger, IPersistFile ja ITaskScheduler. Põhimõtteliselt loob pahavara peidetud ülesande, määrab konto teabe koos praeguse kasutaja või administraatori teabega ja seejärel määrab päästiku.
See on igapäevane ülesanne kestusega 24 tundi ja kahe täitmise vaheliste intervallidega 10 minutit, mis tähendab, et see täidetakse pidevalt.
Kahjulik bit
Meie näites on täitmise fail TCPSVCS.exe (AcroTranscoder.exe) on legitiimne tarkvara, mis laadib dll-faile, mis laaditakse koos sellega. Sellisel juhul on huvi Flash Video Extension.dll.
Selle funktsioon DLLMain lihtsalt kutsub välja veel ühe funktsiooni. On olemas mõned ebamugavad predikaadid:

Joonis 7. Ebamugavad predikaadid
Pärast neid eksitavaid kontrollimisi saab kood osa .text failist TCPSVCS.exe, muudab selle kaitset PAGE_EXECUTE_READWRITE ja kirjutab selle uuesti, lisades vale instruktsioone:

Joonis 8. Juhiste järjestus
Lõpus lisatakse funktsiooni aadressile FLVCore::Uninitialize(void), mida eksporditakse Flash Video Extension.dll, lisatakse käsklus CALL. See tähendab, et pärast kahjuliku dll-faili laadimist, kui käituskeskkond kutsub välja WinMain ja TCPSVCS.exe, näitaja osutab NOP-le, põhjustades seeläbi FLVCore::Uninitialize(void), järgmise etapi.
Funktsioon lihtsalt loob mutexi, mis algab {181C8480-A975-411C-AB0A-630DB8B0A221}, millele järgneb praegune kasutajanimi. Seejärel loeb see nullitud faili, millel on faililaiend *.db3, mis sisaldab positsioonist sõltumatut koodi, ja kasutab CreateThread selle sisu täitmiseks.
*.db3 faili sisu on shelli kood, mida kasutab tavaliselt OceanLotus rühm. Me oleme taas edukalt lahti pakkunud selle koormuse, kasutades emulaatori skripti, mille oleme avaldanud .
Skript ekstraheerib lõpp-etapi. See komponent on tagaukse, mida oleme juba analüüsinud . Seda saab määrata GUIDi abil {A96B020F-0000-466F-A96D-A91BBF8EAC96} binaarfaili. Kahjulike programmide konfiguratsioon on endiselt krüpteeritud PE ressursis. Sellel on ligikaudu sama konfiguratsioon, kuid C&C-serverid erinevad varasemast:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
OceanLotuse rühm demonstreerib taas erinevate tehnikaid, et vältida avastamist. Nad on tagasi tulnud "täiendatud" nakatumisprotsessi skeemiga. Valides juhuslikud nimed ja täites käivitatavad failid juhuslike andmetega, vähendavad nad usaldusväärsete IoC-de (hash'ide ja failinimede põhjal) arvu. Veelgi enam, tänu kolmandate osapoolte dll-de laadimisele peab ründaja lihtsalt eemaldama legitiimse binaarfi AcroTranscoder.
Iseseisvalt lahti pakkivad arhiivid
Pärast RTF-faile läks rühm üle iseseisvalt lahti pakkivatele (SFX) arhiividele levinud dokumentide ikoonidega, et veelgi rohkem kasutajat segadusse ajada. Seda on kajastanud Threatbook (). Pärast käivitamist kustutatakse iseavanevad RAR-failid ja käivitatakse .ocx laiendiga DLL-d, mille lõplik koormus on eelnevalt dokumenteeritud {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Alates 2019. aasta jaanuari keskelt on OceanLotus seda tehnikat uuesti kasutanud, kuid aja jooksul on mõned konfiguratsioonid muutunud. Selles osas räägime tehnikast ja muudatustest.
Käsi abinõuna
Dokument THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) leiti esmakordselt 2018. aastal. See SFX-fail on hoolikalt loodud - kirjelduses (Versiooni teave) öeldakse, et see on JPEG pilt. SFX skript näeb välja järgmine:

Joonis 9. SFX käsud
Pahavara tühjendab {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), samuti pildi 2018 thich thong lac.jpg.
Käsi pilt näeb välja järgmine:

Joonis 10. Käsi pilt
Võib-olla olete märganud, et SFX skripti esimesed kaks rida kutsuvad kaks korda üles OXS faili, kuid see ei ole viga.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
OXS faili juhtimisvoog on väga sarnane teiste OceanLotus'i komponentidega - palju käskude järjestusi JZ/JNZ ja PUSH/RET, vaheldumisi prügikoodiga.

Joonis 11. Obfuskeeritud kood
Pärast prügikoodi filtreerimist ekspordib DllRegisterServer, mida kutsub regsvr32.exe, see näeb välja järgmine:

Joonis 12. Peamine paigalduse kood
Sisuliselt esimesel kutsel DllRegisterServer ekspordib registri väärtuse HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model kriptitud offseti jaoks DLL-is (0x10001DE0).
Kui funktsioon kutsutakse teist korda, loetakse sama väärtus ja see täidab selle aadressi. Sealt loetakse ja täidetakse ressurss ja palju tegevusi mälus.
Shellcode on sama PE laadija, mida on kasutatud varasemates OceanLotus'i kampaaniates. Seda saab emuleerida meie skripti abil. db293b825dcc419ba7dc2c49fa2757ee.dll , laadib selle mällu ja täidabDllEntry DLL ekstraktib oma ressursi sisu, dekrüpteerib (AES-256-CBC) ja dekompresseerib (LZMA) selle. Ressurss on spetsiifilises formaadis, mida on lihtne dekompileerida..
Joonis 13. Paigaldaja konfiguratsiooni struktuur (KaitaiStruct Visualizer)

Konfiguratsioon on selgelt määratletud - sõltuvalt privileegide tasemest kirjutatakse binaarandmed
%appdata%IntellogsBackgroundUploadTask.cpl %windir%System32BackgroundUploadTask.cpl või SysWOW64 (või 64-bitistele süsteemidele). 64-bit süsteemide jaoks).
Edasi tagab püsivuse loomisülesanne nimega BackgroundUploadTask[junk].job, kus [junk] tähendab baitide kogumit 0x9D ja 0xA0.
Ulesande rakenduse nimi %windir%System32control.exe, ja parameetri väärtus on tee üles laaditud binaarfailini. Peidetud ülesanne käivitatakse igapäevaselt.
Konstruktiivselt on CPL-fail DLL, millel on sisemine nimi ac8e06de0a6c4483af9837d96504127e.dll, mis ekspordib funktsiooni CPlApplet. See fail dekodeerib oma ainule ressursi {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, laadib seejärel selle DLL-i ja kutsub esile selle ainulaadse ekspordi DLL ekstraktib oma ressursi sisu, dekrüpteerib (AES-256-CBC) ja dekompresseerib (LZMA) selle. Ressurss on spetsiifilises formaadis, mida on lihtne dekompileerida..
Tagasiühenduse konfiguratsioonifail
Tagasiühenduse konfiguratsioon on krüpteeritud ja sisseehitatud selle ressurssidesse. Konfiguratsioonifaili struktuur on väga sarnane eelnevale.

Joonis 14. Tagasiühenduse konfiguratsiooni struktuur (KaitaiStruct Visualizer)
Kuigi struktuur on sarnane, on paljude väljade väärtuseid uuendatud võrreldes andmetega, mis on esitatud .
Esimene element binaarmasinast sisaldab DLL-i (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), . Kuid kuna ekspordi nimi eemaldati binaarfailist, ei sobi hashid.
Lisauuringud
Proovide kogumisel panime tähele mõningaid omadusi. Just kirDescribeeritud proov ilmus umbes juulis 2018, samas kui teised sarnased ilmusid hiljuti, jaanuari keskpaiku - veebruari alguses 2019. Nakkumise vektorina kasutati SFX-arhiivi, mis viskab välja legitiimse dokument-ahnuse ja kahjuliku OSH-faili.
Kuigi OceanLotus kasutab valeaega, oleme tähele pannud, et SFX-failide ja OCX-failide ajatempli ajad on alati samad (0x57B0C36A (08/14/2016 @ 7:15pm UTC) ja 0x498BE80F (02/06/2009 @ 7:34am UTC) vastavalt). Tõenäoliselt viitab see sellele, et autoritel on mingisugune 'konstruktor', mis kasutab samu malle ja muudab lihtsalt teatud omadusi.
Dokumentides, mida oleme uurinud alates 2018. aastast, on esitatud erinevaid nimesid, mis viitavad rünnakute sihtimiseks huvitavatele riikidele:
— The New Contact Information Of Cambodia Media(New).xls.exe
— 李建香 (个人简历).exe (vale pdf dokument CV-st)
— feedback, Rally in USA from July 28-29, 2018.exe
Alates tagasiühenduse avastamisest {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll ja selle analüüsi avaldamisest mitmete teadlaste poolt oleme märganud teatud muudatusi kahjulike programmide konfiguratsioonis.
Esiteks on autorid hakanud eemaldama nimesid abifailidest DLL (DNSprov.dll ja kaks versiooni HttpProv.dll). Siis operaatorid lõpetasid kolmanda DLLi pakkimise (teine versioon HttpProv.dll), valides ainult ühe integreerimise.
Teiseks, paljusid tagatakistuse konfiguratsioonivälju muudeti, tõenäoliselt avastamise vältimiseks, kuna paljud IoCd on muutunud kergesti kättesaadavaks. Oluliste muudetud väljade hulka kuuluvad:
- muudetud AppX registriosa (vt IoCs)
- mütsikoodeerimisrida („def“, „abc“, „ghi“)
- pordi number
Lõpuks on kõigis uutest analüüsitud versioonides ilmunud uued C&C, mis on loetletud IoCs osas.
Järeldused
OceanLotus jätkab arengut. Kübergrupp on keskendunud tööriistade ja köidete täiustamisele ja laiendamisele. Autorid maskeerivad pahavara laadimist tähelepanu äratavate dokumentide kaudu, mille teema on asjakohane eeldatavate sihtmärkide jaoks. Nad arendavad uusi skeeme ning kasutavad ka avalikke tööriistu, näiteks Equation Editori ekspluateerimist. Veelgi enam, nad täiustavad tööriistu, et vähendada artefaktide arvu, mis jäävad ohvrite masinatele, seeläbi vähendades avastamise võimalusi viirusetõrje tarkvara poolt.
Kompromissindikaatorid
Kompromiteerimise näidikud, samuti MITRE ATT&CK atribuudid on saadaval ja .
Allikas: habr.com
