Ziņā mēs jums pastāstīsim, kā OceanLotus kibergrupa (APT32 un APT-C-00) nesen izmantoja vienu no publiski pieejamajiem paņēmieniem , Microsoft Office atmiņas bojājuma ievainojamības un to, kā grupas ļaunprogrammatūra nodrošina noturību uzlauztajās sistēmās, neatstājot pēdas. Tālāk mēs aprakstām, kā kopš 2019. gada sākuma grupa koda palaišanai izmanto pašizpletes arhīvus.
OceanLotus specializējas kiberspiegošanā, prioritārie mērķi ir Dienvidaustrumāzijas valstis. Uzbrucēji vilto dokumentus, kas piesaista potenciālo upuru uzmanību, lai pārliecinātu viņus veikt aizmugures durvis, kā arī strādā pie rīku izstrādes. Meduspodu veidošanas metodes atšķiras dažādos uzbrukumos - no "dubultā paplašinājuma" failiem, pašizpletes arhīviem, makro dokumentiem un beidzot ar labi zināmiem varoņdarbiem.

Izmantošanas izmantošana Microsoft vienādojumu redaktorā
2018. gada vidū OceanLotus veica kampaņu, kurā tika izmantota ievainojamība CVE-2017-11882. Vienu no kibergrupas ļaunprātīgajiem dokumentiem analizēja 360 draudu izlūkošanas centra speciālisti (), tostarp detalizēts ekspluatācijas apraksts. Zemāk esošajā ziņojumā ir sniegts pārskats par šādu ļaunprātīgu dokumentu.
Pirmais posms
Dokuments FW Report on demonstration of former CNRP in Republic of Korea.doc (sha-1: D1357B284C951470066AAA7A8228190B88A5C7C3) ir līdzīgs iepriekš minētajā pētījumā minētajam. Tas ir interesants ar to, ka tas ir paredzēts lietotājiem, kuri interesējas par Kambodžas politiku (CNRP - Cambodia National Salvation Party, likvidēta 2017. gada beigās). Neskatoties uz paplašinājumu .doc, dokuments ir RTF formātā (skatiet attēlu zemāk), satur nevēlamo kodu un ir arī izkropļots.

1. attēls. Atkritumi RTF
Neskatoties uz nepareizu elementu klātbūtni, Word veiksmīgi atver šo RTF failu. Kā redzams 2. attēlā, šeit ir EQNOLEFILEHDR struktūra ar nobīdi 0xC00, kam seko MTEF galvene un pēc tam fonta MTEF ieraksts (3. attēls).

2. attēls. FONT ierakstu vērtības

Skaitlis 3.
Iespējama lauka pārplūde nosaukums, jo tā izmērs pirms kopēšanas netiek pārbaudīts. Pārāk garš nosaukums izraisa ievainojamību. Kā redzat no RTF faila satura (nobīde 0xC26 2. attēlā), buferis tiek aizpildīts ar shell kodu, kam seko fiktīva komanda (0x90) un atgriešanas adresi 0x402114. Adrese ir dialoga elements EQNEDT32.exenorādot uz instrukcijām RET. Tādējādi EIP norāda uz lauka sākumu nosaukumsKas satur čaulas kodu.

4. attēls. Ekspluatācijas čaulas koda sākums
Adrese 0x45BD3C saglabā mainīgo, uz kuru tiek noņemta atsauce, līdz tas sasniedz rādītāju uz pašlaik ielādēto struktūru MTEFData. Šeit ir pārējais čaulas kods.
Shellkoda mērķis ir izpildīt otro čaulas koda daļu, kas iegulta atvērtajā dokumentā. Pirmkārt, sākotnējais čaulas kods mēģina atrast atvērtā dokumenta faila deskriptoru, atkārtojot visus sistēmas deskriptorus (NtQuerySystemInformation ar argumentu SystemExtendedHandleInformation) un pārbaudot, vai tie atbilst PID deskriptors un PID process WinWord un vai dokuments tika atvērts ar piekļuves masku - 0x12019F.
Lai apstiprinātu, ka ir atrasts pareizais rokturis (nevis cita atvērta dokumenta rokturis), faila saturs tiek parādīts, izmantojot funkciju CreateFileMapping, un čaulas kods pārbauda, vai dokumenta pēdējie četri baiti atbilst "yyyy» (Olu medību metode). Kad atbilstība ir atrasta, dokuments tiek kopēts pagaidu mapē (GetTempPath) Kā ole.dll. Pēc tam tiek nolasīti dokumenta pēdējie 12 baiti.
![]()
5. attēls. Dokumenta beigu marķieri
32 bitu vērtība starp marķieriem AABBCCDD и yyyy ir nākamā čaulas koda nobīde. To sauc ar funkciju CreateThread. Izvilkts tas pats čaulas kods, ko iepriekš izmantoja grupa OceanLotus. , kuru izlaidām 2018. gada martā, joprojām darbojas otrā posma izgāztuvē.
Otrais posms
Komponentu izvilkšana
Failu un direktoriju nosaukumi tiek izvēlēti dinamiski. Kods nejauši izvēlas izpildāmā vai DLL faila nosaukumu C:Windowssystem32. Pēc tam tas iesniedz pieprasījumu saviem resursiem un izgūst lauku FileDescription lai izmantotu kā mapes nosaukumu. Ja tas nedarbojas, kods nejauši atlasa mapes nosaukumu no direktorijiem %ProgramFiles% vai C:Windows (из GetWindowsDirectoryW). Он избегает использования имени, которое может конфликтовать с существующими файлами, и следит за тем, чтобы оно не содержало следующие слова: windows, Microsoft, desktop, system, system32 vai syswow64. Ja direktorijs jau pastāv, nosaukumam tiek pievienots "NLS_{6 rakstzīmes}".
resursi 0x102 parsēti un faili izmesti %ProgramFiles% vai %AppData%, uz nejauši izvēlētu mapi. Izveidošanas laiks ir mainīts uz tādām pašām vērtībām kā kernel32.dll.
Piemēram, šeit ir mape un to failu saraksts, kas izveidoti, atlasot izpildāmo failu C:Windowssystem32TCPSVCS.exe kā datu avots.

6. attēls. Dažādu komponentu ieguve
Resursu struktūra 0x102 pilinātājā ir diezgan sarežģīta. Īsumā tas satur:
- failu nosaukumi
— Faila lielums un saturs
— saspiešanas formāts (COMPRESSION_FORMAT_LZNT1ko izmanto funkcija RtlDecompressBuffer)
Pirmais fails tiek izmests kā TCPSVCS.exe, kas ir likumīgi AcroTranscoder.exe (saskaņā ar FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).
Iespējams, esat ievērojuši, ka daži DLL faili ir lielāki par 11 MB. Tas ir tāpēc, ka izpildāmajā failā tiek ievietots liels blakus esošu nejaušu datu buferis. Iespējams, tas ir veids, kā izvairīties no dažu drošības produktu atklāšanas.
Noturības nodrošināšana
resursi 0x101 pilinātājā ir divi 32 bitu veseli skaitļi, kas norāda, kā ir jānodrošina noturība. Pirmā vērtība norāda, kā ļaunprogrammatūra saglabāsies bez administratora tiesībām.

1. tabula. Neadministratora noturības mehānisms
Otrā veselā skaitļa vērtība norāda, kā ļaunprogrammatūrai jānodrošina noturība, darbojoties ar administratora privilēģijām.

2. tabula. Administratora noturības mehānisms
Pakalpojuma nosaukums ir faila nosaukums bez paplašinājuma; parādāmais nosaukums ir mapes nosaukums, bet, ja tas jau pastāv, virkne "Revision 1” (skaitlis palielinās, līdz tiek atrasts neizmantots nosaukums). Operatori ir parūpējušies, lai noturība caur servisu būtu noturīga – kļūmes gadījumā pakalpojums ir jārestartē pēc 1 sekundes. Tad vērtība WOW64 Pakalpojuma jaunā reģistra atslēga ir iestatīta uz 4, kas norāda, ka šis ir 32 bitu pakalpojums.
Plānotais uzdevums tiek izveidots, izmantojot vairākas COM saskarnes: ITaskScheduler, ITask, ITaskTrigger, IPersistFile и ITaskScheduler. Būtībā ļaunprogrammatūra izveido slēptu uzdevumu, iestata konta informāciju kopā ar pašreizējā lietotāja vai administratora informāciju un pēc tam iestata trigeri.
Šis ir ikdienas uzdevums, kura ilgums ir 24 stundas un intervāli starp diviem braucieniem ir 10 minūtes, kas nozīmē, ka tas darbosies pastāvīgi.
Ļaunprātīgs bits
Mūsu piemērā izpildāmā TCPSVCS.exe (AcroTranscoder.exe) ir likumīga programmatūra, kas ielādē kopā ar to atmestos DLL. Šajā gadījumā tas interesē Flash Video Extension.dll.
Tā funkcija DLLMain vienkārši izsauc citu funkciju. Ir daži neskaidri predikāti:

7. attēls. Izplūdušie predikāti
Pēc šīm maldinošajām pārbaudēm kods saņem sadaļu .text failu TCPSVCS.exe, maina savu aizsardzību uz PAGE_EXECUTE_READWRITE un pārraksta to ar fiktīviem norādījumiem:

8. attēls. Instrukciju secība
Beigās uz funkcijas adresi FLVCore::Uninitialize(void), eksportēts Flash Video Extension.dll, tiek pievienota instrukcija CALL. Tas nozīmē, ka pēc ļaunprātīgā DLL ielādes izpildlaika zvani WinMain в TCPSVCS.exe, norādījumu rādītājs norādīs uz NOP, kā rezultātā tiks izsaukts FLVCore::Uninitialize(void), nākamais posms.
Funkcija vienkārši izveido mutex, sākot ar {181C8480-A975-411C-AB0A-630DB8B0A221}kam seko pašreizējais lietotājvārds. Pēc tam tas nolasa izmesto *.db3 failu, kas satur no pozīcijas neatkarīgu kodu, un izmanto CreateThread lai izpildītu saturu.
Faila *.db3 saturs ir čaulas kods, ko parasti izmanto OceanLotus komanda. Mēs atkal veiksmīgi atspiedām tā lietderīgo slodzi, izmantojot mūsu publicēto emulatora skriptu. .
Skripts izgūst pēdējo posmu. Šis komponents ir aizmugures durvis, kurā mēs jau esam analizējuši . To var noteikt GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} binārais fails. Ļaunprātīgas programmatūras konfigurācija joprojām ir šifrēta PE resursā. Tam ir aptuveni tāda pati konfigurācija, taču C&C serveri atšķiras no iepriekšējiem:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
OceanLotus grupa atkal demonstrē dažādu paņēmienu kombināciju, lai izvairītos no atklāšanas. Viņi atgriezās ar "pabeigtu" infekcijas procesa shēmu. Izvēloties nejaušus nosaukumus un aizpildot izpildāmos failus ar nejaušiem datiem, tie samazina uzticamo IoC skaitu (pamatojoties uz jaucējfunkcijām un failu nosaukumiem). Turklāt, izmantojot trešās puses DLL ielādi, uzbrucējiem ir jānoņem tikai likumīgais binārs AcroTranscoder.
Pašizplūšanas arhīvi
Pēc RTF failiem grupa pārgāja uz pašizpletes (SFX) arhīviem ar kopīgām dokumentu ikonām, lai vēl vairāk mulsinātu lietotāju. Par to rakstīja draudu grāmata (). Startēšanas laikā pašizpletes RAR faili tiek izmesti un tiek izpildīti DLL ar paplašinājumu .ocx, kuru galīgā slodze iepriekš tika dokumentēta. {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Kopš 2019. gada janvāra vidus OceanLotus ir atkārtoti izmantojis šo paņēmienu, taču laika gaitā mainījis dažas konfigurācijas. Šajā sadaļā mēs runāsim par tehniku un izmaiņām.
Lure izveide
Dokuments THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (sha-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) pirmo reizi tika atrasts 2018. gadā. Šis SFX fails tika izveidots ar prātu - aprakstā (Versijas informācija) saka, ka tas ir JPEG attēls. SFX skripts izskatās šādi:

9. attēls. SFX komandas
Ļaunprātīga programmatūra tiek atiestatīta {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (sha-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), kā arī attēlu 2018 thich thong lac.jpg.
Mānekļa attēls izskatās šādi:

10. attēls. Mānekļa attēls
Iespējams, esat pamanījis, ka SFX skripta pirmās divas rindas divreiz izsauc OCX failu, taču tā nav kļūda.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
OCX faila vadības plūsma ir ļoti līdzīga citiem OceanLotus komponentiem - daudzām komandu secībām JZ/JNZ и PUSH/RETielikts nevēlamā kodā.

11. attēls. Obfuskēts kods
Pēc atkritumu koda filtrēšanas notiek eksportēšana DllRegisterServer, zvanīja regsvr32.exe, sekojoši:

12. attēls. Galvenā uzstādītāja kods
Būtībā, pirmo reizi zvanot DllRegisterServer eksports nosaka reģistra vērtību HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model šifrētai nobīdei DLL (0x10001DE0).
Kad funkcija tiek izsaukta otrreiz, tā nolasa to pašu vērtību un tiek izpildīta šajā adresē. No šejienes resurss tiek nolasīts un izpildīts, un daudzas darbības tiek veiktas RAM.
Shellcode ir tas pats PE iekrāvējs, kas tika izmantots iepriekšējās OceanLotus kampaņās. To var atdarināt ar . Beigās viņš nokrīt db293b825dcc419ba7dc2c49fa2757ee.dll, ielādē to atmiņā un izpilda DllEntry.
DLL izvelk sava resursa saturu, atšifrē (AES-256-CBC) un atspiež (LZMA). Resursam ir īpašs formāts, ko ir viegli dekompilēt.

13. attēls. Instalēšanas programmas konfigurācijas struktūra (KaitaiStruct Visualizer)
Konfigurācija ir iestatīta skaidri — atkarībā no privilēģiju līmeņa tiks rakstīti binārie dati %appdata%IntellogsBackgroundUploadTask.cpl vai %windir%System32BackgroundUploadTask.cpl (Vai SysWOW64 64 bitu sistēmām).
Turpmāka noturība tiek nodrošināta, izveidojot uzdevumu ar nosaukumu BackgroundUploadTask[junk].jobKur [junk] ir baitu kopa 0x9D и 0xA0.
Uzdevuma lietojumprogrammas nosaukums %windir%System32control.exe, un parametra vērtība ir ceļš uz lejupielādēto bināro failu. Slēptais uzdevums darbojas katru dienu.
Strukturāli CPL fails ir DLL ar iekšējo nosaukumu ac8e06de0a6c4483af9837d96504127e.dll, kas eksportē funkciju CPlApplet. Šis fails atšifrē savu vienīgo resursu {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, pēc tam ielādē šo DLL un izsauc tā vienīgo eksportēšanu DllEntry.
Aizmugures durvju konfigurācijas fails
Aizmugurējo durvju konfigurācija ir šifrēta un iegulta tās resursos. Konfigurācijas faila struktūra ir ļoti līdzīga iepriekšējai.

14. attēls. Aizmugures durvju konfigurācijas struktūra (KaitaiStruct Visualizer)
Neskatoties uz līdzīgu struktūru, daudzu lauku vērtības ir atjauninātas, salīdzinot ar datiem, kas parādīti .
Pirmais binārā masīva elements satur DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), . Bet, tā kā eksporta nosaukums ir noņemts no binārā faila, jaucējkodi nesakrīt.
Papildu pētījumi
Vācot paraugus, mēs pievērsām uzmanību dažām īpašībām. Tikko aprakstītais paraugs parādījās aptuveni 2018. gada jūlijā, un citi tamlīdzīgi parādījās pavisam nesen, 2019. gada janvāra vidū – februāra sākumā. SFX arhīvs tika izmantots kā infekcijas pārnēsātājs, izmetot likumīgu mānekļu dokumentu un ļaunprātīgu OCX failu.
Lai gan OceanLotus izmanto viltotus laikspiedolus, mēs pamanījām, ka SFX un OCX failu laikspiedoli vienmēr ir vienādi (0x57B0C36A (08 plkst. 14:2016 UTC) un 0x498BE80F (attiecīgi 02. plkst. 06:2009 UTC). Tas, iespējams, norāda, ka autoriem ir kāds "konstruktors", kas izmanto tās pašas veidnes un tikai maina dažus raksturlielumus.
Starp dokumentiem, kurus esam pētījuši kopš 2018. gada sākuma, ir dažādi nosaukumi, kas norāda uz uzbrūkošajām interesēm:
- Cambodia Media(New).xls.exe jaunā kontaktinformācija
- 李建香 (个人简历).exe (viltots CV pdf dokuments)
— atsauksmes, Rallijs ASV no 28.-29.exe
Kopš aizmugures durvju atklāšanas {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll un publicējot tās analīzi, ko veica vairāki pētnieki, mēs novērojām dažas izmaiņas ļaunprātīgas programmatūras konfigurācijas datos.
Pirmkārt, autori sāka noņemt nosaukumus no palīga DLL DLL (DNSprov.dll un divas versijas HttpProv.dll). Pēc tam operatori pārtrauca trešā DLL (otrā versija) iesaiņošanu HttpProv.dll), izvēloties iegult tikai vienu.
Otrkārt, ir mainīti daudzi aizmugures durvju konfigurācijas lauki, iespējams, lai izvairītos no atklāšanas, jo ir kļuvuši pieejami daudzi IoC. Starp svarīgajām autoru modificētajām jomām ir šādas:
- mainīta reģistra atslēga AppX (skatiet IoC)
- mutex kodēšanas virkne ("def", "abc", "ghi")
- porta numurs
Visbeidzot, visām jaunajām analizētajām versijām ir jauni C&C, kas norādīti IoC sadaļā.
Atzinumi
OceanLotus turpina attīstīties. Kibergrupa ir vērsta uz instrumentu un mānekļu uzlabošanu un paplašināšanu. Autori maskē ļaunprātīgas kravas ar uzmanību piesaistošiem dokumentiem, kas attiecas uz paredzētajiem upuriem. Viņi izstrādā jaunas shēmas un izmanto arī publiski pieejamus rīkus, piemēram, vienādojumu redaktora izmantošanu. Turklāt viņi uzlabo rīkus, lai samazinātu upuru iekārtās atstāto artefaktu skaitu, tādējādi samazinot iespēju, ka pretvīrusu programmatūra tos atklās.
Kompromisa rādītāji
Ir pieejami kompromisa indikatori, kā arī MITER ATT&CK atribūti и .
Avots: www.habr.com
