I det hÀr inlÀgget kommer vi att diskutera hur cybergruppen OceanLotus (APT32 och APT-C-00) nyligen anvÀnde ett av de offentligt tillgÀngliga angreppen för att , sÄrbarheter i minneskorruption i Microsoft Office, och hur gruppens skadliga programvara uppnÄr persistens pÄ komprometterade system utan att lÀmna spÄr. HÀrnÀst kommer vi att beskriva hur gruppen, sedan början av 2019, har anvÀnt sjÀlvuppackande arkiv för att köra kod.
OceanLotus specialiserar sig pÄ cyberspionage, med prioriterade mÄl i lÀnder i Sydostasien. Angriparna förfalskar dokument för att fÄnga potentiella offers uppmÀrksamhet i syfte att övertyga dem att utföra bakdörren, och arbetar Àven med att utveckla verktygslÄdan. Metoderna som anvÀnds för att skapa lockbete varierar mellan attacker, frÄn filer med "dubbla tillÀgg", sjÀlvuppackande arkiv, makroaktiverade dokument till kÀnda exploateringar.

AnvÀnda en exploit i Microsoft Equation Editor
I mitten av 2018 genomförde OceanLotus en kampanj med hjÀlp av sÄrbarheten CVE-2017-11882. Ett av cybergruppens skadliga dokument analyserades av specialister frÄn 360 Threat Intelligence Center (), inklusive en detaljerad beskrivning av exploiten. InlÀgget nedan ger en översikt över ett sÄdant skadligt dokument.
Det första steget
Dokumentet FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) liknar den som nĂ€mns i studien ovan. Det Ă€r intressant eftersom det riktar sig till anvĂ€ndare som Ă€r intresserade av kambodjansk politik (CNRP â Cambodia National Rescue Party, upplöst i slutet av 2017). Trots filĂ€ndelsen .doc Ă€r dokumentet i RTF-format (se bilden nedan), innehĂ„ller skrĂ€pkod och Ă€r dessutom skadat.

Figur 1. "SkrÀp" i RTF
Trots förekomsten av skadade element öppnar Word RTF-filen. Som du kan se i figur 2 finns det en EQNOLEFILEHDR-struktur vid offset 0xC00, följt av en MTEF-rubrik och sedan en MTEF-post (figur 3) för teckensnittet.

Figur 2. FONT-postvÀrden

Figur 3.
Det kan finnas ett överflöde i fÀltet namn, eftersom dess storlek inte kontrolleras före kopiering. Ett för lÄngt namn utlöser en sÄrbarhet. Som framgÄr av innehÄllet i RTF-filen (offset 0xC26 i figur 2) Àr bufferten fylld med shellcode följt av ett dummy-kommando (0x90) och returadress 0x402114. Adressen Àr ett dialogelement i EQNEDT32.exe, pekar pÄ instruktionen RET. Detta gör att EIP pekar pÄ början av fÀltet. namn, som innehÄller skalkod.

Figur 4. Start av exploit-shellkod
adress 0x45BD3C lagrar en variabel som avreferenseras tills den nÄr en pekare till den aktuellt laddade strukturen MTEFData. Resten av skalkoden finns hÀr.
Syftet med skalkoden Ă€r att exekvera det andra fragmentet av skalkoden som Ă€r inbĂ€ddad i det öppna dokumentet. Först försöker den ursprungliga skalkoden hitta filbeskrivningen för det öppna dokumentet genom att iterera igenom alla systembeskrivningar (NtQuerySystemInformation med ett argument SystemExtendedHandleInformation) och kontrollerar om de matchar PID deskriptor och PID bearbeta WinWord och om dokumentet öppnades med en Ă„tkomstmask â 0x12019F.
För att bekrĂ€fta att rĂ€tt referens har hittats (och inte referensen till ett annat öppet dokument) visas filinnehĂ„llet med hjĂ€lp av funktionen CreateFileMapping, och skalkoden kontrollerar om de fyra sista bytena i dokumentet matchar "yyyy" (Ăggjaktsmetod). NĂ€r en matchning hittas kopieras dokumentet till en tillfĂ€llig mapp (GetTempPath) Hur ole.dll. Sedan lĂ€ses de sista 12 byten av dokumentet.
![]()
Figur 5. Markörer för dokumentslut
32-bitarsvĂ€rde mellan markörer AABBCCDD Đž yyyy â detta Ă€r offseten för nĂ€sta skalkod. Det kallas med hjĂ€lp av funktionen CreateThread. Samma skalkod som tidigare anvĂ€ndes av OceanLotus-gruppen extraherades. , som vi slĂ€ppte i mars 2018, fungerar fortfarande för andra stegets dumpning.
Det andra steget
Extrahera komponenter
Fil- och katalognamn vÀljs dynamiskt. Koden vÀljer slumpmÀssigt namnet pÄ en körbar fil eller DLL-fil i C:Windowssystem32. Den gör sedan en begÀran till sina resurser och hÀmtar fÀltet FileDescription att anvÀnda som mappnamn. Om detta inte fungerar vÀljer koden slumpmÀssigt ett mappnamn frÄn katalogerna. %ProgramFiles% eller C:Windows (frÄn GetWindowsDirectoryW). Den undviker att anvÀnda ett namn som kan komma i konflikt med befintliga filer och sÀkerstÀller att det inte innehÄller följande ord: windows, Microsoft, desktop, system, system32 eller syswow64. Om katalogen redan finns lÀggs "NLS_{6 tecken}" till namnet.
resurs 0x102 analyseras och filer dumpas till %ProgramFiles% eller %AppData%, till en slumpmÀssigt vald mapp. Skapandetiden Àndrades för att ha samma vÀrden som kernel32.dll.
Till exempel, hÀr Àr en mapp och en lista över filer som skapats genom att vÀlja den körbara filen C:Windowssystem32TCPSVCS.exe som en datakÀlla.

Figur 6. Extraktion av olika komponenter
Resursstruktur 0x102 i droppern Àr ganska komplicerat. I ett nötskal innehÄller den:
â Filnamn
â Filstorlek och innehĂ„ll
â Komprimeringsformat (COMPRESSION_FORMAT_LZNT1, som anvĂ€nds av funktionen RtlDecompressBuffer)
Den första filen dumpas som TCPSVCS.exe, vilket Àr legitimt AcroTranscoder.exe (enligt FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).
Du kanske har mĂ€rkt att vissa DLL-filer Ă€r större Ă€n 11 ââMB. Detta beror pĂ„ att en stor sammanhĂ€ngande buffert av slumpmĂ€ssig data placeras inuti den körbara filen. Det Ă€r möjligt att detta Ă€r ett sĂ€tt att undvika upptĂ€ckt av vissa sĂ€kerhetsprodukter.
SÀkerstÀlla uthÄllighet
resurs 0x101 Droppern innehÄller tvÄ 32-bitars heltal som anger hur persistens ska tillhandahÄllas. Det första vÀrdet anger hur skadlig kod kommer att bibehÄlla sin bestÀndighet utan administratörsrÀttigheter.

Tabell 1. Persistensmekanism utan administratörsrÀttigheter
VÀrdet pÄ det andra heltalet anger hur skadlig kod ska sÀkerstÀlla bestÀndighet nÀr den körs med administratörsbehörighet.

Tabell 2. Persistensmekanism med administratörsrÀttigheter
TjĂ€nstnamnet Ă€r filnamnet utan tillĂ€gget; visningsnamn Ă€r mappnamnet, men om det redan finns lĂ€ggs strĂ€ngen " till detRevision 1â (numret ökas tills ett oanvĂ€nt namn hittas). Operatörerna har sĂ€kerstĂ€llt att persistensen genom tjĂ€nsten Ă€r robust â om tjĂ€nsten misslyckas bör den startas om efter 1 sekund. Sedan vĂ€rdet WOW64 Den nya registernyckeln för tjĂ€nsten Ă€r instĂ€lld pĂ„ 4, vilket indikerar att det Ă€r en 32-bitars tjĂ€nst.
En schemalagd uppgift skapas via flera COM-grÀnssnitt: ITaskScheduler, ITask, ITaskTrigger, IPersistFile О ITaskScheduler. I grund och botten skapar skadlig programvara en dold uppgift, stÀller in kontoinformationen tillsammans med den aktuella anvÀndar- eller administratörsinformationen och stÀller sedan in utlösaren.
Detta Àr en daglig uppgift med en varaktighet pÄ 24 timmar och intervall mellan tvÄ körningar pÄ 10 minuter, vilket innebÀr att den kommer att köras kontinuerligt.
Skadlig bit
I vÄrt exempel, den körbara filen TCPSVCS.exe (AcroTranscoder.exe) Àr legitim programvara som laddar DLL-filer som slÀpps tillsammans med den. I det hÀr fallet Àr det som Àr av intresse Flash Video Extension.dll.
Dess funktion DLLMain anropar bara en annan funktion. Det finns nÄgra fuzzy predikat:

Figur 7. Fuzzy-predikat
Efter dessa vilseledande kontroller fÄr koden ett avsnitt .text fil TCPSVCS.exe, Àndrar sitt försvar till PAGE_EXECUTE_READWRITE och skriver över den genom att lÀgga till dummy-instruktioner:

Figur 8. Instruktionssekvens
I slutet av funktionsadressen FLVCore::Uninitialize(void), exporterad Flash Video Extension.dll, instruktioner har lagts till CALL. Det hĂ€r betyder att efter att en skadlig DLL har laddats, nĂ€r körtidsanropen intrĂ€ffar WinMain ĐČ TCPSVCS.exe, kommer instruktionspekaren att peka pĂ„ en NOP, vilket resulterar i en FLVCore::Uninitialize(void), nĂ€sta steg.
Funktionen skapar helt enkelt en mutex som börjar med {181C8480-A975-411C-AB0A-630DB8B0A221}, följt av det nuvarande anvÀndarnamnet. Den lÀser sedan den dumpade *.db3-filen, som innehÄller positionsoberoende kod, och anvÀnder CreateThread att genomföra innehÄllet.
InnehÄllet i *.db3-filen Àr shellcode, vilket vanligtvis anvÀnds av OceanLotus-gruppen. Vi har lyckats packa upp dess nyttolast igen med hjÀlp av emulatorskriptet vi publicerade. .
Skriptet extraherar det sista steget. Denna komponent Àr en bakdörr som vi redan har analyserat i . Detta kan avgöras av GUID:t. {A96B020F-0000-466F-A96D-A91BBF8EAC96} binÀr fil. Konfigurationen av skadlig kod Àr fortfarande krypterad i PE-resursen. Den har ungefÀr samma konfiguration, men C&C-servrarna skiljer sig frÄn de tidigare:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
OceanLotus-gruppen visar Äterigen en kombination av olika tekniker för att undvika upptÀckt. De ÄtervÀnde med ett "reviderat" diagram över infektionsprocessen. Genom att vÀlja slumpmÀssiga namn och fylla körbara filer med slumpmÀssig data minskar de antalet pÄlitliga IoC:er (baserat pÄ hashkoder och filnamn). Dessutom, genom att anvÀnda DLL-inlÀsning frÄn tredje part behöver angripare bara radera den legitima binÀrfilen. AcroTranscoder.
SjÀlvutpackande arkiv
Efter RTF-filer gick gruppen över till sjÀlvuppackande (SFX) arkiv med vanliga dokumentikoner för att ytterligare förvirra anvÀndaren. Threatbook skrev om detta (). NÀr den vÀl startats slÀpper den sjÀlvuppackande RAR-filer och kör DLL-filer med .ocx-tillÀgget, vars slutliga nyttolast tidigare dokumenterats. {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Sedan mitten av januari 2019 har OceanLotus ÄteranvÀnt den hÀr tekniken, men Àndrat vissa konfigurationer över tid. I det hÀr avsnittet kommer vi att prata om tekniken och förÀndringar.
Att skapa ett bete
Dokumentet THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) upptĂ€cktes först 2018. Denna SFX-fil skapas med intelligens â i beskrivningen (Information om versionen) det stĂ„r att det hĂ€r Ă€r en JPEG-bild. SFX-skriptet ser ut sĂ„ hĂ€r:

Figur 9. SFX-kommandon
Ă
terstÀller skadlig programvara {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), samt en bild 2018 thich thong lac.jpg.
Bilden pÄ lockbeteet ser ut sÄ hÀr:

Figur 10. Bild av lockbetsdjur
Du kanske har mÀrkt att de tvÄ första raderna i SFX-skriptet anropar OCX-filen tvÄ gÄnger, men det Àr inte en bugg.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
Kontrollflödet för en OCX-fil Àr mycket likt andra OceanLotus-komponenter - mÄnga kommandosekvenser JZ/JNZ О PUSH/RET, alternerande med skrÀppostkod.

Figur 11. Obfuskerad kod
Efter att ha filtrerat bort skrÀpkod, exportera DllRegisterServer, kallad regsvr32.exe, som följer:

Figur 12. Huvudinstallatörskod
I princip, vid första samtalet DllRegisterServer export sets registervÀrde HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model för krypterad offset i DLL (0x10001DE0).
NÀr funktionen anropas en andra gÄng lÀser den samma vÀrde och körs pÄ den adressen. HÀrifrÄn lÀses och exekveras resursen och mÄnga ÄtgÀrder utförs i RAM-minnet.
Shellcode Àr samma PE-laddare som anvÀndes i tidigare OceanLotus-kampanjer. Den kan emuleras med hjÀlp av . Till slut tappar han den db293b825dcc419ba7dc2c49fa2757ee.dll, laddar den i minnet och kör den DllEntry.
DLL-filen extraherar innehÄllet i sin resurs, dekrypterar (AES-256-CBC) och packar upp (LZMA) den. Resursen har ett specifikt format som enkelt kan dekompileras.

Figur 13. Installationsprogrammets konfigurationsstruktur (KaitaiStruct Visualizer)
Konfigurationen stÀlls in explicit - beroende pÄ behörighetsnivÄn kommer binÀr data att skrivas till %appdata%IntellogsBackgroundUploadTask.cpl eller %windir%System32BackgroundUploadTask.cpl (eller SysWOW64 för 64-bitarssystem).
DÀrefter sÀkerstÀlls persistens genom att skapa en uppgift med namnet BackgroundUploadTask[junk].jobvar [junk] Àr en uppsÀttning byte 0x9D О 0xA0.
Namn pÄ uppgiftsapplikation %windir%System32control.exe, och parametervÀrdet Àr sökvÀgen till den nedladdade binÀrfilen. Den dolda uppgiften körs varje dag.
Strukturellt sett Àr en CPL-fil en DLL med ett internt namn ac8e06de0a6c4483af9837d96504127e.dll, vilket exporterar funktionen CPlApplet. Den hÀr filen dekrypterar dess enda resurs {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, laddar sedan den DLL-filen och anropar dess enda exportfil DllEntry.
Bakdörrskonfigurationsfil
Bakdörrskonfigurationen Àr krypterad och inbÀddad i dess resurser. Konfigurationsfilens struktur Àr mycket lik den föregÄende.

Figur 14. Konfigurationsstruktur för bakdörr (KaitaiStruct Visualizer)
Trots den liknande strukturen har vÀrdena för mÄnga fÀlt uppdaterats jÀmfört med de uppgifter som anges i .
Det första elementet i den binÀra arrayen innehÄller DLL-filen (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), . Men eftersom exportnamnet togs bort frÄn binÀrfilen matchar inte hasherna.
Ytterligare forskning
NÀr vi samlade in prover lade vi mÀrke till vissa egenskaper. Det exemplar som just beskrivits dök upp runt juli 2018, och andra liknande dök upp mer nyligen, i mitten av januari till början av februari 2019. Infektionsvektorn som anvÀndes var ett SFX-arkiv som slÀppte ett legitimt lockbetedokument och en skadlig OCX-fil.
Ăven om OceanLotus anvĂ€nder falska tidsstĂ€mplar, mĂ€rkte vi att tidsstĂ€mplarna för SFX- och OCX-filer alltid Ă€r desamma (0x57B0C36A (08-14-2016 @ 7:15 UTC) och 0x498BE80F (02/06/2009 @ 7:34 UTC) respektive). Detta tyder förmodligen pĂ„ att författarna har nĂ„gon sorts "konstruktor" som anvĂ€nder samma mallar och helt enkelt Ă€ndrar vissa egenskaper.
Bland de dokument vi har granskat sedan början av 2018 finns olika namn som anger de lÀnder som Àr av intresse för angriparna:
â Den nya kontaktinformationen för Cambodia Media (ny).xls.exe
â æć»șéŠ (äžȘäșșçźć).exe (falsk pdf-dokument av ett CV)
â feedback, Rally i USA frĂ„n 28-29 juli 2018.exe
Sedan bakdörren upptÀcktes {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll och publiceringen av dess analys av flera forskare, observerade vi vissa förÀndringar i konfigurationsdata för skadlig kod.
Först började författarna ta bort namn frÄn hjÀlp-DLL:er (DNSprov.dll och tvÄ versioner HttpProv.dll). Sedan slutade operatörerna paketera den tredje DLL-filen (den andra versionen) HttpProv.dll), genom att vÀlja att bara bÀdda in en.
För det andra modifierades mÄnga av bakdörrens konfigurationsfÀlt, troligen för att undvika upptÀckt eftersom mÄnga IoC:er blev tillgÀngliga. NÄgra av de viktiga omrÄden som författarna Àndrat inkluderar:
- AppX-registernyckeln har Àndrats (se IoC:er)
- mutex-kodningsstrÀng ('def', 'abc', 'ghi')
- portnummer
Slutligen introducerade alla nya versioner som analyserades nya C&C:er som listas i avsnittet IoC:er.
Resultat
OceanLotus fortsÀtter att utvecklas. Cybergruppen fokuserar pÄ att förfina och utöka sina verktyg och lockbeten. Författarna döljer skadliga nyttolaster med hjÀlp av iögonfallande dokument som Àr relevanta för de avsedda offren. De utvecklar nya scheman och anvÀnder Àven allmÀnt tillgÀngliga verktyg, som till exempel Equation Editor-exploiten. Dessutom förbÀttrar de verktygen för att minska mÀngden artefakter som finns kvar pÄ offrens maskiner, vilket minskar risken för upptÀckt av antivirusprogram.
Indikatorer pÄ kompromiss
Indikatorer för kompromiss och MITRE ATT&CK-attribut Àr tillgÀngliga О .
KĂ€lla: will.com
