V marcu 2019 bol na VirusTotal, populárnej online službe pre skenovanie, nahratý nový vzor malvéru pre macOS od kybernetickej skupiny OceanLotus. Spúšťací súbor zadného otvoru má rovnaké schopnosti ako predchádzajúca verzia malvéru pre macOS, ktorú sme skúmali, ale jeho štruktúra sa zmenila a je ťažšie ho odhaliť. Bohužiaľ, zatiaľ sme nedokázali nájsť dropper súvisiaci s týmto vzorom, takže zatiaľ nevieme, aký je vektor nákazy.
Nedávno sme uverejnili 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 sa podrobne opisujú zmeny v najnovšej verzii malvéru pre macOS v porovnaní s predchádzajúco uvedenou (), ako aj to, ako je možné automatizovať dešifrovanie reťazcov počas analýzy pomocou API IDA Hex-Rays.

Analiza
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 detekujú ho ako OSX/OceanLotus.D.
Anti-debugging a ochrana pred pieskoviskami
Rovnako ako všetky macOS binárne súbory OceanLotus, vzor je zabalený s UPX, ale väčšina identifikačných nástrojov ho nerozpoznáva ako taký. Pravdepodobne preto, že väčšinou obsahujú podpis, ktorý závisí od prítomnosti reťazca 'UPX'; navyše Mach-O podpisy sú menej časté a nie sú tak často aktualizované. Táto vlastnosť sťažuje statické odhaľovanie. 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.

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 disassemblovania, pričom zobrazuje kód ako reťazce.

Obrázok 2. Kód zadného otvoru je definovaný IDA ako dáta
Po spustení binárneho súboru vytvára vlákno ako ochranný prostriedok pred ladicami, ktorého jediným cieľom je nepretržite kontrolovať prítomnosť debuggra. Na tento účel vlákno:
— Snaží sa odpojiť akýkoľvek debugger vyvolaním ptrace z PT_DENY_ATTACH ako parametra požiadavky
— Kontroluje, či sú otvorené niektoré výnimočné porty, vyvolaním funkcie task_get_exception_ports
— Preverja, ali je debager povezan, kot je prikazano na spodnji sliki, tako da preveri prisotnost zastavice P_TRACED v trenutnem procesu

Slika 3. Preverjanje povezave debagerja preko funkcije sysctl
Če watchdog shema odkrije prisotnost debagerja, se pokliče funkcija exit. Poleg tega vzorec nato preveri okolje z izvedbo dveh ukazov:
ioreg -l | grep -e "Manufacturer" in sysctl hw.model
Nato vzorec preveri vrnjeno vrednost proti trdo kodiranemu seznamu znanih virtualizacijskih sistemov: acle, vmware, virtualbox ili parallels. Nazadnje naslednji ukaz preveri, ali je stroj eden od naslednjih “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” in “XS”. To so kode modelov sistemov, na primer, “MBP” pomeni MacBook Pro, “MBA” – MacBook Air itd.
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}'
Glavne dodatke
Kljub temu da ukazi backdoor-a niso spremenjeni od raziskave Trend Micro, smo opazili nekaj drugih sprememb. C&C strežniki, uporabljeni v tem vzorcu, so precej novi, datum njihovega nastanka pa je 22.10.2018.
— daff.faybilodeau[.]com
— sarc.onteagleroad[.]com
— au.charlineopkesston[.]com
URL vir se je spremenil na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Prvi paket, poslan na C&C strežnik, vsebuje več informacij o gostiteljski napravi, vključno z vsemi podatki, ki jih zbirajo ukazi iz spodnje tabele.

Poleg tega, spremembe konfiguracije vzorec uporablja za omrežno filtriranje ne biblioteke , temveč zunanjo knjižnico. Da bi jo našel, backdoor poskuša dešifrirati vsako datoteko v trenutnem imeniku z uporabo AES-256-CBC s ključem gFjMXBgyXWULmVVVzyxy, dopolnjenim z ničlami. Vsaka datoteka se dešifrira in shrani kot /tmp/store, medtem ko je poskus nalaganja kot knjižnice opravljen z uporabo funkcije . Ko dešifracijski poskus privede do uspešnega klica dlopen, backdoor izkoplje izvožene funkcije Boriry in ChadylonV, katerih naloga naj bi bila omrežno sodelovanje s strežnikom. Nimamo dropparja ali drugih datotek iz izvorne lokacije vzorca, zato te knjižnice ne moremo analizirati. Poleg tega, ker je komponenta šifrirana, YARA pravilo, ki temelji na teh nizih, ne bo ustrezalo datoteki, najdeni na disku.
Kot je opisano v zgoraj omenjenem članku, se ustvari cliendIDTa identidad je MD5 hash vraćene vrednosti jedne od sledećih komandi:
— 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}' (dobiti MAC adresu)
— nepoznata komanda ("x1ex72x0a") koja se koristi u prethodnim primerima
Pre hashovanja vraćenoj vrednosti se dodaje karakter "0" ili "1", što označava prisustvo root privilegija. Ovaj clientID se čuva u /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ako se kod izvršava kao root ili u ~\/Library\/SmartCardsServices\/Technology\/PlugIns\/drivers\/snippets.ecgML u svim ostalim slučajevima. Datoteka je obično skrivena pomoću funkcije , njen vremenski pečat se menja pomoću komande touch –t sa slučajnom vrednošću.
Dekodiranje nizov
Kao i u prethodnim verzijama, stringovi su šifrovani koristeći AES-256-CBC (heksadecimalni ključ: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 dopunjen nulama, a IV ispunjen nulama) koristeći funkciju . Ključ je promenjen u poređenju sa prethodnim verzijama, ali pošto grupa i dalje koristi isti algoritam šifrovanja stringova, dešifrovanje može biti automatizovano. Pored ovog posta, izdvajamo IDA skriptu koja koristi Hex-Rays API za dešifrovanje stringova prisutnih u binarnom fajlu. Ova skripta može pomoći u budućoj analizi OceanLotus i analizi postojećih uzoraka koje još nismo mogli dobiti. Osnova skripte je univerzalna metoda dobijanja argumenata prosledjenih funkciji. Pored toga, ona traži odredišta parametara. Metoda se može koristiti ponovo da bi dobila spisak argumenata funkcije, a zatim ih prosledila na povratni poziv (callback).
Znajući prototip funkcije decrypt, skripta pronalazi sve međusobne reference na ovu funkciju, sve argumente, zatim dešifruje podatke i stavlja običan tekst unutar komentara na adresi međusobne reference. Da bi skripta ispravno radila, mora biti postavljen prilagođeni alfabet koji koristi funkcija dekodiranja base64, i mora biti definisana globalna promenljiva koja sadrži dužinu ključa (u ovom slučaju DWORD, vidi sliku 4).

Slika 4. Definisanje globalne promenljive key_len
V oknu Function lahko z desnim klikom pokličete funkcijo dekriptiranja in kliknete »Izvleči in dekriptiraj argumente«. Skripta naj dešifrirane vrstice postavi v komentarje, kot je prikazano na sliki 5.

Slika 5. Dešifrirano besedilo je postavljeno v komentarje
Tako so dešifrirane vrstice priročno združene v oknu IDA xrefs za to funkcijo, kot je prikazano na sliki 6.

Slika 6. Xrefs do funkcije f_decrypt
Končna različica skripte je na voljo na .
Izlaz
Kot že omenjeno, OceanLotus nenehno izboljšuje in posodablja svoj nabor orodij. Tokrat je kibernetska skupina izboljšala zlonamerno programsko opremo za uporabnike Mac. Koda se ni bistveno spremenila, vendar je zaščita pred odkritjem zlonamerne programske opreme manj pomembna, saj mnogi uporabniki Mac ignorirajo varnostne proizvode.
Proizvodi ESET so to datoteko že zaznali ob času preiskave. Ker je omrežna knjižnica, uporabljena za C&C komunikacijo, zdaj šifrirana na disku, natančen omrežni protokol, ki ga uporabljajo napadalci, zaenkrat ni znan.
Indikatori kompromitacije
Kazalniki kompromitacije in atributi MITRE ATT&CK so prav tako na voljo na .
Izvor: habr.com
