OceanLotus: uppdatering av skadlig kod för macOS

I mars 2019 laddades en ny prov av skadlig kod för macOS frÄn cyberspiongruppen OceanLotus upp till VirusTotal, en populÀr online-skanningstjÀnst. Den körbara filen för bakdörren har samma funktioner som den tidigare versionen av skadlig programvara för macOS som vi studerat, men dess struktur har Àndrats vilket gör den svÄrare att upptÀcka. TyvÀrr kunde vi inte hitta droppern kopplad till detta prov, sÄ vi vet Ànnu inte infektionsvektorn.

Nyligen publicerade vi ett inlÀgg om OceanLotus och hur operatörerna försöker sÀkerstÀlla persistens, snabba upp kodens exekvering och minimera spÄren av deras nÀrvaro i Windows-system. Det Àr ocksÄ kÀnt att denna cyberspiongrupp har ett komponent för macOS. Detta inlÀgg beskriver i detalj förÀndringarna i den senaste versionen av skadlig programvara för macOS jÀmfört med den tidigare versionen (beskriven av Trend Micro), och hur man kan automatisera avkodningen av strÀngar under analysen med hjÀlp av IDA Hex-Rays API.

OceanLotus: uppdatering av skadlig kod för macOS

Analys

I de följande tre delarna beskrivs analysen av ett prov med SHA-1-hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. Filen heter flashlightd, antivirusprodukter frÄn ESET kÀnner igen den som OSX/OceanLotus.D.

Anti-debugging och skydd mot sandlÄdor

Som alla macOS-binaryer av OceanLotus Ă€r provet packat med UPX, men de flesta verktyg för att identifiera packare kĂ€nner inte igen det som sĂ„dant. Troligtvis eftersom de mestadels innehĂ„ller en signatur som beror pĂ„ nĂ€rvaron av strĂ€ngen “UPX”, dessutom förekommer Mach-O-signaturer mer sĂ€llan och uppdateras inte sĂ„ ofta. Denna egenskap gör statisk upptĂ€ckning svĂ„r. Det Ă€r intressant att efter uppackning ligger ingĂ„ngspunkten i början av sektionen __cfstring i segmentet .TEXT. I den hĂ€r sektionen finns flagg-attribut, som visas i bilden nedan.

OceanLotus: uppdatering av skadlig kod för macOS
Bild 1. Attribut i MACH-O-sektionen __cfstring

Som visas i bild 2 gör placeringen av koden i sektionen __cfstring att lura vissa disassembleringsverktyg genom att visa koden som strÀngar.

OceanLotus: uppdatering av skadlig kod för macOS
Bild 2. Bakdörrens kod identifieras av IDA som data

Efter att ha körts skapar den körbara filen en trÄd som ett skydd mot debugging, vars enda syfte Àr att kontinuerligt kontrollera om en debugger finns. För detta försöker trÄden:

— Att avmontera eventuell debugger genom att kalla pĂ„ ptrace med PT_DENY_ATTACH som en parameter
— Kontrollerar om nĂ„gra speciella portar Ă€r öppna genom att kalla pĂ„ funktionen task_get_exception_ports
— Kontrollerar om en debugger Ă€r ansluten, som visas i bilden nedan, genom att kontrollera flaggan P_TRACED i den aktuella processen

OceanLotus: uppdatering av skadlig kod för macOS
Bild 3. Kontroll av debuggeranslutning via funktionen sysctl

Om vaktschemat upptÀcker att en debugger Àr nÀrvarande, anropas funktionen exit. Dessutom kontrollerar provet sedan miljön genom att köra tvÄ kommandon:

ioreg -l | grep -e "Manufacturer" och sysctl hw.model

Efter detta kontrollerar provet det returnerade vĂ€rdet mot en hĂ„rdkodad lista med strĂ€ngar av kĂ€nda virtualiseringssystem: acle, vmware, virtualbox eller parallels. Slutligen kontrollerar följande kommando om maskinen Ă€r en av följande "MBP", "MBA", "MB", "MM", "IM", "MP" och "XS". Dessa Ă€r systemmodellkoder, till exempel betyder "MBP" MacBook Pro, "MBA" – MacBook Air etc.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}'

Huvudkomplement

Trots att bakdörrskommandona inte har förÀndrats sedan Trend Micros undersökning, har vi observerat flera andra modifieringar. C&C-servrarna som anvÀnds i detta prov Àr ganska nya, skapade den 22.10.2018.

— daff.faybilodeau[.]com
— sarc.onteagleroad[.]com
— au.charlineopkesston[.]com

Resurs URL har Àndrats till /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Den första paketet som skickas till C&C-servern innehÄller mer information om vÀrdmaskinen, inklusive alla data som samlas in av kommandona frÄn tabellen nedan.

OceanLotus: uppdatering av skadlig kod för macOS

Utöver detta anvÀnder provet för nÀtverksfiltrering inte biblioteken libcurl, utan ett externt bibliotek. För att hitta det försöker bakdörren att dekryptera varje fil i den aktuella katalogen med AES-256-CBC med nyckeln gFjMXBgyXWULmVVVzyxy, kompletterat med nollor. Varje fil dekrypteras och sparas som /tmp/store, och ett försök att ladda den som ett bibliotek görs med hjÀlp av funktionen dlopen. NÀr dekrypteringsförsöket resulterar i ett framgÄngsrikt anrop dlopen, extraherar bakdörren de exporterade funktionerna Boriry och ChadylonV, som uppenbarligen ansvarar för nÀtverksinteraktion med servern. Vi har varken dropper eller andra filer frÄn det ursprungliga lÀget av provet, sÄ vi kan inte analysera detta bibliotek. Dessutom, eftersom komponenten Àr krypterad, kommer en YARA-regel baserad pÄ dessa strÀngar inte att matcha filen som hittas pÄ disken.

Som beskrivs i den ovan nÀmnda artikeln, skapas cliendIDDetta identifierare Àr en MD5-hash av returvÀrdet för ett av följande kommandon:

— ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
— ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
— ifconfig en0 | awk '/ether /{print $2}' (fĂ„ MAC-adressen)
— okĂ€nt kommando ("x1ex72x0a", som anvĂ€nds i tidigare exempel

Innan hashningen lĂ€ggs en symbol "0" eller "1" till returat vĂ€rde, för att indikera om det finns root-behörigheter. Denna clientID lagras i /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, om koden körs som root eller i ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML i alla andra fall. Filen Ă€r vanligtvis dolt med hjĂ€lp av funktionen _chflags, dess tidsstĂ€mpel Ă€ndras med kommandot touch –t med ett slumpmĂ€ssigt vĂ€rde.

Avkodning av strÀngar

Som i de tidigare versionerna Àr strÀngarna krypterade med AES-256-CBC (hexadecimalt nyckel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 kompletterad med nollor, och IV fylls med nollor) via funktionen CCCrypt. Nyckeln har Àndrats jÀmfört med tidigare versioner, men eftersom gruppen fortfarande anvÀnder samma algoritm för att kryptera strÀngarna, kan avkryptering automatiseras. Förutom detta inlÀgg slÀpper vi ett IDA-skript som anvÀnder API:et Hex-Rays för att avkryptera strÀngarna som finns i den binÀra filen. Detta skript kan hjÀlpa till med framtida analys av OceanLotus och studier av existerande prover som vi inte har kunnat erhÄlla. I grunden av skriptet finns en universell metod för att fÄ argumenten som skickas till funktionen. Dessutom letar det efter anvÀndningar av parametrarna. Metoden kan ÄteranvÀndas för att fÄ en lista över funktionens argument och sedan skicka det som en callback.

Genom att kÀnna till funktionsprototypen decrypt, hittar skriptet alla korsreferenser till denna funktion, alla argument, avkrypterar sedan data och placerar den ren text inuti kommentarerna vid korsreferensens adress. För att skriptet ska fungera korrekt mÄste en anpassad alfabet som anvÀnds av base64 avkodningsfunktionen vara installerad och en global variabel som innehÄller lÀngden pÄ nyckeln (i detta fall DWORD, se bild 4) mÄste definieras.

OceanLotus: uppdatering av skadlig kod för macOS
Bild 4. Definition av global variabel key_len

I fönstret Function kan du högerklicka pÄ avkodningsfunktionen och klicka pÄ "Extrahera och avkoda argumenten". Skriptet ska placera de avkodade raderna i kommentarerna, som visas pÄ bild 5.

OceanLotus: uppdatering av skadlig kod för macOS
Bild 5. Den avkodade texten placerad i kommentarerna

PÄ sÄ sÀtt placeras de avkodade raderna bekvÀmt tillsammans i IDA-fönstret xrefs för denna funktion, som visas pÄ bild 6.

OceanLotus: uppdatering av skadlig kod för macOS
Bild 6. Xrefs till funktionen f_decrypt

Den slutliga versionen av skriptet kan hittas pÄ Github-repository.

Utdata

Som redan nÀmnts förbÀttrar OceanLotus stÀndigt och uppdaterar sin verktygssats. Denna gÄng har cybersyndikatet förbÀttrat skadlig programvara för att arbeta med Mac-anvÀndare. Koden har inte förÀndrats mycket, men eftersom mÄnga Mac-anvÀndare ignorerar sÀkerhetsprodukter, Àr skyddet mot upptÀckten av skadlig programvara av sekundÀr betydelse.

ESETs produkter har redan detekterat denna fil vid tidpunkten för undersökningen. Eftersom det nÀtverksbibliotek som anvÀnds för C&C-kommunikation nu Àr krypterat pÄ disk, Àr den exakta nÀtverksprotokollen som angriparna anvÀnder för nÀrvarande okÀnd.

Indikatorer pÄ kompromiss

Indikatorer pÄ kompromettering samt MITRE ATT&CK-attribut Àr ocksÄ tillgÀngliga pÄ GitHub.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster