Šiame įraše papasakosime, kaip kibernetinė grupė OceanLotus (APT32 ir APT-C-00) neseniai panaudojo vieną iš viešai prieinamų išnaudojimų. , „Microsoft Office“ atminties pažeidimai ir tai, kaip grupės kenkėjiška programa išliks pažeistose sistemose nepalikdama pėdsakų. Toliau aprašysime, kaip nuo 2019 m. pradžios grupė naudojo savaime išsiskleidžiančius archyvus kodui vykdyti.
„OceanLotus“ specializuojasi kibernetinio šnipinėjimo srityje, o prioritetiniai tikslai yra Pietryčių Azijos šalys. Užpuolikai klastoja dokumentus, kurie patraukia potencialių aukų dėmesį, siekdami įtikinti jas atlikti užpakalines duris, taip pat kuria priemones. Medaus puodų kūrimo metodai skiriasi įvairiose atakose: nuo „dvigubo išplėtimo“ failų, savaime išsiskleidžiančių archyvų, dokumentų su makrokomandomis iki žinomų išnaudojimų.

„Microsoft Equation Editor“ išnaudojimo naudojimas
2018 m. viduryje „OceanLotus“ surengė kampaniją, kurioje išnaudojo CVE-2017-11882 pažeidžiamumą. Vieną iš kenkėjiškų kibernetinės grupės dokumentų išanalizavo 360 Threat Intelligence Center specialistai (), įskaitant išsamų išnaudojimo aprašymą. Toliau pateiktame įraše pateikiama tokio kenksmingo dokumento apžvalga.
Pirmasis etapas
Dokumentas FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) yra panašus į pirmiau minėtame tyrime. Jis įdomus tuo, kad skirtas vartotojams, besidomintiems Kambodžos politika (CNRP – Cambodia National Rescue Party, likviduota 2017 m. pabaigoje). Nepaisant .doc plėtinio, dokumentas yra RTF formatu (žr. paveikslėlį žemiau), jame yra šiukšlių kodas ir jis taip pat yra iškraipytas.

1 pav. "Šiukšlės" RTF
Nors yra iškraipytų elementų, Word sėkmingai atidaro šį RTF failą. Kaip matote 2 paveiksle, 0xC00 poslinkyje yra EQNOLEFILEHDR struktūra, po kurios yra MTEF antraštė ir šrifto MTEF įrašas (3 pav.).

2 pav. FONT įvesties reikšmės

Pav 3.
Galimas perpildymas lauke pavadinimas, nes jo dydis prieš kopijuojant netikrinamas. Per ilgas pavadinimas sukelia pažeidžiamumą. Kaip matote iš RTF failo turinio (0 pav. poslinkis 26xC2), buferis užpildomas apvalkalo kodu, po kurio duodama fiktyvi komanda (0x90) ir grąžinimo adresą 0x402114. Adresas yra dialogo elementas EQNEDT32.exe, nurodant instrukcijas RET. Dėl to EIP nurodo lauko pradžią pavadinimaskuriame yra apvalkalo kodas.

4 pav. Išnaudojimo apvalkalo kodo pradžia
adresas 0x45BD3C išsaugo kintamąjį, į kurį neatsižvelgiama, kol pasiekia žymeklį į šiuo metu įkeltą struktūrą MTEFData. Likusi apvalkalo kodas yra čia.
Apvalkalo kodo paskirtis yra vykdyti antrąją apvalkalo kodo dalį, įdėtą į atvirą dokumentą. Pirminis apvalkalo kodas pirmiausia bando rasti atidaryto dokumento failo deskriptorių, kartodamas visus sistemos deskriptorius (NtQuerySystemInformation su argumentu SystemExtendedHandleInformation) ir patikrinti, ar jie sutampa PID deskriptorius ir PID procesą WinWord ir ar dokumentas buvo atidarytas naudojant prieigos kaukę - 0x12019F.
Norint patvirtinti, kad buvo rasta tinkama rankena (o ne kito atidaryto dokumento rankena), failo turinys rodomas naudojant funkciją CreateFileMapping, o apvalkalo kodas patikrina, ar paskutiniai keturi dokumento baitai atitinka "yyyy"(Kiaušinių medžioklės metodas). Kai randama atitiktis, dokumentas nukopijuojamas į laikiną aplanką (GetTempPath) Kaip ole.dll. Tada nuskaitomi paskutiniai 12 dokumento baitų.
![]()
5 pav. Dokumento pabaigos žymekliai
32 bitų reikšmė tarp žymeklių AABBCCDD и yyyy yra kito apvalkalo kodo poslinkis. Jis vadinamas naudojant funkciją CreateThread. Ištrauktas tas pats apvalkalo kodas, kurį anksčiau naudojo OceanLotus grupė. , kurį išleidome 2018 m. kovo mėn., vis dar veikia antrojo etapo sąvartynui.
Antrasis etapas
Komponentų pašalinimas
Failų ir katalogų pavadinimai parenkami dinamiškai. Kodas atsitiktinai pasirenka vykdomojo arba DLL failo pavadinimą C:Windowssystem32. Tada jis pateikia užklausą savo ištekliams ir nuskaito lauką FileDescription naudoti kaip aplanko pavadinimą. Jei tai neveikia, kodas atsitiktinai parenka aplanko pavadinimą iš katalogų %ProgramFiles% arba C:Windows (из GetWindowsDirectoryW). Он избегает использования имени, которое может конфликтовать с существующими файлами, и следит за тем, чтобы оно не содержало следующие слова: windows, Microsoft, desktop, system, system32 arba syswow64. Jei katalogas jau yra, prie pavadinimo pridedamas „NLS_{6 simboliai}“.
išteklių 0x102 išanalizuojama ir failai įkeliami %ProgramFiles% arba %AppData%, į atsitiktinai pasirinktą aplanką. Sukūrimo laikas pakeistas, kad būtų tokios pačios vertės kaip kernel32.dll.
Pavyzdžiui, čia yra aplankas ir failų, sukurtų pasirinkus vykdomąjį failą, sąrašas C:Windowssystem32TCPSVCS.exe kaip duomenų šaltinį.

6 pav. Įvairių komponentų ištraukimas
Išteklių struktūra 0x102 lašelinėje yra gana sudėtinga. Trumpai tariant, jame yra:
– Failų pavadinimai
— Failo dydis ir turinys
– suspaudimo formatas (COMPRESSION_FORMAT_LZNT1, kurį naudoja funkcija RtlDecompressBuffer)
Pirmasis failas iš naujo nustatomas kaip TCPSVCS.exe, kuris yra teisėtas AcroTranscoder.exe (pagal FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).
Galbūt pastebėjote, kad kai kurie DLL failai yra didesni nei 11 MB. Taip yra todėl, kad vykdomajame faile yra didelis gretimas atsitiktinių duomenų buferis. Gali būti, kad tai yra būdas išvengti kai kurių saugos produktų aptikimo.
Atkaklumo užtikrinimas
išteklių 0x101 lašintuvu yra du 32 bitų sveikieji skaičiai, nurodantys, kaip turi būti užtikrintas patvarumas. Pirmojo reikšmė nurodo, kaip kenkėjiška programa išliks be administratoriaus teisių.

1 lentelė. Patvarumo mechanizmas be administratoriaus teisių
Antrojo sveikojo skaičiaus reikšmė nurodo, kaip kenkėjiška programa turėtų išlikti, kai ji veikia administratoriaus teisėmis.

2 lentelė. Patvarumo mechanizmas su administratoriaus teisėmis
Paslaugos pavadinimas yra failo pavadinimas be plėtinio; rodomas pavadinimas yra aplanko pavadinimas, bet jei jis jau yra, prie jo pridedama eilutė “Revision 1“ (skaičius didėja, kol randamas nenaudojamas pavadinimas). Operatoriai pasirūpino, kad paslaugos atkaklumas būtų tvirtas – gedimo atveju paslauga turėtų būti paleista iš naujo po 1 sekundės. Tada vertė WOW64 Naujasis paslaugos registro raktas nustatytas į 4, o tai reiškia, kad tai 32 bitų paslauga.
Suplanuota užduotis sukuriama per kelias COM sąsajas: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. Iš esmės kenkėjiška programa sukuria paslėptą užduotį, nustato paskyros informaciją kartu su dabartinio vartotojo arba administratoriaus informacija ir tada nustato aktyviklį.
Tai kasdienė užduotis, kurios trukmė yra 24 valandos, o intervalai tarp dviejų vykdymų yra 10 minučių, o tai reiškia, kad ji veiks nuolat.
Piktybiškas bitas
Mūsų pavyzdyje vykdomasis failas TCPSVCS.exe (AcroTranscoder.exe) yra teisėta programinė įranga, kuri įkelia DLL, kurios iš naujo nustatomos kartu su ja. Šiuo atveju tai įdomu Flash Video Extension.dll.
Jo funkcija DLLMain tiesiog iškviečia kitą funkciją. Yra keletas neaiškių predikatų:

7 pav. Neaiškūs predikatai
Po šių klaidinančių patikrinimų kodas gauna skyrių .text failą TCPSVCS.exe, pakeičia savo gynybą į PAGE_EXECUTE_READWRITE ir perrašo jį pridėdamas netikras instrukcijas:

8 pav. Instrukcijų seka
Pabaigoje – funkcijos adresas FLVCore::Uninitialize(void), eksportuota Flash Video Extension.dll, pridedama instrukcija CALL. Tai reiškia, kad po kenkėjiško DLL įkėlimo, kai vykdymo laikas iškviečia WinMain в TCPSVCS.exe, instrukcijos žymeklis nurodys NOP, sukeldamas FLVCore::Uninitialize(void), kitas etapas.
Funkcija tiesiog sukuria mutex, pradedant nuo {181C8480-A975-411C-AB0A-630DB8B0A221}po kurio nurodomas dabartinis vartotojo vardas. Tada jis nuskaito iškeltą *.db3 failą, kuriame yra nuo pozicijos nepriklausomas kodas, ir naudoja CreateThread vykdyti turinį.
*.db3 failo turinys yra apvalkalo kodas, kurį paprastai naudoja OceanLotus grupė. Mes vėl sėkmingai išpakavome jo naudingą apkrovą naudodami mūsų paskelbtą emuliatoriaus scenarijų .
Scenarijus ištraukia paskutinį etapą. Šis komponentas yra užpakalinės durys, kurias mes jau išanalizavome . Tai gali nustatyti GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} dvejetainis failas. Kenkėjiškos programos konfigūracija vis dar užšifruota PE šaltinyje. Jo konfigūracija yra maždaug tokia pati, tačiau C&C serveriai skiriasi nuo ankstesnių:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
„OceanLotus“ komanda vėl demonstruoja skirtingų metodų derinį, kad būtų išvengta aptikimo. Jie grįžo su „patobulinta“ infekcijos proceso schema. Pasirinkę atsitiktinius pavadinimus ir užpildydami vykdomuosius failus atsitiktiniais duomenimis, jie sumažina patikimų IoC skaičių (pagal maišą ir failų pavadinimus). Be to, dėl trečiosios šalies DLL įkėlimo, užpuolikams tereikia pašalinti teisėtą dvejetainį failą. AcroTranscoder.
Savaime išsiskleidžiantys archyvai
Po RTF failų grupė perėjo prie savaiminio išskleidimo (SFX) archyvų su įprastomis dokumentų piktogramomis, kad dar labiau suklaidintų vartotoją. Grėsmių knyga apie tai rašė (). Paleidus savaime išsiskleidžiantys RAR failai atmetami ir vykdomi DLL su .ocx plėtiniu, kurių galutinė naudingoji apkrova buvo dokumentuota anksčiau {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Nuo 2019 m. sausio vidurio „OceanLotus“ pakartotinai naudoja šią techniką, tačiau laikui bėgant keitė kai kurias konfigūracijas. Šiame skyriuje kalbėsime apie techniką ir pakeitimus.
Sukurti jauką
Dokumentas THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) pirmą kartą buvo rastas 2018 m. Šis SFX failas buvo sukurtas išmintingai – aprašyme (Informacija apie versiją) sakoma, kad tai JPEG vaizdas. SFX scenarijus atrodo taip:

9 pav. SFX komandos
Kenkėjiška programa nustatoma iš naujo {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), taip pat nuotrauką 2018 thich thong lac.jpg.
Jauko vaizdas atrodo taip:

10 pav. Jauko vaizdas
Galbūt pastebėjote, kad pirmosios dvi SFX scenarijaus eilutės du kartus iškviečia OCX failą, tačiau tai nėra klaida.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
OCX failo valdymo srautas labai panašus į kitus OceanLotus komponentus – daug komandų sekų JZ/JNZ и PUSH/RET, pakaitomis su šiukšlių kodu.

11 pav. Užmaskuotas kodas
Išfiltravę nepageidaujamą kodą, eksportuokite DllRegisterServer, paskambino regsvr32.exe, taip:

12 pav. Pagrindinis montuotojo kodas
Iš esmės per pirmąjį skambutį DllRegisterServer eksportas nustato registro vertę HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model užšifruotam poslinkiui DLL (0x10001DE0).
Kai funkcija iškviečiama antrą kartą, ji nuskaito tą pačią reikšmę ir vykdoma tuo adresu. Iš čia skaitomi ir vykdomi ištekliai ir daugelis operatyviosios atminties veiksmų.
Shellcode yra ta pati PE krautuvas, naudotas ankstesnėse OceanLotus kampanijose. Jį galima imituoti naudojant . Galų gale jis iš naujo nustato db293b825dcc419ba7dc2c49fa2757ee.dll, įkelia jį į atmintį ir vykdo DllEntry.
DLL ištraukia savo išteklių turinį, iššifruoja (AES-256-CBC) ir išspaudžia (LZMA). Išteklius turi specifinį formatą, kurį lengva dekompiliuoti.

13 pav. Diegimo programos konfigūracijos struktūra (KaitaiStruct Visualizer)
Konfigūracija nurodyta aiškiai – priklausomai nuo privilegijų lygio, dvejetainiai duomenys bus rašomi %appdata%IntellogsBackgroundUploadTask.cpl arba %windir%System32BackgroundUploadTask.cpl (Arba SysWOW64 64 bitų sistemoms).
Tolesnis atkaklumas užtikrinamas sukūrus užduotį su pavadinimu BackgroundUploadTask[junk].jobKur [junk] reiškia baitų rinkinį 0x9D и 0xA0.
Užduoties programos pavadinimas %windir%System32control.exe, o parametro reikšmė yra kelias į atsisiųstą dvejetainį failą. Paslėpta užduotis vykdoma kiekvieną dieną.
Struktūriškai CPL failas yra DLL su vidiniu pavadinimu ac8e06de0a6c4483af9837d96504127e.dll, kuri eksportuoja funkciją CPlApplet. Šis failas iššifruoja vienintelį savo šaltinį {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, tada įkelia šį DLL ir iškviečia vienintelį jo eksportą DllEntry.
Užpakalinių durų konfigūracijos failas
Užpakalinių durų konfigūracija yra užšifruota ir įterpta į jos išteklius. Konfigūracijos failo struktūra labai panaši į ankstesnį.

14 pav. Galinių durų konfigūracijos struktūra (KaitaiStruct Visualizer)
Nors struktūra panaši, daugelis laukų reikšmių buvo atnaujintos iš parodytų .
Pirmame dvejetainio masyvo elemente yra DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), . Bet kadangi eksporto pavadinimas buvo pašalintas iš dvejetainio, maišos nesutampa.
Papildomi tyrimai
Rinkdami pavyzdžius pastebėjome kai kurias ypatybes. Ką tik aprašytas egzempliorius pasirodė maždaug 2018 m. liepos mėn., o kiti panašūs į jį pasirodė dar 2019 m. sausio viduryje–vasario pradžioje. SFX archyvas buvo naudojamas kaip infekcijos vektorius, pašalinant teisėtą apgaulės dokumentą ir kenkėjišką OSX failą.
Nors OceanLotus naudoja netikras laiko žymes, pastebėjome, kad SFX ir OCX failų laiko žymos visada yra vienodos (0x57B0C36A (08-14-2016 7:15 UTC) ir 0x498BE80F (atitinkamai 02-06-2009 7:34 UTC). Tai tikriausiai rodo, kad autoriai turi kažkokį „dizainerį“, kuris naudoja tuos pačius šablonus ir tiesiog keičia kai kurias charakteristikas.
Tarp dokumentų, kuriuos tyrinėjome nuo 2018 m. pradžios, yra įvairių pavadinimų, nurodančių užpuolikus dominančias šalis:
— Nauja Cambodia Media(New).xls.exe kontaktinė informacija
— 李建香 (个人简历).exe (netikras CV pdf dokumentas)
— atsiliepimai, ralis JAV 28 m. liepos 29-2018 d..exe
Nuo tada, kai buvo aptiktos užpakalinės durys {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll ir kai kurių tyrėjų paskelbus jos analizę, pastebėjome tam tikrus kenkėjiškų programų konfigūracijos duomenų pokyčius.
Pirma, autoriai pradėjo šalinti pavadinimus iš pagalbinių DLL (DNSprov.dll ir dvi versijos HttpProv.dll). Tada operatoriai nustojo pakuoti trečiąjį DLL (antroji versija HttpProv.dll), pasirenkant įterpti tik vieną.
Antra, buvo pakeista daug užpakalinių durų konfigūracijos laukų, kad būtų išvengta aptikimo, nes atsirado daug IoC. Svarbūs autorių modifikuoti laukai yra šie:
- Pakeistas „AppX“ registro raktas (žr. IoC)
- mutex kodavimo eilutė („def“, „abc“, „ghi“)
- prievado numeris
Galiausiai, visose naujose analizuojamose versijose yra nauji C ir C, išvardyti IoC skyriuje.
išvados
„OceanLotus“ toliau vystosi. Kibernetinė grupė orientuojasi į įrankių ir jaukų tobulinimą ir plėtrą. Autoriai užmaskuoja kenksmingus krovinius naudodami dėmesį patraukiančius dokumentus, kurių tema yra susijusi su numatomomis aukomis. Jie kuria naujas schemas ir taip pat naudoja viešai prieinamus įrankius, pvz., Equation Editor exploit. Be to, jie tobulina įrankius, kad sumažintų aukų kompiuteriuose likusių artefaktų skaičių, taip sumažinant galimybę juos aptikti antivirusine programine įranga.
Kompromiso rodikliai
Galimi kompromiso rodikliai ir MITER ATT&CK atributai и .
Šaltinis: www.habr.com
