Marca 2019 je bil na VirusTotal, priljubljeno spletno storitev za skeniranje, naložen nov vzorec zlonamerne programske opreme. macOS Kibernetska skupina OceanLotus. Izvedljiva datoteka s stranskimi vrati ima enake zmogljivosti kot prejšnja različica zlonamerne programske opreme, ki smo jo preučevali. macOS, vendar se je njegova struktura spremenila in ga je postalo težje zaznati. Žal nam ni uspelo najti kapalke, povezane s tem vzorcem, zato še ne poznamo vektorja okužbe.
Pred kratkim smo objavili in kako operaterji poskušajo zagotoviti vztrajnost, pospešiti izvajanje kode in zmanjšati sledi prisotnosti v sistemih WindowsZnano je tudi, da ima ta kibernetska skupina tudi komponento za macOSTa objava podrobno opisuje spremembe v najnovejši različici zlonamerne programske opreme za macOS v primerjavi s prejšnjo različico (), opisuje pa tudi, kako lahko avtomatizirate dešifriranje nizov med analizo z uporabo API-ja IDA Hex-Rays.

Analiza
Naslednji trije deli opisujejo analizo vzorca z zgoščevanjem SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Datoteka se imenuje svetilka, ga protivirusni izdelki ESET zaznajo kot OSX/OceanLotus.D.
Zaščita proti odpravljanju napak in peskovniku
Kot vsi macOS- Binarne datoteke OceanLotus, vzorec je pakiran z UPX, vendar ga večina orodij za prepoznavanje pakirnikov ne prepozna kot takega. To je verjetno zato, ker večinoma vsebujejo podpis, ki je odvisen od prisotnosti niza "UPX". Poleg tega so podpisi Mach-O manj pogosti in se manj pogosto posodabljajo. Ta lastnost otežuje statično zaznavanje. Zanimivo je, da je po razpakiranju vstopna točka na začetku razdelka. __cfstring v segmentu .TEXT. Ta razdelek ima atribute zastavic, kot je prikazano na spodnji sliki.

Slika 1. Atributi razdelka MACH-O __cfstring
Kot je prikazano na sliki 2, so kodne lokacije v razdelku __cfstring vam omogoča, da pretentate nekatera orodja za razstavljanje s prikazom kode kot nizov.

Slika 2. Koda stranskih vrat, ki jo IDA zazna kot podatke
Ko se izvede, binarna datoteka ustvari nit kot anti-razhroščevalnik, katerega edini namen je nenehno preverjanje prisotnosti razhroščevalnika. Za ta tok:
— Poskuša odklopiti kateri koli razhroščevalnik, kliče ptrace с PT_DENY_ATTACH kot parameter zahteve
- S klicem funkcije preveri, ali so nekatera ekskluzivna vrata odprta task_get_exception_ports
- Preveri, ali je razhroščevalnik povezan, kot je prikazano na spodnji sliki, s preverjanjem prisotnosti zastavice P_TRACED v trenutnem procesu

Slika 3. Preverjanje povezave razhroščevalnika s funkcijo sysctl
Če nadzorni pes zazna prisotnost razhroščevalnika, se funkcija pokliče exit. Poleg tega vzorec nato preveri okolje z izvajanjem dveh ukazov:
ioreg -l | grep -e "Manufacturer" и sysctl hw.model
Vzorec nato preveri vrnjeno vrednost glede na trdo kodiran seznam nizov iz znanih virtualizacijskih sistemov: acle, VMware, VirtualBox ali vzporednice. Nazadnje naslednji ukaz preveri, ali je stroj eden od naslednjih »MBP«, »MBA«, »MB«, »MM«, »IM«, »MP« in »XS«. To so kode sistemskih modelov, na primer »MBP« pomeni MacBook Pro, »MBA« pomeni MacBook Air itd.
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}
Osnovni dodatki
Čeprav se ukazi za zadnja vrata niso spremenili od raziskav Trend Micro, smo opazili nekaj drugih sprememb. Strežniki C&C, uporabljeni v tem vzorcu, so dokaj novi in ustvarjeni 22.10.2018. XNUMX. XNUMX.
- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com
URL vira se je spremenil v /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Prvi paket, poslan strežniku C&C, vsebuje več informacij o gostiteljskem računalniku, vključno z vsemi podatki, zbranimi z ukazi v spodnji tabeli.

Poleg te spremembe konfiguracije vzorec ne uporablja knjižnice za filtriranje omrežja , ampak zunanja knjižnica. Da bi ga našli, poskusi stranska vrata dešifrirati vsako datoteko v trenutnem imeniku z uporabo AES-256-CBC s ključem gFjMXBgyXWULmVVVzyxy, obložen z ničlami. Vsaka datoteka je dešifrirana in shranjena kot /tmp/store, in poskus nalaganja kot knjižnice se izvede s funkcijo . Ko poskus dešifriranja povzroči uspešen klic dlopen, backdoor ekstrahira izvožene funkcije Boriry и ChadylonV, ki so očitno odgovorni za omrežno komunikacijo s strežnikom. Nimamo kapalke ali drugih datotek z izvirne lokacije vzorca, zato te knjižnice ne moremo razčleniti. Ker je komponenta šifrirana, se pravilo YARA, ki temelji na teh nizih, ne bo ujemalo z datoteko, najdeno na disku.
Kot je opisano v zgornjem članku, ustvarja clientID. Ta ID je zgoščena vrednost MD5 vrnjene vrednosti enega od naslednjih ukazov:
- 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}' (pridobite naslov MAC)
- neznana ekipa ("x1ex72x0a«), ki se uporablja v prejšnjih vzorcih
Pred zgoščevanjem se vrnjeni vrednosti doda "0" ali "1", ki označuje korenske pravice. to clientID shranjeno v /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, če se koda izvaja kot root ali v ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML v vseh drugih primerih. Datoteka je običajno skrita s funkcijo , se njegov časovni žig spremeni z ukazom touch –t z naključno vrednostjo.
Dekodiranje nizov
Kot pri prejšnjih možnostih so nizi šifrirani z uporabo AES-256-CBC (šestnajstiški ključ: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 obložen z ničlami in IV napolnjen z ničlami) skozi funkcijo . Ključ se je spremenil glede na prejšnje različice, a ker skupina še vedno uporablja isti algoritem šifriranja nizov, je dešifriranje mogoče avtomatizirati. Poleg te objave izdajamo skript IDA, ki uporablja API Hex-Rays za dešifriranje nizov v binarni datoteki. Ta skript lahko pomaga pri prihodnji analizi OceanLotusa in analizi obstoječih vzorcev, ki nam jih še ni uspelo pridobiti. Skript temelji na univerzalni metodi za sprejemanje argumentov, posredovanih funkciji. Poleg tega poišče dodelitve parametrov. Metodo je mogoče znova uporabiti za pridobitev seznama funkcijskih argumentov in jo nato posredovati povratnemu klicu.
Poznavanje prototipa funkcije dešifrirati, skript najde vse navzkrižne sklice na to funkcijo, vse argumente, nato dešifrira podatke in postavi golo besedilo v komentar na naslov navzkrižnega sklica. Da skript deluje pravilno, mora biti nastavljen na abecedo po meri, ki jo uporablja funkcija dekodiranja base64, in mora biti definirana globalna spremenljivka, ki vsebuje dolžino ključa (v tem primeru DWORD, glejte sliko 4).

Slika 4. Definicija globalne spremenljivke key_len
V oknu Funkcija lahko z desno miškino tipko kliknete funkcijo dešifriranja in kliknete »Izvleči in dešifriraj argumente«. Skript mora dešifrirane vrstice postaviti v komentarje, kot je prikazano na sliki 5.

Slika 5. Dešifrirano besedilo je postavljeno med komentarje
Na ta način so dešifrirani nizi priročno nameščeni skupaj v oknu IDA xrefs za to funkcijo, kot je prikazano na sliki 6.

Slika 6. Funkcija Xrefs za f_decrypt
Končni scenarij lahko najdete na .
Izhod
Kot že omenjeno, OceanLotus nenehno izboljšuje in posodablja svoj komplet orodij. Tokrat je kibernetska skupina izboljšala zlonamerno programsko opremo za delo z uporabniki Mac. Koda se ni veliko spremenila, a ker mnogi uporabniki Maca ignorirajo varnostne izdelke, je zaščita zlonamerne programske opreme pred odkrivanjem drugotnega pomena.
Izdelki ESET so že zaznavali to datoteko v času raziskave. Ker je omrežna knjižnica, ki se uporablja za komunikacijo C&C, zdaj šifrirana na disku, natančen omrežni protokol, ki ga uporabljajo napadalci, še ni znan.
Kazalniki kompromisa
Na voljo so tudi indikatorji kompromisa in atributi MITER ATT&CK .
Vir: www.habr.com
