OceanLotus: skadlig programvara för macOS

I mars 2019 laddades ett nytt prov av macOS-skadlig programvara från cybergruppen OceanLotus upp till VirusTotal, en populär skanningstjänst online. Den körbara bakdörrsfilen har samma möjligheter som den tidigare versionen av macOS skadlig programvara som vi studerade, men dess struktur har förändrats och det har blivit svårare att upptäcka. Tyvärr kunde vi inte hitta en droppare associerad med detta prov, så vi känner ännu inte till infektionsvektorn.

Vi publicerade nyligen inlägg om OceanLotus och hur operatörer försöker ge uthållighet, påskynda kodexekveringen och minimera fotavtryck på Windows-system. Det är också känt att denna cybergrupp också har en komponent för macOS. Det här inlägget beskriver ändringarna i den senaste versionen av skadlig programvara för macOS i jämförelse med den tidigare versionen (beskrivs av Trend Micro), och beskriver också hur du kan automatisera dekrypteringen av strängar under analys med hjälp av IDA Hex-Rays API.

OceanLotus: skadlig programvara för macOS

Analys

De följande tre delarna beskriver analysen av ett prov med en SHA-1-hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. Filen kallas ficklampa, ESETs antivirusprodukter upptäcker det som OSX/OceanLotus.D.

Anti-debugging och sandlådeskydd

Som alla macOS OceanLotus-binärfiler är provet paketerat med UPX, men de flesta verktyg för paketerares identifiering känner inte igen det som sådant. Detta beror förmodligen på att de mestadels innehåller en signatur beroende på närvaron av "UPX"-strängen, dessutom är Mach-O-signaturer mindre vanliga och uppdateras inte lika ofta. Denna funktion gör statisk detektering svår. Intressant nog, efter uppackning är ingångspunkten i början av avsnittet __cfstring i segmentet .TEXT. Det här avsnittet har flaggattribut som visas i bilden nedan.

OceanLotus: skadlig programvara för macOS
Figur 1. MACH-O __cfstring sektionsattribut

Som visas i figur 2, kodplatserna i avsnittet __cfstring låter dig lura några demonteringsverktyg genom att visa kod som strängar.

OceanLotus: skadlig programvara för macOS
Figur 2. Bakdörrskod upptäckt av IDA som data

När den väl har körts skapar binären en tråd som en anti-debugger vars enda syfte är att kontinuerligt kontrollera förekomsten av en debugger. För detta flöde:

— Försöker koppla ur valfri debugger, ringer ptrace с PT_DENY_ATTACH som en begäran parameter
- Kontrollerar om några exklusiva portar är öppna genom att anropa en funktion task_get_exception_ports
- Kontrollerar om debuggern är ansluten, som visas i figuren nedan, genom att kontrollera närvaron av flaggan P_TRACED i den pågående processen

OceanLotus: skadlig programvara för macOS
Figur 3. Kontrollera felsökningsanslutningen med sysctl-funktionen

Om vakthunden upptäcker närvaron av en debugger anropas funktionen exit. Dessutom kontrollerar provet sedan miljön genom att köra två kommandon:

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

Provet kontrollerar sedan returvärdet mot en hårdkodad lista med strängar från kända virtualiseringssystem: acle, vmware, virtualbox eller paralleller. Slutligen kontrollerar nästa 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" betyder MacBook Air, etc.

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

Grundläggande tillägg

Även om bakdörrskommandona inte har ändrats sedan Trend Micros forskning, märkte vi några andra ändringar. C&C-servrarna som används i detta exempel är ganska nya och skapades den 22.10.2018/XNUMX/XNUMX.

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

Resursens URL har ändrats till /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Det första paketet som skickas till C&C-servern innehåller mer information om värddatorn, inklusive all data som samlas in av kommandona i tabellen nedan.

OceanLotus: skadlig programvara för macOS

Utöver denna konfigurationsändring använder inte provet något bibliotek för nätverksfiltrering libcurl, men ett externt bibliotek. För att hitta den försöker bakdörren dekryptera varje fil i den aktuella katalogen med hjälp av AES-256-CBC med nyckeln gFjMXBgyXWULmVVVzyxy, fylld med nollor. Varje fil dekrypteras och sparas som /tmp/store, och ett försök att ladda det som ett bibliotek görs med funktionen dlopen. När ett dekrypteringsförsök resulterar i ett lyckat samtal dlopen, extraherar bakdörren exporterade funktioner Boriry и ChadylonV, som tydligen är ansvariga för nätverkskommunikation med servern. Vi har inte dropparen eller andra filer från provets ursprungliga plats, så vi kan inte analysera det här biblioteket. Dessutom, eftersom komponenten är krypterad, kommer en YARA-regel baserad på dessa strängar inte att matcha filen som finns på disken.

Som beskrivs i artikeln ovan skapar det Klient ID. Detta ID är MD5-hash för 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}' (skaffa MAC-adress)
- okänt team ("x1ex72x0a"), som används i tidigare exempel

Innan hashing läggs en "0" eller "1" till returvärdet för att indikera root-privilegier. Detta Klient ID 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 döljs vanligtvis med funktionen _chflags, dess tidsstämpel ändras med kommandot touch –t med ett slumpmässigt värde.

Avkodning av strängar

Som med tidigare alternativ är strängarna krypterade med AES-256-CBC (hexadecimal nyckel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 utfylld med nollor och IV fylld med nollor) genom funktionen CCCrypt. Nyckeln har ändrats från tidigare versioner, men eftersom gruppen fortfarande använder samma strängkrypteringsalgoritm kan dekryptering automatiseras. Utöver detta inlägg släpper vi ett IDA-skript som använder Hex-Rays API för att dekryptera strängarna som finns i den binära filen. Detta skript kan hjälpa till med framtida analys av OceanLotus och analys av befintliga prover som vi ännu inte har kunnat erhålla. Skriptet är baserat på en universell metod för att ta emot argument som skickas till en funktion. Dessutom letar den upp parametertilldelningar. Metoden kan återanvändas för att få en lista med funktionsargument och sedan skicka den till återuppringningen.

Att känna till funktionsprototypen Avkryptera, hittar skriptet alla korsreferenser till den här funktionen, alla argument, dekrypterar sedan data och placerar vanlig text i en kommentar på korsreferensadressen. För att skriptet ska fungera korrekt måste det ställas in på det anpassade alfabetet som används av avkodningsfunktionen base64, och en global variabel måste definieras som innehåller nyckelns längd (i detta fall ett DWORD, se figur 4).

OceanLotus: skadlig programvara för macOS
Figur 4. Definition av den globala variabeln key_len

I fönstret Funktion kan du högerklicka på dekrypteringsfunktionen och klicka på "Extrahera och dekryptera argument." Skriptet ska placera de dekrypterade raderna i kommentarer, som visas i figur 5.

OceanLotus: skadlig programvara för macOS
Bild 5. Den dekrypterade texten placeras i kommentarerna

På så sätt placeras de dekrypterade strängarna bekvämt tillsammans i IDA-fönstret xrefs för denna funktion som visas i figur 6.

OceanLotus: skadlig programvara för macOS
Figur 6. Xrefs till f_decrypt funktion

Det slutliga manuset finns på Githubförvaret.

Utgång

Som redan nämnts förbättrar och uppdaterar OceanLotus ständigt sin verktygslåda. Den här gången har cybergruppen förbättrat skadlig programvara för att fungera med Mac-användare. Koden har inte förändrats mycket, men eftersom många Mac-användare ignorerar säkerhetsprodukter är det av underordnad betydelse att skydda skadlig programvara från upptäckt.

ESET-produkter upptäckte redan den här filen vid tidpunkten för forskningen. Eftersom nätverksbiblioteket som används för C&C-kommunikation nu är krypterat på disk, är det exakta nätverksprotokollet som angriparna använder ännu inte känt.

Indikatorer på kompromiss

Indikatorer för kompromiss samt MITER ATT&CK-attribut finns också tillgängliga på GitHub.

Källa: will.com

Lägg en kommentar