OceanLotus: aktualizace malwaru pro macOS

V březnu 2019 byl do VirusTotal, populární online skenovací služby, nahrán nový vzorek malwaru pro macOS kybernetické skupiny OceanLotus. Spustitelný soubor backdooru má stejné možnosti jako předchozí verze malwaru pro macOS, kterou jsme prozkoumali, ale jeho struktura se změnila a je obtížnější jej odhalit. Bohužel jsme nedokázali najít dropper spojený s tímto vzorkem, takže zatím neznáme vektor infekce.

Nedávno jsme publikovali příspěvek o OceanLotus a o tom, jak se operátoři snaží zajistit perzistenci, urychlit vykonávání kódu a minimalizovat stopy přítomnosti v systémech Windows. Je také známo, že tato kybernetická skupina má komponentu pro macOS. Tento příspěvek podrobně popisuje změny v nejnovější verzi malwaru pro macOS ve srovnání s předchozí verzí (popisovanou společností Trend Micro), a také popisuje, jak lze při analýze automatizovat dešifrování řetězců pomocí API IDA Hex-Rays.

OceanLotus: aktualizace malwaru pro macOS

Analýza

V následujících třech částech se popisuje analýza vzorku s hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Soubor se jmenuje flashlightd, antivirové produkty ESET ho detekují jako OSX/OceanLotus.D.

Antidebugging a ochrana proti sandboxům

Stejně jako všechny binární soubory macOS OceanLotus je vzorek zabalen pomocí UPX, ale většina nástrojů pro identifikaci balíčků ho nerozpoznává jako takový. Pravděpodobně proto, že obvykle obsahují podpis závislý na přítomnosti řetězce „UPX“, navíc Mach-O podpisy se vyskytují méně často a nejsou tak často aktualizovány. Tato vlastnost ztěžuje statické odhalení. Zajímavé je, že po rozbalení se vstupní bod nachází na začátku sekce __cfstring v segmentu .TEXT. V této sekci jsou atributy flag, jak je ukázáno na obrázku níže.

OceanLotus: aktualizace malwaru pro macOS
Obrázek 1. Atributy sekce MACH-O __cfstring

Jak je ukázáno na obrázku 2, umístění kódu v sekci __cfstring umožňuje oklamat některé disassemblers tím, že zobrazuje kód jako řetězce.

OceanLotus: aktualizace malwaru pro macOS
Obrázek 2. Kód backdooru je IDA identifikován jako data

Po spuštění binární soubor vytváří vlákno jako ochranu proti ladění, jehož jediným cílem je trvale kontrolovat přítomnost debuggeru. K tomu vlákno:

— Snaží se odpojit jakýkoli debugger tím, že volá ptrace s PT_DENY_ATTACH jako parametr žádosti
— Kontroluje, zda jsou otevřeny některé výjimečné porty, voláním funkce task_get_exception_ports
— Zjistí, zda je debugger připojen, jak je znázorněno na obrázku níže, kontrolou přítomnosti příznaku P_TRACED v aktuálním procesu

OceanLotus: aktualizace malwaru pro macOS
Obrázek 3. Kontrola připojení debuggeru pomocí funkce sysctl

Pokud watchdog schéma detekuje přítomnost debuggeru, vyvolá funkci exit. Dále vzorek kontroluje prostředí provedením dvou příkazů:

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

Poté vzorek kontroluje vrácenou hodnotu podle pevně zakódovaného seznamu známých virtualizačních systémů: acle, vmware, virtualbox nebo parallels. Nakonec následující příkaz kontroluje, zda je stroj jedním z následujících „MBP“, „MBA“, „MB“, „MM“, „IM“, „MP“ a „XS“. Jsou to kódy modelu systému, například „MBP“ znamená MacBook Pro, „MBA“ – MacBook Air atd.

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

Hlavní dodatky

I když příkazy bakdooru se od doby výzkumu Trend Micro nezměnily, zaznamenali jsme několik dalších modifikací. C&C servery používané v tomto vzorku jsou poměrně nové, datum jejich vzniku – 22.10.2018.

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

URL zdroje se změnilo na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
První paket odeslaný na C&C server obsahuje více informací o hostitelské mašině, včetně všech údajů shromážděných příkazy z níže uvedené tabulky.

OceanLotus: aktualizace malwaru pro macOS

Kromě toho, změny konfigurace, vzorek používá pro síťové filtrování nikoli knihovnu libcurl, ale externí knihovnu. Aby ji nalezl, bakdoor se pokouší dešifrovat každý soubor v aktuálním adresáři pomocí AES-256-CBC s klíčem gFjMXBgyXWULmVVVzyxy, doplněným nulami. Každý soubor je dešifrován a uložen jako /tmp/store, a pokus o jeho nahrání jako knihovnu byl učiněn pomocí funkce dlopen. Když se pokus o dešifrování podaří s úspěšným zavoláním dlopen, bakdoor extrahuje exportované funkce Boriry a ChadylonV, které zjevně odpovídají za síťovou interakci se serverem. Nemáme droppera ani další soubory z původního umístění vzorku, proto nemůžeme tuto knihovnu analyzovat. Navíc, jelikož je komponenta zašifrována, YARA pravidlo založené na těchto řetězcích nebude odpovídat souboru nalezenému na disku.

Jak je popsáno ve zmíněném článku, vytváří se cliendIDTento identifikátor je MD5 hash návratové hodnoty jednoho z následujících příkazů:

— 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}' (získat MAC adresu)
— neznámý příkaz („x1ex72x0a„), který se používá v předchozích ukázkách

Před hashováním se k návratové hodnotě přidá znak „0“ nebo „1“, který vyjadřuje přítomnost root privilegii. Tento clientID se ukládá do /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, pokud je kód spuštěn jako root nebo do ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML ve všech ostatních případech. Soubor je obvykle skryt pomocí funkce _chflags, jeho časová značka se mění pomocí příkazu touch –t s náhodnou hodnotou.

Dekódování řetězců

Jak bylo uvedeno v předchozích variantách, jsou řetězce zašifrovány pomocí AES-256-CBC (hexadecimální klíč: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 doplněný nulami, a IV je zaplněn nulami) pomocí funkce CCCrypt. Klíč se změnil ve srovnání s předchozími verzemi, ale protože skupina stále používá stejný algoritmus šifrování řetězců, dekódování může být automatizováno. Kromě tohoto příspěvku uvolňujeme skript IDA, který využívá API Hex-Rays k dekódování řetězců přítomných ve spustitelném souboru. Tento skript může pomoci v budoucí analýze OceanLotus a analýze existujících vzorků, které se nám zatím nepodařilo získat. Základem scénáře je univerzální metoda získání argumentů předaných funkci. Kromě toho hledá přiřazení parametrů. Tato metoda může být znovu použita k získání seznamu argumentů funkce a poté je předat na zpětné volání (callback).

Znalost prototypu funkce decrypt, skript vyhledá všechny křížové odkazy na tuto funkci, všechny argumenty, poté dekóduje data a umístí prostý text do komentáře na adrese křížového odkazu. Aby skript fungoval správně, musí být v něm nastaven vlastní abeceda používaná funkcí dekódování base64 a musí být definována globální proměnná obsahující délku klíče (v tomto případě DWORD, viz obrázek 4).

OceanLotus: aktualizace malwaru pro macOS
Obrázek 4. Definice globální proměnné key_len

V okně Function můžete pravým tlačítkem myši vyvolat funkci dešifrování a kliknout na „Extrahovat a dešifrovat argumenty“. Skript by měl umístit dešifrované řetězce do komentářů, jak je znázorněno na obrázku 5.

OceanLotus: aktualizace malwaru pro macOS
Obrázek 5. Dešifrovaný text je umístěn v komentářích

Takto jsou dešifrované řetězce pohodlně umístěny spolu v okně IDA xrefs pro tuto funkci, jak je znázorněno na obrázku 6.

OceanLotus: aktualizace malwaru pro macOS
Obrázek 6. Xrefs k funkci f_decrypt

Finální verzi skriptu lze najít na Github repository.

Výstup

Jak již bylo řečeno, OceanLotus neustále zdokonalují a aktualizují svůj nástrojový balíček. Tentokrát kybernetická skupina vylepšila malware pro uživatele Mac. Kód se příliš nezměnil, ale protože mnoho uživatelů Mac ignoruje produkty pro zabezpečení, ochrana proti detekci malware je druhořadá.

Produkty ESET již tento soubor detekovaly v době výzkumu. Vzhledem k tomu, že síťová knihovna používaná pro C&C komunikaci je nyní zašifrována na disku, přesný síťový protokol používaný útočníky zatím není znám.

Indikátory kompromitace

Indikátory kompromitace, stejně jako atributy MITRE ATT&CK jsou také k dispozici na GitHub.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster