I det hÀr inlÀgget kommer vi att berÀtta hur cybergruppen OceanLotus (APT32 och APT-C-00) nyligen utnyttjade en av de offentligt tillgÀngliga exploits till , en minneskorruptionssÄrbarhet i Microsoft Office, och hur gruppens skadlig programvara sÀkerstÀller persistens i komprometterade system utan att lÀmna spÄr. Vi kommer ocksÄ att beskriva hur gruppen sedan början av 2019 har anvÀnt sjÀlvutpackerande arkiv för att köra kod.
OceanLotus specialiserar sig pĂ„ cyberspionage, med prioriterade mĂ„l i Sydostasien. Angriparna förfalskar dokument som fĂ„ngar intresset hos potentiella offer för att övertyga dem att köra en bakdörr, och arbetar ocksĂ„ med att utveckla verktyg. Metoderna som anvĂ€nds för att skapa fĂ€llor varierar i olika attacker â frĂ„n filer med "dubbel filĂ€ndelse", sjĂ€lvutpackerande arkiv, dokument med makron till kĂ€nda exploits.

Utnyttjande av exploit i Microsoft Equation Editor
I mitten av 2018 genomförde OceanLotus en kampanj som anvÀnde sÄrbarheten CVE-2017-11882. Ett av terroristgruppens skadliga dokument analyserades av experter frÄn 360 Threat Intelligence Center (), vilket inkluderar en detaljerad beskrivning av exploiten. I inlÀgget nedan finns en översikt av ett liknande skadligt dokument.
Första steget
Dokument FW Report on demonstration of former CNRP in Republic of Korea.doc (SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3) Ă€r liknande det som nĂ€mnts i ovanstĂ„ende studie. Det Ă€r intressant eftersom det riktar sig till anvĂ€ndare som Ă€r intresserade av kambodjansk politik (CNRP â Kambodjas nationella rĂ€ddningsparti, som upplöstes i slutet av 2017). Trots att det har filĂ€ndelsen .doc har dokumentet RTF-format (se bild nedan), innehĂ„ller skrĂ€pkod samt Ă€r förvrĂ€ngt.

Bild 1. "SkrÀp" i RTF
Trots nÀrvaron av förvrÀngda element öppnar Word den hÀr RTF-filen framgÄngsrikt. Som framgÄr av bild 2 finns strukturen EQNOLEFILEHDR med en offset pÄ 0xC00, följt av en MTEF-header och sedan en MTEF-post (bild 3) för typsnittet.

Bild 2. VÀrden för FONT-posten

Bild 3.
Möjlig överflödning i fÀltet name, eftersom dess storlek inte kontrolleras innan kopiering. Ett för lÄngt namn aktiverar sÄrbarheten. Som framgÄr av innehÄllet i RTF-filen (offset 0xC26 i bild 2) fylls bufferten med shellkod, följt av en falsk kommando (0x90) och returadress 0x402114. Adressen Àr en dialogkomponent i EQNEDT32.exe, som anger instruktionen RET. Det resulterar i att EIP pekar pÄ början av fÀltet name, som innehÄller shell-kod.

Bild 4. Början av shell-koden för exploit
Adress 0x45BD3C lagrar en variabel som avderefereras tills den nÄr pekaren till den aktuella laddade strukturen MTEFData. HÀr finns den ÄterstÄende delen av shell-koden.
Syftet med shell-koden Ă€r att exekvera det andra fragmentet av shell-koden som Ă€r inbĂ€ddat i det öppna dokumentet. Först försöker den ursprungliga shell-koden att hitta handtaget till den öppna dokumentfilen genom att iterera över alla handtag i systemet (NtQuerySystemInformation med argumentet SystemExtendedHandleInformation) och kontrollerar om PID handtaget och PID processen WinWord och om dokumentet öppnades med Ă„tkomstmasken â 0x12019F.
För att bekrĂ€fta att rĂ€tt handtag har hittats (och inte ett handtag för ett annat öppet dokument) visas filens innehĂ„ll med hjĂ€lp av funktionen CreateFileMapping, och shell-koden kontrollerar om de senaste fyra byte av dokumentet matchar "yyyy" (metod för Ăggjakt). SĂ„ snart en överenskommelse upptĂ€ckts kopieras dokumentet till en temporĂ€r mapp (GetTempPath) som ole.dll. DĂ„ lĂ€ses de sista 12 byte av dokumentet.
![]()
Bild 5. Slutmarkörer för dokumentet
32-bitars vĂ€rde mellan markörerna AABBCCDD och yyyy â detta Ă€r förskjutningen för nĂ€sta shell-kod. Den kallas med hjĂ€lp av funktionen CreateThread. Den samma shell-kod som anvĂ€ndes av OceanLotus-gruppen tidigare har extraherats. , som vi slĂ€ppte i mars 2018, fungerar fortfarande för dumpning av andra steget.
Andra steget
Extrahera komponenter
Filnamn och kataloger vÀljs dynamiskt. Koden vÀljer slumpmÀssigt ett namn för exekverbart eller DLL-fil i C:Windowssystem32. Den gör sedan en begÀran till sina resurser och extraherar fÀltet FileDescription för att anvÀndas som mappnamn. Om detta misslyckas vÀljer koden slumpmÀssigt ett mappnamn frÄn katalogerna %ProgramFiles% eller C:Windows (frÄn GetWindowsDirectoryW). Den undviker att anvÀnda namn som kan krocka med existerande filer och ser till 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%, i en slumpmÀssigt vald mapp. Skapelsedatumet Àndras för att ha samma vÀrden som kernel32.dll.
Till exempel, hÀr Àr en mapp och en lista med filer som skapats genom att vÀlja körbara filen C:Windowssystem32TCPSVCS.exe som datakÀlla.

Figur 6. Utdragning av olika komponenter
Resursstrukturen 0x102 i dropparen Àr ganska komplex. Kort sagt innehÄller den:
â Filnamn
â Storlek och innehĂ„ll i filer
â Komprimeringsformat (COMPRESSION_FORMAT_LZNT1, som anvĂ€nds av funktionen RtlDecompressBuffer)
Den första filen dumpas som TCPSVCS.exe, som Àr legitimt AcroTranscoder.exe (enligt FileDescription, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3).
Du kanske har mÀrkt att storleken pÄ vissa DLL-filer överstiger 11 MB. Detta beror pÄ att en stor sammanhÀngande buffert av slumpmÀssiga data placeras inuti den körbara filen. Det Àr möjligt att detta Àr ett sÀtt att undvika upptÀckten av vissa sÀkerhetsprodukter.
SÀkerstÀlla persistens
Resurs 0x101 i dropparen innehÄller tvÄ 32-bitars heltal som anger hur persistens ska sÀkerstÀllas. Det första vÀrdet anger hur skadlig programvara kommer att upprÀtthÄlla persistens utan administratörsrÀttigheter.

Tabell 1. Persistensmekanism utan administratörsrÀttigheter
Det andra heltalets vÀrde anger hur skadlig programvara ska sÀkerstÀlla persistens nÀr den arbetar med administratörsrÀttigheter.

Tabell 2. Persistensmekanism med administratörsrÀttigheter
TjĂ€nstens namn Ă€r filnamnet utan filtillĂ€gg; det visade namnet Ă€r mappens namn, men om det redan finns lĂ€ggs en strĂ€ng till âRevision 1â (siffran ökar tills ett oanvĂ€nt namn hittas). Operatörerna ser till att persistens via tjĂ€nsten Ă€r stabil â vid ett misslyckande ska tjĂ€nsten startas om inom 1 sekund. DĂ„ tilldelas vĂ€rdet WOW64 för den nya tjĂ€nstens registernyckel vĂ€rdet 4, vilket indikerar att det Ă€r en 32-bitars tjĂ€nst.
Ett schemalagt jobb skapas via flera COM-grÀnssnitt: ITaskScheduler, ITask, ITaskTrigger, IPersistFile och ITaskScheduler. I grund och botten skapar den skadliga programvaran en dold uppgift, stÀller in kontoinformation tillsammans med information om den nuvarande anvÀndaren eller administratören och sÀtter sedan en trigger.
Detta Àr en daglig uppgift med en varaktighet pÄ 24 timmar och mellanrum mellan tvÄ körningar pÄ 10 minuter, vilket innebÀr att den kommer att köras kontinuerligt.
Skadlig bit
I vÄrt exempel Àr den exekverbara filen TCPSVCS.exe (AcroTranscoder.exe) legitim mjukvara som laddar DLL-filer som ÄterstÀlls tillsammans med den. I det hÀr fallet Àr intresset riktat mot Flash Video Extension.dll.
Dess funktion DLLMain anropar helt enkelt en annan funktion. Det finns vissa otydliga predikat:

Figur 7. Otydliga predikat
Efter dessa vilseledande kontroller fÄr koden sektionen .text filen TCPSVCS.exe, Àndrar dess skydd till PAGE_EXECUTE_READWRITE och skriver över det med falska instruktioner:

Figur 8. Instruktionssekvens
I slutet lÀggs en instruktion till adressen för funktionen FLVCore::Uninitialize(void), som exporteras Flash Video Extension.dll, CALL. Detta innebÀr att efter att den skadliga DLL-filen laddats, nÀr köromrÄdet anropar WinMain pÄ TCPSVCS.exe, pekaren till instruktionen kommer att rikta sig mot NOP, vilket i sin tur anropar 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 aktuella anvÀndarnamnet. Sedan lÀser den den ÄterstÀllda filen med filÀndelsen *.db3 som innehÄller positionsoberoende kod, och anvÀnder CreateThread för att köra innehÄllet.
InnehÄllet i filen *.db3 Àr shellkod som ofta anvÀnds av OceanLotus-gruppen. Vi har Äterigen framgÄngsrikt packat upp dess nyttolast med hjÀlp av en emulator-skript som vi publicerat .
Skriptet extraherar det slutliga steget. Denna komponent Àr en bakdörr som vi redan har analyserat i . Detta kan identifieras genom GUID {A96B020F-0000-466F-A96D-A91BBF8EAC96} av den binÀra filen. Konfigurationen av skadlig programvara À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Àckten. De har Äterkommit med en "förbÀttrad" infektionprocess. Genom att vÀlja slumpmÀssiga namn och fylla exekverbara filer med slumpmÀssiga data minskar de antalet pÄlitliga IoC (baserat pÄ hashvÀrden och filnamn). Dessutom, genom att anvÀnda en tredjeparts DLL-laddare, behöver angriparna bara ta bort den legitima binÀren AcroTranscoder.
SjÀlvppackande arkiv
Efter RTF-filer gick gruppen över till sjÀlvpackande (SFX) arkiv med vanliga dokumentikoner för att förvirra anvÀndaren Ànnu mer. Detta rapporterades av Threatbook (). Efter uppstart raderas sjÀlvextraherande RAR-filer och DLL-filer med .ocx-tillÀgg körs, dÀr den slutliga payloaden tidigare dokumenterades {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll. Sedan mitten av januari 2019 har OceanLotus ÄteranvÀnt denna teknik, men förÀndrat vissa konfigurationer över tid. I detta avsnitt kommer vi att beskriva tekniken och Àndringarna.
Skapande av en fÀlla
Dokument THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE (SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB) upptĂ€cktes för första gĂ„ngen 2018. Denna SFX-fil Ă€r skapad med omsorg â i beskrivningen (Version Info) anges att detta Ă€r en JPEG-bild. SFX-skriptet ser ut som följande:

Bild 9. SFX-kommandon
Malware raderar {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC), samt bilden 2018 thich thong lac.jpg.
FÀllan ser ut som följer:

Bild 10. FĂ€llan
Du har kanske mÀrkt att de första tvÄ raderna i SFX-skriptet anropar OCX-filen tvÄ gÄnger, men det Àr ingen bugg.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
Kontrollflödet i OCX-filen liknar andra OceanLotus-komponenter â mĂ„nga kommandosekvenser JZ/JNZ och PUSH/RET, alternerande med skrĂ€pkod.

Bild 11. Obfuskerad kod
Efter filtrering av skrÀpkoden exporterar DllRegisterServer, som anropas regsvr32.exe, ser ut som följande:

Bild 12. Huvudkod för distributören
I grund och botten stÀller den första anropningen DllRegisterServer exporten vÀrdet i registreringsdatabasen HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model till det krypterade offsetet i DLL (0x10001DE0).
NÀr funktionen anropas för andra gÄngen lÀser den samma vÀrde och körs vid den adressen. HÀrifrÄn lÀses och körs resursen och mÄnga ÄtgÀrder sker i minnet.
Shellkoden Àr samma PE-laddare som anvÀndes i tidigare OceanLotus-kampanjer. Den kan emuleras med hjÀlp av . Resultatet Àr att den raderar db293b825dcc419ba7dc2c49fa2757ee.dll, laddar den i minnet och kör DllEntry.
DLL:n extraherar innehÄllet i sin resurs, dekrypterar (AES-256-CBC) och packar upp (LZMA) det. Resursen har ett specifikt format som Àr lÀtt att dekom pilera.

Bild 13. Struktur för distributörens konfiguration (KaitaiStruct Visualizer)
Konfigurationen anges uttryckligen â beroende pĂ„ privilegienivĂ„n kommer binĂ€rdata att skrivas till %appdata%IntellogsBackgroundUploadTask.cpl eller %windir%System32BackgroundUploadTask.cpl (eller SysWOW64 för 64-bitars system).
NÀsta, sÀkerstÀlls persistensen genom att skapa en uppgift med namnet BackgroundUploadTask[junk].job, dÀr [junk] Àr en uppsÀttning av byte 0x9D och 0xA0.
Uppgiftsappens namn %windir%System32control.exe, och parametervÀrdet Àr sökvÀgen till den laddade binÀra filen. Den dolda uppgiften körs varje dag.
Konstruktionen av CPL-filen Àr i grunden en DLL med det interna namnet ac8e06de0a6c4483af9837d96504127e.dll, som exporterar funktionen CPlApplet. Denna fil avkodar sin enda resurs {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll, laddar sedan denna DLL och anropar dess enda export DllEntry.
Konfigurationsfilen för backdoor
Backdoor-konfigurationen Àr krypterad och inbÀddad i dess resurser. Strukturen av konfigurationsfilen liknar mycket den tidigare.

Figur 14. Strukturen av backdoor-konfigurationen (KaitaiStruct Visualizer)
Trots den liknande strukturen har mÄnga av fÀlten uppdaterats jÀmfört med data som presenteras i .
Det första elementet i det binÀra arrayet innehÄller DLL (HttpProv.dll MD5: 2559738D1BD4A999126F900C7357B759), . Men eftersom exportnamnet har tagits bort frÄn den binÀra filen matchar inte hasharna.
Ytterligare forskning
Vid insamlingen av prover har vi lagt mÀrke till vissa egenskaper. Det nybeskrivna provet dök upp runt juli 2018, medan andra liknande dök upp nyligen, i mitten av januari till början av februari 2019. Infektionsvektorn var en SFX-arkiv som slÀppte ett legitimt speldokument och en skadlig OS-fil.
Trots att OceanLotus anvÀnder falska tidsstÀmplar, har vi noterat att tidsstÀmplarna för SFX- och OCX-filer alltid Àr desamma (0x57B0C36A (08/14/2016 @ 7:15pm UTC) och 0x498BE80F (02/06/2009 @ 7:34am UTC) respektive). Det tyder troligen pÄ att författarna har nÄgon form av "byggare" som anvÀnder samma mallar och bara Àndrar nÄgra egenskaper.
Bland dokumenten som vi har granskat sedan början av 2018 dyker det upp olika namn som pekar pÄ intressanta lÀnder för angriparna:
â The New Contact Information Of Cambodia Media(New).xls.exe
â æć»șéŠ (äžȘäșșçźć).exe (falskt pdf-dokument av ett CV)
â feedback, Rally i USA frĂ„n 28-29 juli 2018.exe
Sedan upptÀckten av backdoor {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll och publiceringen av dess analys av flera forskare har vi observerat vissa förÀndringar i konfigurationsdata för skadlig programvara.
För det första började författarna att ta bort namn frÄn hjÀlpbiblioteken DLL (DNSprov.dll och tvÄ versioner HttpProv.dll). Sedan slutade operatörerna att paketera den tredje DLL:en (den andra versionen HttpProv.dll), valde att bara integrera en.
För det andra har mÄnga fÀlt i bakdörrens konfiguration Àndrats, troligen för att undvika upptÀckter, eftersom mÄnga IoCs har blivit tillgÀngliga. Bland de viktiga fÀlt som har Àndrats av författarna Àr följande:
- den Àndrade AppX-registeravsnittet (se IoCs)
- strÀng för mutexkodning ("def", "abc", "ghi")
- portnummer
Slutligen har nya C&C servrar dykt upp i alla nya analyserade versioner, som listas i avsnittet IoCs.
Slutsatser
OceanLotus fortsÀtter att utvecklas. Cybergruppen fokuserar pÄ att förbÀttra och utöka sin verktygslÄda och agn. Författarna maskerar skadlig programvara med hjÀlp av uppseendevÀckande dokument vars Àmnen Àr relevanta för de avsedda offren. De utvecklar nya scheman och anvÀnder offentligt tillgÀngliga verktyg, till exempel exploit för Equation Editor. Dessutom förbÀttrar de sina verktyg för att minska mÀngden artefakter som lÀmnas pÄ offrens maskiner, vilket dÀrmed minskar chansen att upptÀckas av antivirusprogram.
Indikatorer pÄ kompromiss
Indikatorer pÄ kompromiss, samt MITRE ATT&CK-attribut, Àr tillgÀngliga och .
KĂ€lla: habr.com
