OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS

2019. gada martā populārajā tieÅ”saistes skenÄ“Å”anas pakalpojumā VirusTotal tika augÅ”upielādēts jauns macOS ļaunprātÄ«gas programmatÅ«ras paraugs no kibergrupas OceanLotus. Aizmugurējo durvju izpildāmajam failam ir tādas paÅ”as iespējas kā iepriekŔējai mÅ«su pētÄ«tās macOS ļaunprātÄ«gas programmatÅ«ras versijai, taču tā struktÅ«ra ir mainÄ«jusies, un to ir kļuvis grÅ«tāk noteikt. Diemžēl mēs nevarējām atrast ar Å”o paraugu saistÄ«tu pilinātāju, tāpēc mēs vēl nezinām infekcijas vektoru.

Mēs nesen publicējām ziņa par OceanLotus un to, kā operatori cenÅ”as nodroÅ”ināt noturÄ«bu, paātrināt koda izpildi un samazināt Windows sistēmu nospiedumu. Ir arÄ« zināms, ka Å”ai kibergrupai ir arÄ« macOS komponents. Å ajā ziņojumā ir sniegta informācija par izmaiņām jaunākajā MacOS ļaunprātÄ«gas programmatÅ«ras versijā salÄ«dzinājumā ar iepriekŔējo versiju (aprakstÄ«jis Trend Micro), kā arÄ« aprakstÄ«ts, kā analÄ«zes laikā varat automatizēt virkņu atÅ”ifrÄ“Å”anu, izmantojot IDA Hex-Rays API.

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS

Analīze

Nākamajās trīs daļās ir aprakstīta parauga analīze ar SHA-1 jaucējkodu E615632C9998E4D3E5ACD8851864ED09B02C77D2. Fails tiek izsaukts lukturītis, ESET antivīrusu produkti to nosaka kā OSX/OceanLotus.D.

Pret atkļūdoŔanas un smilŔkastes aizsardzība

Tāpat kā visi macOS OceanLotus binārie faili, paraugs ir iesaiņots ar UPX, taču lielākā daļa pakotņu identifikācijas rÄ«ku to neatpazÄ«st. Iespējams, tas ir tāpēc, ka tie galvenokārt satur parakstu, kas ir atkarÄ«gs no ā€œUPXā€ virknes klātbÅ«tnes, turklāt Mach-O paraksti ir retāk sastopami un netiek tik bieži atjaunināti. Å Ä« funkcija apgrÅ«tina statiskā noteikÅ”anu. Interesanti, ka pēc izpakoÅ”anas ieejas punkts atrodas sadaļas sākumā __cfstring segmentā .TEXT. Å ai sadaļai ir karoga atribÅ«ti, kā parādÄ«ts tālāk esoÅ”ajā attēlā.

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS
1. attēls. MACH-O __cfstring sadaļas atribūti

Kā parādÄ«ts 2. attēlā, koda atraÅ”anās vietas sadaļā __cfstring ļauj apmānÄ«t dažus izjaukÅ”anas rÄ«kus, parādot kodu kā virknes.

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS
2. attēls. Aizmugures durvju kods, ko IDA atklāja kā datus

Kad tas ir izpildīts, binārais fails izveido pavedienu kā pretatkļūdotāju, kura vienīgais mērķis ir nepārtraukti pārbaudīt, vai nav atkļūdotāja. Šai plūsmai:

ā€” Mēģina atkabināt jebkuru atkļūdotāju, zvana ptrace с PT_DENY_ATTACH kā pieprasÄ«juma parametrs
- Pārbauda, ā€‹ā€‹vai daži ekskluzÄ«vi porti ir atvērti, izsaucot funkciju task_get_exception_ports
- Pārbauda, ā€‹ā€‹vai atkļūdotājs ir pievienots, kā parādÄ«ts attēlā zemāk, pārbaudot karoga klātbÅ«tni P_TRACED paÅ”reizējā procesā

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS
3. attēls. Atkļūdotāja savienojuma pārbaude, izmantojot funkciju sysctl

Ja sargsuns konstatē atkļūdotāja klātbūtni, funkcija tiek izsaukta exit. Turklāt paraugs pārbauda vidi, izpildot divas komandas:

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

Pēc tam paraugs pārbauda atgriezto vērtÄ«bu, salÄ«dzinot ar cieto kodu virkņu sarakstu no zināmām virtualizācijas sistēmām: acle, vmware, VirtualBox vai paralēles. Visbeidzot, nākamā komanda pārbauda, ā€‹ā€‹vai iekārta ir viens no Å”iem ā€œMBPā€, ā€œMBAā€, ā€œMBā€, ā€œMMā€, ā€œIMā€, ā€œMPā€ un ā€œXSā€. Tie ir sistēmas modeļu kodi, piemēram, ā€œMBPā€ nozÄ«mē MacBook Pro, ā€œMBAā€ nozÄ«mē MacBook Air utt.

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

Galvenie papildinājumi

Lai gan aizmugures durvju komandas nav mainÄ«juŔās kopÅ” Trend Micro pētÄ«juma, mēs pamanÄ«jām dažas citas modifikācijas. Å ajā paraugā izmantotie C&C serveri ir diezgan jauni un izveidoti 22.10.2018.

Sākot no daff.faybilodeau[.]com
Sākot no sarc.onteagleroad[.]com
Sākot no au.charlineopkeston[.]com

Resursa URL ir mainīts uz /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Pirmajā C&C serverim nosÅ«tÄ«tajā paketē ir ietverta plaŔāka informācija par resursdatoru, tostarp visi dati, kas savākti, izmantojot tālāk esoŔās tabulas komandas.

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS

Papildus Ŕīm konfigurācijas izmaiņām paraugā netiek izmantota bibliotēka tÄ«kla filtrÄ“Å”anai libcurl, bet ārēja bibliotēka. Lai to atrastu, aizmugures durvis mēģina atÅ”ifrēt katru failu paÅ”reizējā direktorijā, izmantojot AES-256-CBC ar atslēgu gFjMXBgyXWULmVVVzyxy, polsterēts ar nullēm. Katrs fails tiek atÅ”ifrēts un saglabāts kā /tmp/store, un mēģinājums to ielādēt kā bibliotēku tiek veikts, izmantojot funkciju dlopen. Ja atÅ”ifrÄ“Å”anas mēģinājuma rezultāts ir veiksmÄ«gs zvans dlopen, aizmugures durvis izvilk eksportētās funkcijas Boriry Šø ChadylonV, kas acÄ«mredzot ir atbildÄ«gi par tÄ«kla saziņu ar serveri. Mums nav pilinātāja vai citu failu no parauga sākotnējās atraÅ”anās vietas, tāpēc mēs nevaram parsēt Å”o bibliotēku. Turklāt, tā kā komponents ir Å”ifrēts, YARA kārtula, kuras pamatā ir Ŕīs virknes, neatbilst diskā atrastajam failam.

Kā aprakstÄ«ts iepriekÅ” rakstā, tas rada klienta ID. Å is ID ir vienas no tālāk norādÄ«to komandu atgrieÅ”anas vērtÄ«bas MD5 jaucējvārds:

Sākot no ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
Sākot no ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
Sākot no ifconfig en0 | awk '/ether /{print $2}' (iegūstiet MAC adresi)
- nezināma komanda ("x1ex72x0a"), kas tika izmantots iepriekŔējos paraugos

Pirms jaukÅ”anas atgrieÅ”anas vērtÄ«bai tiek pievienots "0" vai "1", lai norādÄ«tu saknes tiesÄ«bas. Å is klienta ID glabājas /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ja kods tiek palaists kā root vai mapē ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML visos citos gadÄ«jumos. Fails parasti tiek paslēpts, izmantojot funkciju _chflags, tā laikspiedols tiek mainÄ«ts, izmantojot komandu touch ā€“t ar nejauÅ”u vērtÄ«bu.

Stīgu dekodēŔana

Tāpat kā iepriekŔējās opcijās, virknes tiek Å”ifrētas, izmantojot AES-256-CBC (heksadecimālā atslēga: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 polsterēts ar nullēm un IV piepildÄ«ts ar nullēm), izmantojot funkciju CCCcrypt. Atslēga ir mainÄ«ta salÄ«dzinājumā ar iepriekŔējām versijām, taču, tā kā grupa joprojām izmanto to paÅ”u virknes Å”ifrÄ“Å”anas algoritmu, atÅ”ifrÄ“Å”anu var automatizēt. Papildus Å”ai ziņai mēs izlaižam IDA skriptu, kas izmanto Hex-Rays API, lai atÅ”ifrētu binārajā failā esoŔās virknes. Å is skripts var palÄ«dzēt turpmākajā OceanLotus analÄ«zē un esoÅ”o paraugu analÄ«zē, ko mēs vēl neesam spējuÅ”i iegÅ«t. Skripts ir balstÄ«ts uz universālu metodi funkcijai nodoto argumentu saņemÅ”anai. Turklāt tas meklē parametru pieŔķirÅ”anu. Å o metodi var izmantot atkārtoti, lai iegÅ«tu funkciju argumentu sarakstu un pēc tam nodotu to atzvanÄ«Å”anai.

Zinot funkcijas prototipu atÅ”ifrēt, skripts atrod visas savstarpējās atsauces uz Å”o funkciju, visus argumentus, pēc tam atÅ”ifrē datus un ievieto vienkārÅ”u tekstu komentārā savstarpējās atsauces adresē. Lai skripts darbotos pareizi, tas ir jāiestata uz pielāgoto alfabētu, ko izmanto base64 dekodÄ“Å”anas funkcija, un ir jādefinē globālais mainÄ«gais, kas satur atslēgas garumu (Å”ajā gadÄ«jumā DWORD, skatiet 4. attēlu).

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS
4. attēls. Globālā mainīgā key_len definīcija

Funkciju logā varat ar peles labo pogu noklikŔķināt uz atÅ”ifrÄ“Å”anas funkcijas un noklikŔķināt uz "Izvilkt un atÅ”ifrēt argumentus". Skriptam ir jāievieto atÅ”ifrētās rindas komentāros, kā parādÄ«ts 5. attēlā.

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS
Attēls 5. AtÅ”ifrētais teksts tiek ievietots komentāros

Tādā veidā atÅ”ifrētās virknes tiek ērti novietotas kopā IDA logā xrefs Å”ai funkcijai, kā parādÄ«ts 6. attēlā.

OceanLotus: ļaunprātīgas programmatūras atjauninājums operētājsistēmai macOS
6. attēls. Xrefs uz f_decrypt funkciju

Galīgo skriptu var atrast vietnē Github krātuve.

secinājums

Kā jau minēts, OceanLotus pastāvÄ«gi uzlabo un atjaunina savu rÄ«ku komplektu. Å oreiz kibergrupa ir uzlabojusi ļaunprogrammatÅ«ru darbam ar Mac lietotājiem. Kods nav Ä«paÅ”i mainÄ«jies, taču, tā kā daudzi Mac lietotāji ignorē droŔības produktus, ļaunprātÄ«gas programmatÅ«ras aizsardzÄ«ba pret atklāŔanu ir sekundāra nozÄ«me.

ESET produkti jau atrada Å”o failu izpētes laikā. Tā kā C&C saziņai izmantotā tÄ«kla bibliotēka tagad ir Å”ifrēta diskā, precÄ«zs uzbrucēju izmantotais tÄ«kla protokols vēl nav zināms.

Kompromisa rādītāji

Ir pieejami arī kompromisa indikatori, kā arī MITER ATT&CK atribūti GitHub.

Avots: www.habr.com

Pievieno komentāru