OceanLotus: aktualizácia malvéru pre macOS

V marci 2019 bol na VirusTotal, populárnej online službe skenovania, nahraný nový príklad malvéru pre macOS kybernetickej skupiny OceanLotus. Spustiteľný súbor backdooru má rovnaké schopnosti ako predtým skúmaná verzia malvéru pre macOS, ale jeho štruktúra sa zmenila a ťažšie sa dá odhaliť. Žiaľ, nepodarilo sa nám nájsť droppers súvisiace s týmto vzorom, takže zatiaľ nevieme, aký je infikačný vektor.

Nedávno sme zverejnili príspevok o OceanLotus a o tom, ako operátori sa snažia zabezpečiť perzistenciu, urýchliť vykonávanie kódu a minimalizovať stopy prítomnosti v systémoch Windows. Tiež je známe, že táto kybernetická skupina má komponent pre macOS. V tomto príspevku sú podrobne popísané zmeny v najnovšej verzii malvéru pre macOS v porovnaní s predchádzajúcou verziou (popísanou spoločnosťou Trend Micro), a tiež sa ukazuje, ako možno automatizovať dešifrovanie reťazcov počas analýzy pomocou IDA Hex-Rays API.

OceanLotus: aktualizácia malvéru pre macOS

Analýza

V nasledujúcich troch častiach sa opisuje analýza vzoru s hashom SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Súbor sa nazýva flashlightd, antivírusové produkty ESET ho detekujú ako OSX/OceanLotus.D.

Antidebugging a ochrana pred piesočnicami

Rovnako ako všetky binárky macOS OceanLotus, je vzor zabalený pomocou UPX, ale väčšina nástrojov na identifikáciu zabalenia to nerozpoznáva ako také. Pravdepodobne preto, že väčšinou obsahujú podpis závislý od prítomnosti reťazca 'UPX', a navyše, Mach-O podpisy sa vyskytujú menej často a nie sú tak často aktualizované. Táto vlastnosť sťažuje statické zistenie. Zaujímavé je, že po rozbalení sa vstupný bod nachádza na začiatku sekcie __cfstring v segmente .TEXT. V tejto sekcii sú atribúty flag, ako je znázornené na obrázku nižšie.

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 1. Atribúty sekcie MACH-O __cfstring

Ako je znázornené na obrázku 2, umiestnenie kódu v sekcii __cfstring umožňuje oklamať niektoré nástroje disassemblovania, zobrazujúce kód vo forme reťazcov.

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 2. Kód backdooru je definovaný IDA ako dáta

Po spustení binárny súbor vytvára vlákno ako prostriedok ochrany pred ladením, ktorého jediným cieľom je neustále kontrolovať prítomnosť debuggeru. Na tento účel vlákno:

— Snaží sa odpútať akýkoľvek debugger volaním ptrace s PT_DENY_ATTACH ako parameter požiadavky
— Kontroluje, či sú otvorené niektoré výnimočné porty volaním funkcie task_get_exception_ports
— Overuje, či je ladenie pripojené, ako je znázornené na obrázku nižšie, kontrolou existencie flagu P_TRACED v aktuálnom procese

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 3. Kontrola pripojenia ladacieho programu prostredníctvom funkcie sysctl

Ak strážny mechanizmus zistí prítomnosť ladacieho programu, vyvolá funkciu exit. Okrem toho vzor potom kontroluje prostredie vykonaním dvoch príkazov:

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

Potom vzor kontroluje návratovú hodnotu vo vopred definovanom zozname známych systémov virtualizácie: acle, vmware, virtualbox alebo parallels. Nakoniec nasledujúci príkaz kontroluje, či je stroj jedným z nasledujúcich „MBP“, „MBA“, „MB“, „MM“, „IM“, „MP“ a „XS“. Toto sú kódy modelov systému, napríklad „MBP“ znamená MacBook Pro, „MBA“ – MacBook Air atď.

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

Hlavné dodatky

Napriek tomu, že príkazy zadného kanála sa nezmenili od výskumu Trend Micro, všimli sme si niekoľko ďalších úprav. C&C servery používané v tomto vzore sú pomerne nové, dátum ich vytvorenia – 22.10.2018.

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

URL zdroja sa zmenil na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Prvý paket odosielaný na C&C server obsahuje viac informácií o hostiteľskej mašine, vrátane všetkých údajov zhromaždených príkazmi z tabuľky nižšie.

OceanLotus: aktualizácia malvéru pre macOS

Okrem toho, zmeny konfigurácie, vzor používa na sieťovú filtráciu nie knižnicu libcurl, ale externú knižnicu. Aby ju našiel, zadný kanál sa pokúša dešifrovať každý súbor v aktuálnom adresári pomocou AES-256-CBC s kľúčom gFjMXBgyXWULmVVVzyxy, doplneným nulami. Každý súbor je dešifrovaný a uložený ako /tmp/store, a pokus o jeho načítanie ako knižnicu bol vykonaný pomocou funkcie dlopen. Keď pokus o dešifrovanie vedie k úspešnému volaniu dlopen, zadný kanál extrahuje exportované funkcie Boriry a ChadylonV, ktoré, zdá sa, zodpovedajú za sieťovú interakciu so serverom. Nemáme dropera ani iné súbory zo zdrojovej lokality vzoru, takže ich nemôžeme analyzovať. Navyše, keďže komponent je zašifrovaný, YARA pravidlo založené na týchto reťazcoch nebude zodpovedať súboru nájdenému na disku.

Ako je uvedené v vyššie uvedenom článku, vytvára sa clientIDTento identifikátor je MD5 hash návratovej hodnoty jedného z nasledujúcich príkazov:

— 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ískať MAC adresu)
— neznámy príkaz („x1ex72x0a„), ktorý sa používa v predchádzajúcich vzorcoch

Pred hashovaním sa k návratovej hodnote pridáva znak „0“ alebo „1“, ktorý naznačuje prítomnosť privilégií root. Tento clientID je uložený v /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ak je kód spustený s právami roota, alebo v ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML v ostatných prípadoch. Súbor je zvyčajne skrytý funkciou _chflags, jeho časová pečiatka sa mení pomocou príkazu touch –t s náhodnou hodnotou.

Dekódovanie reťazcov

Rovnako ako v predchádzajúcich verziách, reťazce sú šifrované pomocou AES-256-CBC (hexadecimálny kľúč: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 doplněné nulami, a IV je vyplnený nulami) pomocou funkcie CCCrypt. Kľúč bol zmenený v porovnaní s predchádzajúcimi verziami, ale pretože skupina stále používa ten istý algoritmus šifrovania reťazcov, dekódovanie môže byť automatizované. Okrem tohto príspevku vydávame skript IDA, ktorý využíva API Hex-Rays na dekódovanie reťazcov prítomných v binárnom súbore. Tento skript môže pomôcť pri budúcej analýze OceanLotus a analýze existujúcich vzorov, ktoré sa nám doteraz nepodarilo získať. Základom skriptu je univerzálna metóda získania argumentov predaných funkcii. Okrem toho vyhľadáva priradenia parametrov. Metódu je možné opakovane použiť, aby ste získali zoznam argumentov funkcie a potom ich odovzdali na spätné volanie (callback).

Poznajúc prototyp funkcie decrypt, skript nájde všetky krížové odkazy na túto funkciu, všetky argumenty, následne dekóduje dáta a umiestni jednoduchý text do poznámky na adrese krížového odkazu. Aby skript fungoval správne, musí mať nastavený vlastný abecedný základ, ktorý používa funkcia dekódovania base64, a musí byť definovaná globálna premenná obsahujúca dĺžku kľúča (v tomto prípade DWORD, pozri obrázok 4).

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 4. Definícia globálnej premennej key_len

V okne Funkcia môžete kliknúť pravým tlačidlom myši na funkciu dešifrovania a vybrať „Extrahovať a dešifrovať argumenty“. Skript by mal vložiť dešifrované reťazce do komentárov, ako je zobrazené na obrázku 5.

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 5. Dešifrovaný text je umiestnený v komentároch

Takto sú dešifrované reťazce prakticky umiestnené spolu v okne IDA xrefs pre túto funkciu, ako je zobrazené na obrázku 6.

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 6. Xrefs k funkcii f_decrypt

Finálnu verziu skriptu nájdete na Github repository.

Záver

Ako už bolo povedané, OceanLotus neustále zlepšujú a aktualizujú svoj súbor nástrojov. Tentokrát kybernetická skupina vylepšila škodlivý kód pre používateľov Mac. Kód sa príliš nezmenil, no pretože mnohí používatelia Mac ignorujú bezpečnostné produkty, ochrana pred detekciou malvéru má vedľajší význam.

Produkty ESET už detekovali tento súbor v čase prieskumu. Keďže sieťová knižnica, ktorá sa používa pre C&C komunikáciu, je teraz zašifrovaná na disku, presný sieťový protokol, ktorý útočníci používajú, zatiaľ nie je známy.

Indikátory kompromitácie

Indikátory kompromitácie a atribúty MITRE ATT&CK sú tiež dostupné na GitHub.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster