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 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 (), a također se objašnjava kako se tijekom analize mogu automatizirati dešifriranje nizova pomoću IDA Hex-Rays API-ja.

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.

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.

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

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.

Pored toga, promjene konfiguracije, uzorak koristi za mrežno filtriranje ne biblioteku , 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 . 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 , 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 . 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).

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.

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.

Slika 6. Xrefs na funkciju f_decrypt
Konačna verzija skripte može se pronaći na .
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 .
Izvor: habr.com
