OceanLotus: ažuriranje malvera za macOS

U ožujku 2019. godine, novi uzorak zlonamjernog softvera za macOS kibernetske grupe OceanLotus učitan je u VirusTotal, popularnu online uslugu skeniranja. Izvršna datoteka backdoora ima iste mogućnosti kao i prethodna verzija zlointencija za macOS koju smo proučili, ali se njena struktura promijenila i sada ju je teže otkriti. Nažalost, nismo mogli pronaći dropera povezanog s ovim uzorkom, tako da još ne znamo vektor zaraze.

Nedavno smo objavili post o OceanLotus i o tome kako operateri nastoje osigurati postojanost, ubrzati izvršenje koda i umanjiti tragove prisutnosti u Windows sustavima. Također je poznato da ova kibernetska grupa ima komponentu za macOS. U ovom postu detaljno su prikazane promjene u najnovijoj verziji zlonamjernog softvera za macOS u usporedbi s prethodnom verzijom (opisanim u Trend Micro), a također se objašnjava kako se tijekom analize mogu automatizirati dešifriranje nizova pomoću IDA Hex-Rays API-ja.

OceanLotus: ažuriranje malvera za macOS

Analiza

U sljedeće tri dijela opisuje se analiza uzorka s hashom SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Datoteka se zove flashlightd, antivirusni proizvodi ESET prepoznaju je kao OSX/OceanLotus.D.

Antidebugging i zaštita od sandboxa

Kao svi macOS binarni programi OceanLotus, uzorak je zapakiran UPX-om, ali većina alata za identifikaciju pakera ne prepoznaje ga kao takvog. Vjerojatno zato što većinom imaju potpis koji ovisi o prisutnosti niza "UPX", osim toga, Mach-O potpisi su rjeđi i ne ažuriraju se tako često. Ova osobina otežava statičko otkrivanje. Zanimljivo je da, nakon raspakiranja, ulazna točka se nalazi na početku odjeljka __cfstring u segmentu .TEXT. U ovom odjeljku postoje atribute flag, kao što je prikazano na donjoj slici.

OceanLotus: ažuriranje malvera za macOS
Slika 1. Atributi MACH-O odjeljka __cfstring

Kao što je prikazano na slici 2, pozicije koda u odjeljku __cfstring omogućavaju obmanu nekih alata za disasembler, prikazujući kod u obliku nizova.

OceanLotus: ažuriranje malvera za macOS
Slika 2. Kod backdoora definira IDA kao podatke

Nakon pokretanja, binarna datoteka stvara nit kao sredstvo zaštite od debuggiranja, čija je jedina svrha stalna provjera prisutnosti debugger-a. Za to, nit:

— Pokušava odrpiti bilo koji debugger pozivajući ptrace s PT_DENY_ATTACH kao parametar zahtjeva
— Provjerava jesu li otvorene neke iznimne portove pozivajući funkciju task_get_exception_ports
— Provjerava je li debugger povezan, kao što je prikazano na slici ispod, provjerom postojanja zastavice P_TRACED u trenutnom procesu

OceanLotus: ažuriranje malvera za macOS
Slika 3. Provjera povezanosti debuggere pomoću funkcije sysctl

Ako watchdog shema otkrije prisutnost debuggere, poziva se funkcija exit. Osim toga, uzorak provjerava okruženje izvodeći dvije naredbe:

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

Nakon toga, uzorak provjerava povratnu vrijednost prema čvrsto kodiranom popisu poznatih sustava virtualizacije: acle, vmware, virtualbox ili parallels. Na kraju, sljedeća naredba provjerava je li mašina jedan od sljedećih “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” i “XS”. To su kodovi modela sustava, na primjer, “MBP” označava MacBook Pro, “MBA” – MacBook Air itd.

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

Glavni dodaci

Iako su naredbe backdoora ostale iste od istraživanja Trend Micro, primijetili smo nekoliko drugih modifikacija. C&C poslužitelji koji se koriste u ovom uzorku prilično su novi, datum njihovog stvaranja je 22.10.2018.

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

Resurs URL promijenjen je u /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Prvi paket poslan na C&C poslužitelj sadrži više informacija o host mašini, uključujući sve podatke sakupljene naredbama iz donje tablice.

OceanLotus: ažuriranje malvera za macOS

Pored toga, promjene konfiguracije, uzorak koristi za mrežno filtriranje ne biblioteku libcurl, već vanjsku biblioteku. Da bi je pronašao, backdoor pokušava dešifrirati svaku datoteku u trenutnom katalogu, koristeći AES-256-CBC s ključem gFjMXBgyXWULmVVVzyxy, dopunjenim nulama. Svaka datoteka se dešifrira i sprema kao /tmp/store, a pokušaj njezinog učitavanja kao biblioteke napravljen je korištenjem funkcije dlopen. Kada pokušaj dešifriranja dovede do uspješnog poziva dlopen, backdoor izvlači eksportirane funkcije Boriry i ChadylonV, koje, čini se, odgovaraju za mrežnu interakciju sa poslužiteljem. Nemamo dropera ili drugih datoteka iz izvorne lokacije uzorka, stoga ih ne možemo analizirati. Štoviše, budući da je komponenta enkriptirana, YARA pravilo, zasnovano na tim redovima, neće odgovarati datoteci pronađenoj na disku.

Kao što je opisano u prethodno spomenutom članku, kreira se cliendID. Ovaj identifikator je MD5 hash vraćene vrijednosti jedne od sljedećih naredbi:

— 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}' (dohvati MAC adresu)
— nepoznata naredba ("x1ex72x0a"), koja se koristi u prethodnim primjerima

Prije heširanja vraćenoj vrijednosti dodaje se znak "0" ili "1", koji označava prisutnost root privilegija. Ovaj clientID se pohranjuje u /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ako je kod pokrenut kao root ili u ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML u svim ostalim slučajevima. Datoteka je obično skrivena pomoću funkcije _chflags, oznaka vremena se mijenja naredbom touch –t s nasumičnom vrijednošću.

Dešifriranje niza

Kao i u prethodnim verzijama, nizovi su šifrirani koristeći AES-256-CBC (heksadecimalni ključ: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 dopunjen nulama, a IV popunjen nulama) putem funkcije CCCrypt. Ključ je promijenjen u odnosu na prethodne verzije, ali budući da tim i dalje koristi isti algoritam šifriranja nizova, dešifriranje može biti automatizirano. Osim ovog posta, izdajemo IDA skriptu koja koristi API Hex-Rays za dešifriranje nizova prisutnih u binarnoj datoteci. Ova skripta može pomoći u budućoj analizi OceanLotus i analizi postojećih uzoraka kojih osobno još nismo mogli nabaviti. U osnovi skripte nalazi se univerzalna metoda za dobivanje argumenata proslijeđenih funkciji. Osim toga, traži odrednice parametara. Metoda se može ponovno koristiti za dobivanje popisa argumenata funkcije i zatim ih proslijediti na povratni poziv.

Znajući prototip funkcije decrypt, skripta pronalazi sve međusobne reference na ovu funkciju, sve argumente, zatim dešifrira podatke i stavlja običan tekst unutar komentara na adresi međusobne reference. Da bi skripta ispravno radila, mora biti postavljen prilagođeni alfabet korišten od strane funkcije za dekodiranje base64, i mora biti definirana globalna varijabla koja sadrži duljinu ključa (u ovom slučaju DWORD, vidi sliku 4).

OceanLotus: ažuriranje malvera za macOS
Slika 4. Definiranje globalne varijable key_len

U prozoru Function možete desnom tipkom miša pozvati funkciju dekripcije i kliknuti na «Izvuci i dekriptiraj argumente». Skripta treba smjestiti dekriptirane stringove u komentare, kao što je prikazano na slici 5.

OceanLotus: ažuriranje malvera za macOS
Slika 5. Dekriptirani tekst smješten u komentarima

Na taj način dekriptirani stringovi su praktično smješteni zajedno u oknu IDA xrefs za ovu funkciju, kao što je prikazano na slici 6.

OceanLotus: ažuriranje malvera za macOS
Slika 6. Xrefs na funkciju f_decrypt

Konačna verzija skripte može se pronaći na Github repository.

Izvještaj

Kao što je već navedeno, OceanLotus stalno unapređuje i ažurira svoj skup alata. Ovaj put, kibernetička grupa je poboljšala zloćudni softver za rad s korisnicima Mac-a. Kod se nije mnogo promijenio, ali, budući da mnogi korisnici Mac-a ignoriraju proizvode za sigurnost, zaštita od malvera od otkrivanja ima sekundarnu važnost.

ESET proizvodi su već detektirali ovu datoteku u trenutku istraživanja. Budući da je mrežna biblioteka koja se koristi za C&C komunikaciju sada šifrirana na disku, točan mrežni protokol koji napadači koriste trenutno nije poznat.

Indikatori kompromitacije

Indikatori kompromitacije, kao i MITRE ATT&CK atributi također su dostupni na GitHub.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster