OceanLotus: Aktualizace malwaru pro macOS

V březnu 2019 byl do VirusTotal, oblíbené online skenovací služby, nahrán nový vzorek malwaru macOS od kybernetické skupiny OceanLotus. Spustitelný soubor backdoor má stejné možnosti jako předchozí verze malwaru macOS, který jsme studovali, ale jeho struktura se změnila a bylo obtížnější jej odhalit. Bohužel se nám nepodařilo najít kapátko spojené s tímto vzorkem, takže dosud neznáme vektor infekce.

Nedávno jsme zveřejnili příspěvek o OceanLotus a jak se operátoři snaží zajistit stálost, urychlit provádění kódu a minimalizovat nároky na systém Windows. Je také známo, že tato kybernetická skupina má také 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í (popsaný Trend Micro) a také popisuje, jak můžete automatizovat dešifrování řetězců během analýzy pomocí IDA Hex-Rays API.

OceanLotus: Aktualizace malwaru pro macOS

Analýza

Další tři části popisují analýzu vzorku s hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Soubor se nazývá na baterku, antivirové produkty ESET jej detekují jako OSX/OceanLotus.D.

Ochrana proti ladění a sandboxu

Stejně jako všechny binární soubory macOS OceanLotus je vzorek zabalen s UPX, ale většina nástrojů pro identifikaci balíčků jej jako takový nerozpozná. Je to pravděpodobně proto, že většinou obsahují podpis závislý na přítomnosti řetězce „UPX“, navíc podpisy Mach-O jsou méně časté a nejsou tak často aktualizovány. Tato funkce ztěžuje detekci statické elektřiny. Zajímavé je, že po vybalení je vstupní bod na začátku sekce __cfstring v segmentu .TEXT. Tato sekce má atributy vlajky, jak je znázorněno na obrázku níže.

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

Jak je znázorněno na obrázku 2, umístění kódu v sekci __cfstring umožňuje oklamat některé nástroje pro demontáž zobrazením kódu jako řetězců.

OceanLotus: Aktualizace malwaru pro macOS
Obrázek 2. Kód zadních vrátek detekovaný IDA jako data

Jakmile je binární program spuštěn, vytvoří vlákno jako anti-debugger, jehož jediným účelem je neustále kontrolovat přítomnost debuggeru. Pro tento tok:

— Pokusí se odpojit jakýkoli debugger, volá ptrace с PT_DENY_ATTACH jako parametr požadavku
- Voláním funkce kontroluje, zda jsou otevřené některé exkluzivní porty task_get_exception_ports
- Zkontroluje, zda je připojen ladicí program, 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 hlídací pes detekuje přítomnost debuggeru, je funkce volána exit. Kromě toho ukázka zkontroluje prostředí spuštěním dvou příkazů:

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

Ukázka poté zkontroluje návratovou hodnotu proti pevně zakódovanému seznamu řetězců ze známých virtualizačních systémů: acle, vmware, VirtualBox nebo paralely. Nakonec další příkaz zkontroluje, zda je stroj jedním z následujících „MBP“, „MBA“, „MB“, „MM“, „IM“, „MP“ a „XS“. Jedná se o kódy systémových modelů, například „MBP“ znamená MacBook Pro, „MBA“ znamená MacBook Air atd.

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

Hlavní doplňky

Zatímco příkazy zadních vrátek se od výzkumu Trend Micro nezměnily, všimli jsme si několika dalších úprav. Servery C&C použité v tomto vzorku jsou poměrně nové a byly vytvořeny 22.10.2018. XNUMX. XNUMX.

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

Adresa URL zdroje se změnila na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
První paket odeslaný na server C&C obsahuje více informací o hostitelském počítači, včetně všech dat shromážděných příkazy v tabulce níže.

OceanLotus: Aktualizace malwaru pro macOS

Kromě této změny konfigurace ukázka nepoužívá knihovnu pro filtrování sítě libcurl, ale externí knihovna. Aby to backdoor našel, pokusí se dešifrovat každý soubor v aktuálním adresáři pomocí AES-256-CBC s klíčem gFjMXBgyXWULmVVVzyxy, doplněné nulami. Každý soubor je dešifrován a uložen jako /tmp/storea pomocí funkce se provede pokus o načtení jako knihovny dlopen. Když pokus o dešifrování vede k úspěšnému volání dlopen, backdoor extrahuje exportované funkce Boriry и ChadylonV, které jsou zřejmě zodpovědné za síťovou komunikaci se serverem. Nemáme kapátko ani jiné soubory z původního umístění ukázky, takže tuto knihovnu nemůžeme analyzovat. Navíc, protože je komponenta zašifrována, nebude pravidlo YARA založené na těchto řetězcích odpovídat souboru nalezenému na disku.

Jak je popsáno ve výše uvedeném článku, vytváří clientID. Toto ID 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ý tým ("x1ex72x0a"), který je použit v předchozích ukázkách

Před hashováním je k vrácené hodnotě přidána "0" nebo "1", která označuje oprávnění root. Tento clientID uloženy v /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, pokud je kód spuštěn jako root nebo ve všech ostatních případech v ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML. Soubor je obvykle skryt pomocí funkce _chflags, jeho časové razítko se změní pomocí příkazu touch –t s náhodnou hodnotou.

Dekódovací řetězce

Stejně jako u předchozích možností jsou řetězce šifrovány pomocí AES-256-CBC (hexadecimální klíč: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 doplněné nulami a IV vyplněné nulami) prostřednictvím funkce CCCrypt. Klíč se od předchozích verzí změnil, ale protože skupina stále používá stejný řetězcový šifrovací algoritmus, lze dešifrování automatizovat. Kromě tohoto příspěvku vydáváme skript IDA, který používá Hex-Rays API k dešifrování řetězců přítomných v binárním souboru. Tento skript může pomoci s budoucí analýzou OceanLotus a analýzou existujících vzorků, které se nám zatím nepodařilo získat. Skript je založen na univerzální metodě pro příjem argumentů předávaných funkci. Kromě toho vyhledává přiřazení parametrů. Metodu lze znovu použít k získání seznamu argumentů funkce a poté jej předat zpětnému volání.

Znát funkční prototyp dešifrovat, skript najde všechny křížové odkazy na tuto funkci, všechny argumenty, poté dešifruje data a umístí prostý text do komentáře na adresu křížového odkazu. Aby skript fungoval správně, musí být nastaven na vlastní abecedu používanou dekódovací funkcí 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ě Funkce můžete kliknout pravým tlačítkem na funkci dešifrování a kliknout na „Extrahovat a dešifrovat argumenty“. Skript by měl umístit dešifrované řádky 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

Tímto způsobem jsou dešifrované řetězce pohodlně umístěny společně v okně IDA externí reference pro tuto funkci, jak je znázorněno na obrázku 6.

OceanLotus: Aktualizace malwaru pro macOS
Obrázek 6. Xrefs funkce f_decrypt

Finální skript najdete na Repozitář Github.

Výkon

Jak již bylo zmíněno, OceanLotus neustále vylepšuje a aktualizuje svou sadu nástrojů. Tentokrát kybernetická skupina vylepšila malware pro práci s uživateli počítačů Mac. Kód se příliš nezměnil, ale protože mnoho uživatelů Maců bezpečnostní produkty ignoruje, je ochrana malwaru před detekcí druhořadá.

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

Ukazatele kompromisu

Ukazatele kompromisu a také atributy MITER ATT&CK jsou k dispozici na GitHub.

Zdroj: www.habr.com

Přidat komentář