OceanLotus: jauns ļaunatūras atjauninājums macOS

2019. gada martā VirusTotal, populārs tiešsaistes skenēšanas pakalpojums, tika augšupielādēts jauns ļaunprogrammatūras paraugs macOS kibergrupas OceanLotus. Izpildāmais fails ar aizmugures durvīm ir ar tādām pašām spējām kā iepriekšējā mūsu izpētītā ļaunprogrammatūras versija macOS, taču tā struktūra ir mainījusies, un to ir grūtāk atklāt. Diemžēl mēs neesam spējuši atrast saistīto izplatītāju, tādēļ pagaidām nezinu inficēšanās vektoru.

Nesen mēs publicējām ierakstu par OceanLotus un par to, kā operatori cenšas nodrošināt noturību, paātrināt koda izpildi un samazināt klātbūtnes pēdas Windows sistēmās. Ir zināms arī, ka šai kibergrupai ir komponents macOS. Šajā ierakstā sīkāk tiek izklāstītas izmaiņas jaunākajā ļaunprogrammatūras versijā macOS salīdzinājumā ar iepriekšējo variantu (aprakstītu Trend Micro), kā arī stāstīts, kā analīzes laikā var automatizēt rindu atšifrēšanu, izmantojot IDA Hex-Rays API.

OceanLotus: jauns ļaunatūras atjauninājums macOS

Analīze

Nākamajās trīs daļās tiek aprakstīta parauga analīze ar SHA-1 hašu E615632C9998E4D3E5ACD8851864ED09B02C77D2. Fails saucas flashlightd, antivīrusu produkti ESET to identificē kā OSX/OceanLotus.D.

Anti-debugging un smilšu kastes aizsardzība

Kā visi macOS binārie faili OceanLotus, paraugs ir iepakots ar UPX, taču vairums iepakojuma identifikatoru rīku to neatzīst kā tādu. Iespējams, tāpēc, ka tie galvenokārt satur parakstu, kas atkarīgs no burtu “UPX” klātbūtnes; turklāt Mach-O paraksti ir sastopami retāk un netiek tik bieži atjaunināti. Šī īpatnība apgrūtina statisko atklāšanu. Interesanti, ka pēc izpakotā punkta ieeja atrodas nodaļas __cfstring segmentā .TEXT. Šajā nodaļā ir atribūti, kā parādīts attēlā zemāk.

OceanLotus: jauns ļaunatūras atjauninājums macOS
Attēls 1. MACH-O nodaļas __cfstring atribūti

Kā redzams attēlā 2, koda atrašanās vietas nodaļā __cfstring ļauj apmānīt dažus disasembleru rīkus, parādot kodu kā virknes.

OceanLotus: jauns ļaunatūras atjauninājums macOS
Attēls 2. Aizmugures durvju kods tiek identificēts kā dati IDA

Palaistot bināro failu, tas izveido pavedienu, kas kalpo kā aizsardzība pret atkļūdošanu, vienīgais mērķis ir nepārtraukti pārbaudīt debuggara klātbūtni. Lai to izdarītu, pavedienu:

— Mēģina atbrīvot jebkuru debuggara, izsaucot ptrace ar PT_DENY_ATTACH kā pieprasījuma parametrs
— Pārbauda, vai ir atvērti daži izņēmuma porti, izsaucot funkciju uzdevums_get_exception_ports
— Pārbauda, vai ir pievienots debuggers, kā parādīts zemāk redzamajā attēlā, pārbaudot flaga esamību P_TRACED pašreizējā procesā

OceanLotus: jauns ļaunatūras atjauninājums macOS
Attēls 3. Debuggera pieslēgšanās pārbaude, izmantojot funkciju sysctl

Ja uzraudzības shēma konstatē debuggers, tiek izsaukta funkcija exit. Turklāt, pēc tam paraugs pārbauda vidi, izpildot divas komandas:

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

Pēc tam paraugs pārbauda atgrieztā vērtība salīdzinājumā ar cieti kodētu pazīstamo virtualizācijas sistēmu virkni: acle, vmware, virtualbox vai parallels. Visbeidzot, nākamā komanda pārbauda, vai mašīna ir viena no šīm “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” un “XS”. Tās ir sistēmas modeļa kodi, piemēram, “MBP” nozīmē MacBook Pro, “MBA” – MacBook Air utt.

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

Galvenie papildinājumi

Neskatoties uz to, ka aizmugures komandas nav mainījušās kopš Trend Micro pētījuma, mēs ievērojām dažus citus modifikācijas. C&C serveri, ko izmanto šajā paraugā, ir diezgan jauni, to izveides datums ir 22.10.2018.

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

Resursa URL ir mainījies uz /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Pirmais pakets, kas sūtīts uz C&C serveri, satur vairāk informācijas par mājmašīnu, tostarp visus datus, ko vāc komandas no zemāk esošās tabulas.

OceanLotus: jauns ļaunatūras atjauninājums macOS

Turklāt, konfigurācijas izmaiņas, paraugs izmanto ne bibliotēku libcurl, bet ārēju bibliotēku. Lai to atrastu, aizmugure mēģina atšifrēt katru failu pašreizējā direktorijā, izmantojot AES-256-CBC ar atslēgu gFjMXBgyXWULmVVVzyxy, papildinātu ar nullēm. Katrs fails tiek atšifrēts un saglabāts kā /tmp/store, mēģinājums to augšupielādēt kā bibliotēku tiek veikts, izmantojot funkciju dlopen. Kad atšifrēšanas mēģinājums noved pie veiksmīga izsaukuma dlopen, aizmugure izvelk eksportētās funkcijas Boriry un ChadylonV, kuras, šķiet, atbild par tīkla mijiedarbību ar serveri. Mums nav dropera vai citu failu no parauga sākotnējā avota, tāpēc mēs nevaram analizēt šo bibliotēku. Turklāt, ņemot vērā, ka komponents ir šifrēts, YARA noteikums, kas balstīts uz šīm virkni, neatbilst failam, kas atrasts diskā.

Kā aprakstīts iepriekš minētajā rakstā, tiek izveidots cliendID. Šis identifikators ir MD5 heša atsakāmās vērtības no kādas no šīm komandām:

— 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}' (iegūst MAC adresi)
— nezināma komanda ("x1ex72x0a"), kas tiek izmantota iepriekšējās paraugos

Pirms hešēšanas tam pievieno simbolu "0" vai "1", kas norāda uz root privilēģijām. Šis clientID ir saglabāts /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ja kods tiek izpildīts ar root vai ~\/Library\/SmartCardsServices\/Technology\/PlugIns\/drivers\/snippets.ecgML visos citos gadījumos. Vēlams fails tiek paslēpts ar funkciju _chflags, tā laika zīmogs tiek mainīts ar komandu touch –t ar nejaušu vērtību.

Virknu atšifrēšana

Kā iepriekšējās versijās, virknes ir šifrētas, izmantojot AES-256-CBC (heksadecimālais atslēga: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 papildināts ar nullēm, un IV ir piepildīts ar nullēm) ar funkcijas starpniecību CCCrypt. Atslēga ir mainīta salīdzinājumā ar iepriekšējām versijām, bet, ņemot vērā, ka grupa joprojām izmanto to pašu virkņu šifrēšanas algoritmu, atšifrēšana var tikt automatizēta. Papildus šim ierakstam mēs izstrādājam IDA skriptu, kas izmanto Hex-Rays API virkņu atšifrēšanai, kas atrodas binārajā failā. Šis skripts var palīdzēt turpmākajā OceanLotus analīzē un esošo paraugu analīzē, kurus mēs vēl neesam spējuši iegūt. Skripta pamatā ir universāla metode argumentu iegūšanai, kas nodoti funkcijai. Turklāt tas meklē parametrus. Metodi var izmantot atkārtoti, lai iegūtu funkcijas argumentu sarakstu un pēc tam nodotu to atgriezeniskajā izsaukumā.

Zinot funkcijas prototipu decrypt, skripts atradīs visus krusteniskās atsauces uz šo funkciju, visus argumentus, pēc tam atšifrēs datus un ievietos neapstrādātu tekstu komentārā pie krusteniskās atsauces adreses. Lai skripts darbotos pareizi, tam jābūt iestatītam pielāgotam alfabētam, ko izmanto base64 atšifrēšanas funkcijā, un ir jādefinē globālā mainīgā, kas satur atslēgas garumu (šajā gadījumā DWORD, skatīt 4. attēlu).

OceanLotus: jauns ļaunatūras atjauninājums macOS
4. attēls. Globālās mainīgās key_len definēšana

Funkciju logā, ar peles labo pogu var izsaukt atšifrēšanas funkciju un noklikšķināt uz «Izvilkt un atšifrēt argumentus». Skriptam vajadzētu ievietot atšifrētās virknes komentāros, kā parādīts 5. attēlā.

OceanLotus: jauns ļaunatūras atjauninājums macOS
Attēls 5. Atšifrētais teksts ievietots komentāros

Tādējādi atšifrētās virknes tiek ērti izvietotas kopā IDA logā xrefs šai funkcijai, kā parādīts 6. attēlā.

OceanLotus: jauns ļaunatūras atjauninājums macOS
Attēls 6. Xrefs uz funkciju f_decrypt

Pēdējo skripta variantu var atrast Github repository.

Izvade

Kā jau tika minēts, OceanLotus pastāvīgi uzlabo un atjaunina savu rīku komplektu. Šoreiz kibergruppa ir uzlabojusi ļaunprātīgu programmatūru, kas darbojas ar Mac lietotājiem. Kods nav krietni mainījies, bet, ņemot vērā, ka daudzi Mac lietotāji ignorē drošības produktus, ļaunprogrammatūras aizsardzība no atklāšanas ir sekundāra.

ESET produkti jau bija noteikuši šo failu izpētes brīdī. Tā kā C&C komunikācijai izmantotā tīkla bibliotēka tagad ir šifrēta diskā, precīzs tīkla protokols, ko izmanto uzbrucēji, joprojām nav zināms.

Kompromitēšanas indikatoru

Kompromitācijas rādītāji, kā arī MITRE ATT&CK atribūti ir pieejami GitHub.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster