OceanLotus: pahavara värskendus macOS-ile

2019. aasta märtsis laaditi populaarsesse võrguskannimisteenusesse VirusTotal üles kübergrupi OceanLotuse uus macOS-i pahavara näidis. Tagaukse täitmisfailil on samad võimalused kui meie uuritud macOS-i pahavara eelmisel versioonil, kuid selle struktuur on muutunud ja seda on raskem tuvastada. Kahjuks ei õnnestunud meil selle prooviga seotud tilgutit leida, mistõttu me ei tea veel nakkusvektorit.

Hiljuti avaldasime postitus OceanLotuse kohta ja kuidas operaatorid püüavad pakkuda püsivust, kiirendada koodi täitmist ja minimeerida Windowsi süsteemide jalajälge. Samuti on teada, et sellel kübergrupil on ka macOS-i jaoks mõeldud komponent. See postitus kirjeldab muudatusi macOS-i pahavara uusimas versioonis võrreldes eelmise versiooniga (kirjeldas Trend Micro) ja kirjeldab ka seda, kuidas saate IDA Hex-Rays API abil analüüsi ajal stringide dekrüpteerimist automatiseerida.

OceanLotus: pahavara värskendus macOS-ile

Analüüs

Järgmises kolmes osas kirjeldatakse proovi analüüsi SHA-1 räsi abil E615632C9998E4D3E5ACD8851864ED09B02C77D2. Faili kutsutakse taskulamp, ESET-i viirusetõrjetooted tuvastavad selle kui OSX/OceanLotus.D.

Silumisvastane ja liivakasti kaitse

Nagu kõik macOS OceanLotuse binaarfailid, on näidis pakitud UPX-iga, kuid enamik pakendaja tuvastamise tööriistu ei tunne seda sellisena ära. Tõenäoliselt on see tingitud sellest, et need sisaldavad enamasti UPX-stringi olemasolust sõltuvat signatuuri, lisaks on Mach-O allkirjad vähem levinud ja neid ei värskendata nii sageli. See funktsioon muudab staatilise tuvastamise keeruliseks. Huvitav on see, et pärast lahtipakkimist on sisenemispunkt jaotise alguses __cfstring segmendis .TEXT. Sellel jaotisel on lipu atribuudid, nagu on näidatud alloleval pildil.

OceanLotus: pahavara värskendus macOS-ile
Joonis 1. MACH-O __cfstring sektsiooni atribuudid

Nagu on näidatud joonisel 2, koodi asukohad jaotises __cfstring võimaldab teil petta mõningaid lahtivõtmise tööriistu, kuvades koodi stringidena.

OceanLotus: pahavara värskendus macOS-ile
Joonis 2. IDA poolt andmetena tuvastatud tagaukse kood

Pärast käivitamist loob kahendfail silurivastase lõime, mille ainus eesmärk on pidevalt siluri olemasolu kontrollida. Selle voo jaoks:

— Proovib silurit lahti ühendada, helistades ptrace с PT_DENY_ATTACH päringu parameetrina
- Kontrollib funktsiooni kutsumisega, kas mõned eksklusiivsed pordid on avatud task_get_exception_ports
- Kontrollib, kas silur on ühendatud, nagu on näidatud alloleval joonisel, kontrollides lipu olemasolu P_TRACED praeguses protsessis

OceanLotus: pahavara värskendus macOS-ile
Joonis 3. Siluri ühenduse kontrollimine funktsiooni sysctl abil

Kui valvekoer tuvastab siluri olemasolu, kutsutakse funktsioon välja exit. Lisaks kontrollib proov keskkonda, käivitades kaks käsku:

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

Seejärel kontrollib näidis tagastatavat väärtust tuntud virtualiseerimissüsteemide kõvakodeeritud stringide loendiga: acle, vmware, virtualbox või paralleele. Lõpuks kontrollib järgmine käsk, kas masin on üks järgmistest "MBP", "MBA", "MB", "MM", "IM", "MP" ja "XS". Need on süsteemimudeli koodid, näiteks "MBP" tähendab MacBook Pro'd, "MBA" tähendab MacBook Airi jne.

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

Peamised täiendused

Kuigi tagaukse käsud pole pärast Trend Micro uurimistööd muutunud, märkasime mõningaid muid muudatusi. Selles proovis kasutatud C&C serverid on üsna uued ja loodud 22.10.2018.

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

Ressursi URL-iks on muudetud /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Esimene C&C serverile saadetud pakett sisaldab hostmasina kohta lisateavet, sealhulgas kõiki allolevas tabelis olevate käskude abil kogutud andmeid.

OceanLotus: pahavara värskendus macOS-ile

Lisaks sellele konfiguratsioonimuudatusele ei kasuta näidis võrgu filtreerimiseks teeki libcurl, vaid väline raamatukogu. Selle leidmiseks proovib tagauks dekrüpteerida kõik praeguses kataloogis olevad failid, kasutades võtmega AES-256-CBC gFjMXBgyXWULmVVVzyxy, polsterdatud nullidega. Iga fail dekrüpteeritakse ja salvestatakse kui /tmp/store, ja seda proovitakse laadida teekina funktsiooni abil dlopen. Kui dekrüpteerimiskatse tulemuseks on edukas kõne dlopen, tagauks ekstraktib eksporditud funktsioonid Boriry и ChadylonV, mis ilmselt vastutavad võrgusuhtluse eest serveriga. Meil ei ole näidise algsest asukohast pärit tilgutit ega muid faile, seega ei saa me seda teeki sõeluda. Lisaks, kuna komponent on krüptitud, ei ühti nendel stringidel põhinev YARA reegel kettalt leitud failiga.

Nagu ülaltoodud artiklis kirjeldatud, loob see kliendi ID. See ID on ühe järgmistest käskudest tagastatava väärtuse MD5 räsi:

- 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}' (hankige MAC-aadress)
- tundmatu meeskond ("x1ex72x0a"), mida on kasutatud eelmistes proovides

Enne räsimist lisatakse tagastusväärtusele "0" või "1", mis näitab juurõigusi. See kliendi ID sisse salvestatud /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, kui kood käivitatakse administraatorina või kõikidel muudel juhtudel failis ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML. Tavaliselt peidetakse fail funktsiooni abil _chlipud, selle ajatemplit muudetakse käsuga touch –t juhusliku väärtusega.

Stringide dekodeerimine

Nagu eelmistegi valikute puhul, krüpteeritakse stringid AES-256-CBC abil (kuueteistkümnendvõti: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 polsterdatud nullidega ja IV täidetud nullidega) funktsiooni kaudu CCCcrypt. Võti on varasemate versioonidega võrreldes muutunud, kuid kuna grupp kasutab endiselt sama stringi krüpteerimisalgoritmi, saab dekrüpteerimist automatiseerida. Lisaks sellele postitusele anname välja IDA skripti, mis kasutab binaarfailis olevate stringide dekrüpteerimiseks Hex-Rays API-d. See skript võib aidata tulevikus OceanLotuse analüüsimisel ja olemasolevate proovide analüüsimisel, mida meil pole veel õnnestunud hankida. Skript põhineb universaalsel meetodil funktsioonile edastatud argumentide vastuvõtmiseks. Lisaks otsib see üles parameetrite määramised. Meetodit saab uuesti kasutada funktsiooni argumentide loendi hankimiseks ja seejärel tagasihelistamisele edastamiseks.

Funktsiooni prototüübi tundmine dekrüpteerida, leiab skript kõik ristviited sellele funktsioonile, kõik argumendid, seejärel dekrüpteerib andmed ja asetab lihtteksti kommentaari sisse ristviite aadressile. Skripti korrektseks tööks peab see olema seatud kohandatud tähestikule, mida kasutab base64 dekodeerimisfunktsioon, ja määratleda globaalne muutuja, mis sisaldab võtme pikkust (antud juhul DWORD, vt joonis 4).

OceanLotus: pahavara värskendus macOS-ile
Joonis 4. Globaalse muutuja key_len definitsioon

Funktsiooniaknas saate paremklõpsata dekrüpteerimisfunktsiooni ja klõpsata "Argumentide ekstraktimine ja dekrüpteerimine". Skript peaks paigutama dekrüpteeritud read kommentaaridesse, nagu on näidatud joonisel 5.

OceanLotus: pahavara värskendus macOS-ile
Joonis 5. Dekrüpteeritud tekst paigutatakse kommentaaridesse

Nii paigutatakse dekrüpteeritud stringid mugavalt IDA aknasse kokku xrefid selle funktsiooni jaoks, nagu on näidatud joonisel 6.

OceanLotus: pahavara värskendus macOS-ile
Joonis 6. Xrefs to f_decrypt funktsiooni

Lõpliku skripti leiate aadressilt Githubi hoidla.

Väljund

Nagu juba mainitud, täiustab ja uuendab OceanLotus pidevalt oma tööriistakomplekti. Seekord on kübergrupp täiustanud pahavara Maci kasutajatega töötamiseks. Kood pole palju muutunud, kuid kuna paljud Maci kasutajad eiravad turvatooteid, on pahavara kaitsmine tuvastamise eest teisejärgulise tähtsusega.

ESET-i tooted tuvastasid selle faili juba uurimise ajal. Kuna C&C suhtluseks kasutatav võrguteek on nüüd kettal krüpteeritud, pole ründajate kasutatav täpne võrguprotokoll veel teada.

Kompromissi näitajad

Samuti on saadaval kompromissi indikaatorid ja MITER ATT&CK atribuudid GitHub.

Allikas: www.habr.com

Lisa kommentaar