OceanLotus: ažuriranje zlonamjernog softvera za macOS

U ožujku 2019. novi uzorak macOS zlonamjernog softvera iz cyber grupe OceanLotus prenesen je na VirusTotal, popularnu internetsku uslugu skeniranja. Backdoor izvršna datoteka ima iste mogućnosti kao i prethodna verzija zlonamjernog softvera macOS koji smo proučavali, ali njezina se struktura promijenila i postalo ju je teže otkriti. Nažalost, nismo uspjeli pronaći kapaljku povezanu s ovim uzorkom, tako da još ne znamo vektor infekcije.

Nedavno smo objavili post o OceanLotusu i kako operateri pokušavaju osigurati postojanost, ubrzati izvršavanje koda i smanjiti trag na Windows sustavima. Također je poznato da ova cyber grupa ima i komponentu za macOS. Ovaj post opisuje promjene u najnovijoj verziji zlonamjernog softvera za macOS u usporedbi s prethodnom verzijom (opisao Trend Micro), a također opisuje kako možete automatizirati dešifriranje nizova tijekom analize pomoću IDA Hex-Rays API-ja.

OceanLotus: ažuriranje zlonamjernog softvera za macOS

Analiza

Sljedeća tri dijela opisuju analizu uzorka s SHA-1 hashom E615632C9998E4D3E5ACD8851864ED09B02C77D2. Datoteka se zove svjetiljkom, antivirusni proizvodi ESET-a otkrivaju ga kao OSX/OceanLotus.D.

Anti-debugging i sandbox zaštita

Kao i sve macOS OceanLotus binarne datoteke, uzorak je zapakiran s UPX-om, ali ga većina alata za identifikaciju paketa ne prepoznaje kao takvog. To je vjerojatno zato što uglavnom sadrže potpis ovisan o prisutnosti "UPX" niza, osim toga, Mach-O potpisi su rjeđi i ne ažuriraju se tako često. Ova značajka otežava statičku detekciju. Zanimljivo, nakon raspakiranja ulazna točka je na početku dionice __cfstring u segmentu .TEXT. Ovaj odjeljak ima atribute zastavice kao što je prikazano na slici ispod.

OceanLotus: ažuriranje zlonamjernog softvera za macOS
Slika 1. MACH-O __cfstring atributi odjeljka

Kao što je prikazano na slici 2, mjesta koda u odjeljku __cfstring omogućuje vam da prevarite neke alate za rastavljanje prikazivanjem koda kao nizova.

OceanLotus: ažuriranje zlonamjernog softvera za macOS
Slika 2. Backdoor kod koji je IDA otkrila kao podatke

Jednom izvršena, binarna datoteka stvara nit kao antidebugger čija je jedina svrha kontinuirana provjera prisutnosti debuggera. Za ovaj tijek:

— Pokušava otkačiti bilo koji program za ispravljanje pogrešaka, poziva ptrace с PT_DENY_ATTACH kao parametar zahtjeva
- Provjerava jesu li neki ekskluzivni priključci otvoreni pozivom funkcije task_get_exception_ports
- Provjerava je li debugger povezan, kao što je prikazano na donjoj slici, provjerom prisutnosti zastavice P_TRACED u trenutnom procesu

OceanLotus: ažuriranje zlonamjernog softvera za macOS
Slika 3. Provjera veze programa za ispravljanje pogrešaka pomoću funkcije sysctl

Ako pas čuvar otkrije prisutnost programa za ispravljanje pogrešaka, poziva se funkcija exit. Dodatno, uzorak zatim provjerava okruženje izvođenjem dvije naredbe:

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

Uzorak zatim provjerava povratnu vrijednost prema tvrdo kodiranom popisu nizova iz poznatih virtualizacijskih sustava: acle, VMware, virtualbox ili paralele. Konačno, sljedeća naredba provjerava je li stroj jedan od sljedećih “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” i “XS”. Ovo su šifre modela sustava, na primjer, "MBP" znači MacBook Pro, "MBA" znači MacBook Air, itd.

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

Glavni dodaci

Iako se backdoor naredbe nisu promijenile od istraživanja Trend Microa, primijetili smo nekoliko drugih izmjena. C&C poslužitelji koji se koriste u ovom uzorku prilično su novi i kreirani su 22.10.2018.

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

URL resursa promijenjen je u /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Prvi paket poslan C&C poslužitelju sadrži više informacija o glavnom računalu, uključujući sve podatke prikupljene naredbama u donjoj tablici.

OceanLotus: ažuriranje zlonamjernog softvera za macOS

Uz ovu promjenu konfiguracije, uzorak ne koristi biblioteku za mrežno filtriranje libcurl, već vanjska knjižnica. Da bi ga pronašao, backdoor pokušava dešifrirati svaku datoteku u trenutnom direktoriju koristeći AES-256-CBC s ključem gFjMXBgyXWULmVVVzyxy, podstavljen nulama. Svaka datoteka se dekriptira i sprema kao /tmp/store, a pomoću funkcije se pokušava učitati kao biblioteka dlopen. Kada pokušaj dešifriranja rezultira uspješnim pozivom dlopen, backdoor izvlači izvezene funkcije Boriry и ChadylonV, koji su očito odgovorni za mrežnu komunikaciju s poslužiteljem. Nemamo kapaljku ili druge datoteke s izvorne lokacije uzorka, pa ne možemo analizirati ovu biblioteku. Štoviše, budući da je komponenta šifrirana, YARA pravilo temeljeno na ovim nizovima neće odgovarati datoteci pronađenoj na disku.

Kao što je opisano u gornjem članku, stvara ID klijenta. Ovaj ID je MD5 raspršivanje povratne 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}' (preuzmi MAC adresu)
- nepoznati tim ("x1ex72x0a"), koji se koristi u prethodnim uzorcima

Prije raspršivanja, "0" ili "1" se dodaje povratnoj vrijednosti za označavanje root privilegija. Ovaj ID klijenta pohranjeno u /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ako se kod pokreće 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, njegova vremenska oznaka se mijenja pomoću naredbe touch –t sa slučajnom vrijednošću.

Dekodiranje nizova

Kao i kod prethodnih opcija, nizovi su šifrirani pomoću AES-256-CBC (heksadecimalni ključ: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 podstavljen nulama, a IV ispunjen nulama) kroz funkciju CCCrypt. Ključ se promijenio u odnosu na prethodne verzije, ali budući da grupa i dalje koristi isti algoritam za šifriranje niza, dešifriranje se može automatizirati. Uz ovaj post, objavljujemo IDA skriptu koja koristi Hex-Rays API za dešifriranje nizova prisutnih u binarnoj datoteci. Ova skripta može pomoći u budućoj analizi OceanLotusa i analizi postojećih uzoraka koje još nismo uspjeli dobiti. Skripta se temelji na univerzalnoj metodi za primanje argumenata proslijeđenih funkciji. Dodatno, traži dodjele parametara. Metoda se može ponovno upotrijebiti za dobivanje popisa argumenata funkcije i potom proslijediti povratnom pozivu.

Poznavanje prototipa funkcije dešifriranje, skripta pronalazi sve unakrsne reference na ovu funkciju, sve argumente, zatim dekriptira podatke i stavlja običan tekst unutar komentara na adresu unakrsne reference. Da bi skripta radila ispravno, mora biti postavljena na prilagođenu abecedu koju koristi funkcija dekodiranja base64, a mora se definirati globalna varijabla koja sadrži duljinu ključa (u ovom slučaju DWORD, pogledajte sliku 4).

OceanLotus: ažuriranje zlonamjernog softvera za macOS
Slika 4. Definicija globalne varijable key_len

U prozoru Funkcija možete desnom tipkom miša kliknuti funkciju dešifriranja i kliknuti "Izdvoj i dešifriraj argumente". Skripta bi trebala staviti dešifrirane retke u komentare, kao što je prikazano na slici 5.

OceanLotus: ažuriranje zlonamjernog softvera za macOS
Slika 5. Dešifrirani tekst stavlja se u komentare

Na ovaj način se dešifrirani nizovi prikladno postavljaju zajedno u IDA prozor xrefs za ovu funkciju kao što je prikazano na slici 6.

OceanLotus: ažuriranje zlonamjernog softvera za macOS
Slika 6. Xrefs za f_decrypt funkciju

Konačni scenarij možete pronaći na Githubov repozitorij.

Izlaz

Kao što je već spomenuto, OceanLotus neprestano poboljšava i ažurira svoj alat. Ovaj put, cyber grupa je poboljšala zlonamjerni softver za rad s Mac korisnicima. Kod se nije mnogo promijenio, ali budući da mnogi korisnici Maca ignoriraju sigurnosne proizvode, zaštita zlonamjernog softvera od otkrivanja je od sekundarne važnosti.

Proizvodi ESET-a već su otkrivali ovu datoteku u vrijeme 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 još nije poznat.

Pokazatelji kompromisa

Indikatori kompromisa kao i atributi MITER ATT&CK također su dostupni na GitHub.

Izvor: www.habr.com

Dodajte komentar