OceanLotus: aktualizácia malvéru pre macOS

V marci 2019 bol na VirusTotal, populárnom online skeneri, nahraný nový vzor malvéru pre macOS kybernetickou skupinou OceanLotus. Spustiteľný súbor backdooru má rovnaké možnosti ako predtým skúmaná verzia malvéru pre macOS, ale jeho štruktúra sa zmenila a stalo sa ho ťažšie odhaliť. Žiaľ, nemohli sme nájsť droppera spojeného s týmto vzorom, takže zatiaľ nevieme, aký je vektor infekcie.

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

OceanLotus: aktualizácia malvéru pre macOS

Analýza

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

Anti-debugging a ochrana pred pieskoviskami

Ako všetky macOS binárky OceanLotus, je vzor zabalený pomocou UPX, ale väčšina nástrojov na identifikáciu obalov ho neidentifikuje ako taký. Pravdepodobne preto, že väčšina z nich má podpis závislý od prítomnosti reťazca „UPX“, navyše Mach-O podpisy sú menej časté a nie sú tak často aktualizované. Táto zvláštnosť sťažuje statické odhalenie. Zaujímavé je, že po rozbalení je vstupný bod umiestnený 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, umiestnenia kódu v sekcii __cfstring umožňuje oklamať niektoré nástroje disassemblácie, zobrazovaním kódu ako reťazcov.

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 2. Kód backdooru identifikovaný IDA ako údaje

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

— Snaží sa odpojiť akýkoľvek debuggger, volajúc ptrace s PT_DENY_ATTACH ako parametrový dotaz
— Kontroluje, či sú otvorené niektoré výnimočné porty, volajúc funkciu task_get_exception_ports
— Overí, či je ladí, ako je znázornené na obrázku nižšie, kontrolou prítomnosti vlajky P_TRACED v aktuálnom procese

OceanLotus: aktualizácia malvéru pre macOS
Obrázok 3. Kontrola pripojenia ladíaceho nástroja pomocou funkcie sysctl

Ak strážny systém zistí prítomnosť ladíaceho nástroja, zavolá funkciu exit. Okrem toho vzorka potom overuje prostredie vykonaním dvoch príkazov:

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

Následne vzorka kontroluje návratovú hodnotu podľa pevne zakódovaného zoznamu známych virtuálnych systémov: 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". Tieto 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é doplnky

Napriek tomu, že príkazy spätného kanálu sa nezmenili od doby výskumu Trend Micro, zaznamenali sme niekoľko iných úprav. C&C servery používané v tejto vzorke sú dosť nové, ich dátum vzniku je 22.10.2018.

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

URL zdroja sa zmenilo na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Prvý balík odoslaný na C&C server obsahuje viac informácií o hostiteľskom systéme, vrátane všetkých údajov zhromaždených príkazmi z nasledujúcej tabuľky.

OceanLotus: aktualizácia malvéru pre macOS

Okrem toho, zmeny konfigurácie ukazujú, že vzorka používa na sieťovú filtráciu nie knižnicu libcurl, ale externú knižnicu. Aby ju našla, spätný 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 sa dešifruje a ukladá ako /tmp/store, pričom sa pokus o jeho načítanie ako knižnice uskutočňuje pomocou funkcie dlopen. Keď pokus o dešifrovanie vedie k úspešnému volaniu dlopen, spätný kanál načíta exportované funkcie Boriry a ChadylonV, ktoré zjavne zodpovedajú za sieťovú interakciu so serverom. Nemáme droppera ani iné súbory z pôvodného umiestnenia vzorky, a preto nemôžeme túto knižnicu analyzovať. Navyše, pretože je komponent zašifrovaný, pravidlo YARA 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 cliendIDTento identifikátor je MD5 hashom vrátenej hodnoty jednej 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ískajte MAC adresu)
— neznámy príkaz ("x1ex72x0a") použitý v predchádzajúcich vzorcoch.

Pred hashovaním sa k vrátenej hodnote pridá znak „0“ alebo „1“, ktorý naznačuje prítomnosť root oprávnení. Tento clientID sa uchováva v /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ak je kód spustený ako root alebo v ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML vo všetkých ostatných prípadoch. Súbor je zvyčajne skrytý pomocou funkcie _chflags, jeho časová pečiatka sa mení pomocou príkazu touch –t so 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í sa nulami, pričom IV je vyplnené nulami) prostredníctvom funkcie CCCrypt. Kľúč bol zmenený v porovnaní s predchádzajúcimi verziami, ale pretože skupina stále používa ten istý algoritmus na šifrovanie reťazcov, dekódovanie môže byť automatizované. Okrem tohto príspevku uvoľňujeme skript IDA, ktorý použí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 vzoriek, ktoré sa nám zatiaľ nepodarilo získať. Základom skriptu je univerzálna metóda získavania argumentov odovzdaných funkcii. Okrem toho vyhľadáva priradenia parametrov. Metóda sa dá znovu použiť, aby sa získal zoznam argumentov funkcie a následne ich odovzdať spätnému volaniu (callback).

Poznanie prototypu funkcie decrypt, skript nájde všetky krížové odkazy na túto funkciu, všetky argumenty, potom dešifruje dáta a umiestni čistý text do komentára na adrese krížového odkazu. Aby skript fungoval správne, musí mať nastavený vlastný abecedný systém použitý vo funkcii 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 pravým tlačidlom myši vyvolať funkciu dešifrovania a kliknúť na 'Extrahovať a dešifrovať argumenty'. Skript by mal umiestniť dešifrované reťazce do komentárov, ako je znázornené 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 pohodlne umiestnené spoločne v okne IDA xrefs pre túto funkciu, ako je znázornené na obrázku 6.

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

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

Záver

Ako už bolo spomenuté, OceanLotus neustále zdokonaľuje a aktualizuje svoj súbor nástrojov. Tentoraz kyber skupina vylepšila malvér pre používateľov Mac. Kód sa príliš nezmenil, ale pretože mnohí používateľia Mac ignorujú bezpečnostné produkty, ochrana pred detekciou malvéru je druhoradá.

Produkty ESET už tento súbor detekovali v čase výskumu. Keďže sieťová knižnica použitá pre C&C komunikáciu je teraz š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, ako aj atribúty MITRE ATT&CK sú k dispozícii 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