En ĉi tiu afiŝo ni rakontos al vi kiel la cibergrupo OceanLotus (APT32 kaj APT-C-00) ĵus uzis unu el la publike disponeblaj ekspluatoj por
OceanLotus specialiĝas pri ciberspionado, kun prioritataj celoj estas landoj en Sudorienta Azio. Atakantoj forĝas dokumentojn kiuj altiras la atenton de eblaj viktimoj por konvinki ilin ekzekuti la malantaŭan pordon, kaj ankaŭ laboras pri evoluigado de iloj. La metodoj uzataj por krei mielpotojn varias laŭ atakoj, de "duobla etendo" dosieroj, mem-eltiraj arkivoj, dokumentoj kun makrooj, ĝis konataj atingoj.
Uzante ekspluatadon en Microsoft Equation Editor
Meze de 2018, OceanLotus faris kampanjon ekspluatante la vundeblecon CVE-2017-11882. Unu el la malicaj dokumentoj de la cibergrupo estis analizita de specialistoj de 360 Threat Intelligence Center (
Unua etapo
La dokumento FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) similas al tiu menciita en la supra studo. Ĝi estas interesa ĉar ĝi celas uzantojn interesitajn pri kamboĝa politiko (CNRP - Kamboĝa Nacia Sava Partio, dissolvita fine de 2017). Malgraŭ la etendo .doc, la dokumento estas en formato RTF (vidu la bildon sube), enhavas ruban kodon, kaj ankaŭ estas distordita.
Figuro 1. "Rubo" en RTF
Kvankam estas misklaraj elementoj, Word malfermas ĉi tiun RTF-dosieron sukcese. Kiel vi povas vidi en Figuro 2, ekzistas EQNOLEFILEHDR-strukturo ĉe ofseto 0xC00, sekvita de MTEF-kapo, kaj poste MTEF-eniro (Figuro 3) por la tiparo.
Figuro 2. FONT-enirvaloroj
Figuro 3.
Ebla superfluo en la kampo nomo, ĉar ĝia grandeco ne estas kontrolita antaŭ kopiado. Nomo tro longa ekigas vundeblecon. Kiel vi povas vidi el la enhavo de la RTF-dosiero (offset 0xC26 en Figuro 2), la bufro estas plenigita per ŝelkodo sekvita de falsa komando (0x90
) kaj revenadreso 0x402114
. La adreso estas dialogelemento en EQNEDT32.exe
, indikante instrukciojn RET
. Ĉi tio igas EIP montri al la komenco de la kampo nomoenhavanta la ŝelkodon.
Figuro 4. Komenco de la ekspluata ŝelkodo
Adreso 0x45BD3C
stokas variablon kiu estas dereferencita ĝis ĝi atingas montrilon al la nuntempe ŝarĝita strukturo MTEFData
. La resto de la ŝelkodo estas ĉi tie.
La celo de la ŝelkodo estas efektivigi la duan pecon de ŝelkodo enigita en la malferma dokumento. La origina ŝelkodo unue provas trovi la dosierpriskribilon de la malfermita dokumento ripetante ĉiujn sistempriskribilojn (NtQuerySystemInformation
kun argumento SystemExtendedHandleInformation
) kaj kontrolante ĉu ili kongruas PID priskribilo kaj PID procezo WinWord
kaj ĉu la dokumento estis malfermita kun alirmasko - 0x12019F
.
Por konfirmi, ke la ĝusta tenilo estas trovita (kaj ne la tenilo al alia malfermita dokumento), la enhavo de la dosiero estas montrata per la funkcio CreateFileMapping
, kaj la ŝelkodo kontrolas ĉu la lastaj kvar bajtoj de la dokumento kongruas kun "yyyy
"(Metodo de Ovo-Ĉasado). Post kiam kongruo estas trovita, la dokumento estas kopiita al provizora dosierujo (GetTempPath
) Kiel ole.dll
. Tiam la lastaj 12 bajtoj de la dokumento estas legitaj.
Figuro 5. Fino de Dokumentaj Markiloj
32-bita valoro inter markiloj AABBCCDD
и yyyy
estas la ofseto de la sekva ŝelkodo. Ĝi nomiĝas uzante la funkcion CreateThread
. Eltiris la saman ŝelkodon, kiu estis uzita de la OceanLotus-grupo pli frue.
Dua etapo
Forigante Komponentojn
Dosieroj kaj dosierujoj estas dinamike elektitaj. La kodo hazarde elektas la nomon de la rulebla aŭ DLL-dosiero en C:Windowssystem32
. Ĝi tiam faras peton al siaj rimedoj kaj prenas la kampon FileDescription
uzi kiel la dosierujon nomo. Se ĉi tio ne funkcias, la kodo hazarde elektas dosierujon el la dosierujoj %ProgramFiles%
aŭ C:Windows
(de GetWindowsDirectoryW). Ĝi evitas uzi nomon kiu povus konflikti kun ekzistantaj dosieroj kaj certigas ke ĝi ne enhavas la sekvajn vortojn: windows
, Microsoft
, desktop
, system
, system32
aŭ syswow64
. Se la dosierujo jam ekzistas, "NLS_{6 signoj}" estas aldonita al la nomo.
rimedo 0x102
estas analizitaj kaj dosieroj estas forĵetitaj en %ProgramFiles%
aŭ %AppData%
, al hazarde elektita dosierujo. Ŝanĝita krea tempo por havi la samajn valorojn kiel kernel32.dll
.
Ekzemple, jen la dosierujo kaj listo de dosieroj kreitaj elektante la ruleblan C:Windowssystem32TCPSVCS.exe
kiel datumfonto.
Figuro 6. Ekstraktado de diversaj komponantoj
Rimeda strukturo 0x102
en guto estas sufiĉe kompleksa. En resumo, ĝi enhavas:
— Dosiernomoj
— Dosiera grandeco kaj enhavo
— Kunprema formato (COMPRESSION_FORMAT_LZNT1
, uzata de la funkcio RtlDecompressBuffer
)
La unua dosiero estas rekomencigita kiel TCPSVCS.exe
, kio estas legitima AcroTranscoder.exe
(laŭ FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Vi eble rimarkis, ke iuj DLL-dosieroj estas pli grandaj ol 11 MB. Ĉi tio estas ĉar granda apuda bufro de hazardaj datumoj estas metita ene de la rulebla dosiero. Eblas, ke ĉi tio estas maniero eviti detekton de iuj sekurecaj produktoj.
Certigante persiston
rimedo 0x101
en la guto enhavas du 32-bitajn entjerojn kiuj precizigas kiel persisto devus esti provizita. La valoro de la unua specifas kiel la malware persistos sen administrantoj.
Tabelo 1. Persista mekanismo sen administranto-rajtoj
La valoro de la dua entjero specifas kiel la malware devus atingi persiston kiam kuras kun administranto rajtoj.
Tablo 2. Persista mekanismo kun administranto-rajtoj
La servonomo estas la dosiernomo sen etendaĵo; la montra nomo estas la nomo de la dosierujo, sed se ĝi jam ekzistas, la ĉeno " estas almetita al ĝiRevision 1
” (la nombro pligrandiĝas ĝis troviĝos neuzata nomo). La funkciigistoj certigis, ke persisto tra la servo estas fortika - en kazo de fiasko, la servo devus esti rekomencita post 1 sekundo. Tiam la valoro WOW64
La registroŝlosilo de la nova servo estas agordita al 4, indikante ke ĝi estas 32-bita servo.
Planita tasko estas kreita per pluraj COM-interfacoj: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. Esence, la malware kreas kaŝitan taskon, fiksas la kontajn informojn kune kun la aktualaj informoj pri uzanto aŭ administranto, kaj poste starigas la ellasilon.
Ĉi tio estas ĉiutaga tasko kun daŭro de 24 horoj kaj intervaloj inter du ekzekutoj de 10 minutoj, kio signifas, ke ĝi funkcios senĉese.
Malica peco
En nia ekzemplo, la rulebla dosiero TCPSVCS.exe
(AcroTranscoder.exe
) estas legitima programaro, kiu ŝarĝas DLL-ojn kiuj estas rekomencigitaj kune kun ĝi. En ĉi tiu kazo, ĝi estas interesa Flash Video Extension.dll
.
Ĝia funkcio DLLMain
nur vokas alian funkcion. Kelkaj neklaraj predikatoj ĉeestas:
Figuro 7. Neklaraj predikatoj
Post ĉi tiuj misgvidaj kontroloj, la kodo ricevas sekcion .text
dosiero TCPSVCS.exe
, ŝanĝas sian defendon al PAGE_EXECUTE_READWRITE
kaj reverkas ĝin aldonante falsajn instrukciojn:
Figuro 8. Sekvo de instrukcioj
Fine al la funkcio adreso FLVCore::Uninitialize(void)
, eksportita Flash Video Extension.dll
, instrukcio estas aldonita CALL
. Ĉi tio signifas, ke post kiam la malica DLL estas ŝarĝita, kiam la rultempo vokas WinMain
в TCPSVCS.exe
, la instrukcimontrilo montros al NOP, kaŭzante FLVCore::Uninitialize(void)
, sekva etapo.
La funkcio simple kreas mutekson komencantan per {181C8480-A975-411C-AB0A-630DB8B0A221}
sekvata de la nuna uzantnomo. Ĝi tiam legas la forĵetitan *.db3-dosieron, kiu enhavas pozicion-sendependan kodon, kaj uzas CreateThread
por efektivigi la enhavon.
La enhavo de la *.db3-dosiero estas la ŝelkodo, kiun la OceanLotus-grupo kutime uzas. Ni denove sukcese malpakis ĝian utilan ŝarĝon per la emulila skripto, kiun ni publikigis
La skripto ĉerpas la finan etapon. Ĉi tiu komponanto estas malantaŭa pordo, en kiu ni jam analizis {A96B020F-0000-466F-A96D-A91BBF8EAC96}
binara dosiero. La malware-agordo ankoraŭ estas ĉifrita en la PE-rimedo. Ĝi havas proksimume la saman agordon, sed la C&C-serviloj diferencas de la antaŭaj:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
La teamo de OceanLotus denove pruvas kombinaĵon de malsamaj teknikoj por eviti detekton. Ili revenis kun "rafinita" diagramo de la infekta procezo. Elektante hazardajn nomojn kaj plenigante ruleblajn dosierojn per hazardaj datumoj, ili reduktas la nombron da fidindaj IoCs (bazitaj sur hashoj kaj dosiernomoj). Krome, danke al la uzo de triaj DLL-ŝarĝado, atakantoj nur bezonas forigi la legitiman binaron. AcroTranscoder
.
Mem-eltiraj arkivoj
Post RTF-dosieroj, la grupo moviĝis al mem-eltiraj (SFX) arkivoj kun oftaj dokumentikonoj por plue konfuzi la uzanton. Threatbook skribis pri tio ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. Ekde meze de januaro 2019, OceanLotus reuzas ĉi tiun teknikon, sed ŝanĝas kelkajn agordojn laŭlonge de la tempo. En ĉi tiu sekcio ni parolos pri la tekniko kaj ŝanĝoj.
Kreante Allogaĵon
La dokumento THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) unue estis trovita en 2018. Ĉi tiu SFX-dosiero estis kreita saĝe - en la priskribo (Versiaj Informoj) ĝi diras, ke ĉi tio estas JPEG-bildo. La SFX-skripto aspektas jene:
Figuro 9. SFX-Komandoj
La malware restarigas {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), same kiel bildon 2018 thich thong lac.jpg.
La forlogaĵbildo aspektas jene:
Figuro 10. Forlogaĵo-bildo
Vi eble rimarkis, ke la unuaj du linioj en la SFX-skripto nomas la OCX-dosieron dufoje, sed ĉi tio ne estas eraro.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
La kontrolfluo de OĈ-dosiero tre similas al aliaj komponantoj de OceanLotus - multaj komandsekvencoj JZ/JNZ
и PUSH/RET
, alternante kun rubkodo.
Figuro 11. Malklarigita kodo
Post filtrado de rubkodo, eksportu DllRegisterServer
, vokis regsvr32.exe
, jene:
Figuro 12. Baza instalilo-kodo
Esence, je la unua voko DllRegisterServer
eksporto aroj registra valoro HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
por ĉifrita ofseto en DLL (0x10001DE0
).
Kiam la funkcio estas vokita duan fojon, ĝi legas la saman valoron kaj efektivigas ĉe tiu adreso. De ĉi tie la rimedo kaj multaj agoj en RAM estas legitaj kaj ekzekutitaj.
La ŝelkodo estas la sama PE-ŝargilo uzata en pasintaj kampanjoj de OceanLotus. Ĝi povas esti kopiita uzante db293b825dcc419ba7dc2c49fa2757ee.dll
, ŝarĝas ĝin en memoron kaj ekzekutas DllEntry
.
La DLL ĉerpas la enhavon de sia rimedo, malĉifras (AES-256-CBC) kaj malkunpremas (LZMA). La rimedo havas specifan formaton, kiu estas facile malkompilebla.
Figuro 13. Instalila agorda strukturo (KaitaiStruct Visualizer)
La agordo estas precizigita eksplicite - depende de la privilegia nivelo, binaraj datumoj estos skribitaj al %appdata%IntellogsBackgroundUploadTask.cpl
aŭ %windir%System32BackgroundUploadTask.cpl
(aŭ SysWOW64
por 64-bitaj sistemoj).
Plia persisto estas certigita kreante taskon kun la nomo BackgroundUploadTask[junk].job
kie [junk]
reprezentas aron da bajtoj 0x9D
и 0xA0
.
Nomo de Taska Apliko %windir%System32control.exe
, kaj la parametrovaloro estas la vojo al la elŝutita binara dosiero. La kaŝita tasko funkcias ĉiutage.
Strukture, CPL-dosiero estas DLL kun interna nomo ac8e06de0a6c4483af9837d96504127e.dll
, kiu eksportas funkcion CPlApplet
. Ĉi tiu dosiero malĉifras sian solan rimedon {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, tiam ŝarĝas ĉi tiun DLL kaj vokas ĝian nuran eksportadon DllEntry
.
Backdoor agorda dosiero
La malantaŭporda agordo estas ĉifrita kaj enigita en ĝiaj rimedoj. La strukturo de la agorda dosiero estas tre simila al la antaŭa.
Figuro 14. Malantaŭa agorda strukturo (KaitaiStruct Visualizer)
Kvankam la strukturo estas simila, multaj el la kampaj valoroj estis ĝisdatigitaj de tiuj montritaj en
La unua elemento de la binara tabelo enhavas DLL (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
Pliaj Esploroj
Dum kolektado de specimenoj, ni rimarkis iujn trajtojn. La ĵus priskribita specimeno aperis ĉirkaŭ julio 2018, kaj aliaj similaj aperis same lastatempe meze de januaro ĝis frua februaro 2019. La SFX-arkivo estis utiligita kiel infekta vektoro, faligante legitiman forlogaĵon kaj malican OSX-dosieron.
Kvankam OceanLotus uzas falsajn tempomarkojn, ni rimarkis, ke la tempomarkoj de SFX kaj OCX-dosieroj ĉiam estas la samaj (0x57B0C36A
(08/14/2016 @ 7:15 UTC) kaj 0x498BE80F
(02/06/2009 @ 7:34am UTC) respektive). Ĉi tio verŝajne indikas, ke la aŭtoroj havas ian "dezajniston", kiu uzas la samajn ŝablonojn kaj simple ŝanĝas iujn trajtojn.
Inter la dokumentoj, kiujn ni studis ekde la komenco de 2018, estas diversaj nomoj indikante la landojn de intereso por la atakantoj:
— La Nova Kontakta Informo De Cambodia Media(New).xls.exe
— 李建香 (个人简历).exe (falsa pdf-dokumento de CV)
— komentoj, Mitingo en Usono de la 28-29-a de julio 2018.exe
Ekde la malantaŭa pordo estis malkovrita {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
kaj la publikigo de ĝia analizo de pluraj esploristoj, ni observis iujn ŝanĝojn en la datumoj de agordo de malware.
Unue, la aŭtoroj komencis forigi nomojn de helpaj DLL-oj (DNSprov.dll
kaj du versioj HttpProv.dll
). La funkciigistoj tiam ĉesis enpaki la trian DLL (la dua versio HttpProv.dll
), elektante enigi nur unu.
Due, multaj malantaŭpordaj agordaj kampoj estis ŝanĝitaj, verŝajne eviti detekton ĉar multaj IoC-oj iĝis haveblaj. Gravaj kampoj modifitaj de la aŭtoroj inkluzivas:
- AppX-registra ŝlosilo ŝanĝita (vidu IoCs)
- mutex-kodiga ĉeno ("def", "abc", "ghi")
- havennumero
Fine, ĉiuj novaj versioj analizitaj havas novajn C&C-ojn listigitajn en la sekcio de IoCs.
trovoj
OceanLotus daŭre evoluas. La cibergrupo koncentriĝas pri rafinado kaj vastigado de la iloj kaj forlogaĵoj. Aŭtoroj maskas malicajn ŝarĝojn uzante atentokaptajn dokumentojn, kies temo rilatas al la celitaj viktimoj. Ili disvolvas novajn skemojn kaj ankaŭ uzas publike disponeblajn ilojn, kiel la ekspluato de Equation Editor. Krome, ili plibonigas ilojn por redukti la nombron da artefaktoj restantaj sur la maŝinoj de viktimoj, tiel reduktante la eblecon de detekto per antivirusa programaro.
Indikiloj de kompromiso
Indikiloj de kompromiso same kiel MITRE ATT&CK-atributoj estas haveblaj
fonto: www.habr.com