2019. aasta mĂ€rtsis laaditi VirusTotalisse, populaarse veebipĂ”hise skanneri teenusesse, uus macOS pahavara nĂ€ide, mille on loonud OceanLotus kĂŒbergrupp. Tagasiuksena töötava tĂ€itefaili omadused on samad, mis eelnevalt uuritud malwaari versioonil macOS-ile, kuid selle struktuur on muutunud ja tuvastamine on keerulisem. Kahjuks ei leidnud me selle nĂ€idisega seotud droppijat, seega ei tea me praegu nakatumise vektorit.
Hiljuti avaldasime ja sellest, kuidas operaatorid ĂŒritavad tagada pĂŒsivust, kiirendada koodi tĂ€itmist ja minimeerida oma jĂ€lgede jÀÀmist Windowsi sĂŒsteemides. On teada, et sellel kĂŒbergrupil on ka komponent macOS-ile. KĂ€esolevas postituses kĂ€sitletakse uusima macOS pahavara versiooni muudatusi vĂ”rreldes eelneva versiooniga (), samuti kirjeldatakse, kuidas analĂŒĂŒsi kĂ€igus saab IDA Hex-Rays API kaudu stringide dekodeerimist automatiseerida.

AnalĂŒĂŒs
JĂ€rgmistes kolmes osas kĂ€sitletakse analĂŒĂŒsi nĂ€idise kohta, mille SHA-1 hashes on E615632C9998E4D3E5ACD8851864ED09B02C77D2. Faili nimi on flashlightd, ESETi viirusetĂ”rje tooted tuvastavad selle kui OSX/OceanLotus.D.
Antidebugging ja liivakasti kaitse
Kuna kÔik macOS binaarid OceanLotus, on nÀidis pakitud UPX-iga, kuid enamik identifitseerimise tööriistu ei tunne seda Àra. TÔenÀoliselt seetÔttu, et need sisaldavad peamiselt allkirja, mis sÔltub stringi 'UPX' olemasolust; lisaks on Mach-O allkirjad harvemini esinevad ja mitte nii tihti uuendatud. See omadus muudab staatilise tuvastamise keeruliseks. Huvitav on see, et pÀrast lahtipakkimist asub sisenemispunkt jaotise alguses. __cfstring jaotises .TEXT. Selles jaotises on atribuudid nagu on nÀidatud alloleval joonisel.

Joonis 1. MACH-O __cfstring jaotise atribuudid
Nagu on nÀidatud joonisel 2, vÔimaldab koodi asukoht jaotises teatud desassembleerimise tööriistu petta, kuvades koodi stringidena. __cfstring Joonis 2. Tagaukse kood mÀÀratakse IDA-s andmetena

PÀrast kÀivitamist loob binaarfail voolu debugeerimise kaitse vahendina, mille ainus eesmÀrk on pidev debugeerija olemasolu kontrollimine. Selleks voog:
PÀrast kÀivitamist loob binaarfail voolu, mis toimib kaitsemeetmena silumise eest, mille ainus eesmÀrk on pidevalt kontrollida silumise olemasolu. Selleks vool:
â PĂŒĂŒab igasuguseid debugeerijaid eemaldada, kutsudes esile ptrace koos PT_DENY_ATTACH pĂ€ringu parameetrina
â Kontrollib, kas mĂ”ned erandid on avatud, kutsudes vĂ€lja funktsiooni task_get_exception_ports
â Kontrollib, kas debugeerija on ĂŒhendatud, nagu on nĂ€idatud alloleval joonisel, kontrollides lipu olemasolu P_TRACED praegu kĂ€imasolevas protsessis

Joonis 3. Debugeerija ĂŒhenduse kontrollimine funktsiooni sysctl kaudu
Kui valvemehhanism tuvastab debugeerija olemasolu, kutsutakse vÀlja funktsioon exit. Lisaks kontrollib see seejÀrel keskkonda, tÀites kaks kÀsku:
ioreg -l | grep -e "Manufacturer" ja sysctl hw.model
PĂ€rast seda kontrollib nĂ€idis tagastatavat vÀÀrtust rangelt kodeeritud tuntud virtualiseerimissĂŒsteemide nimekirja kaudu: acle, vmware, virtualbox vĂ”i parallels. LĂ”puks kontrollib jĂ€rgmine kĂ€sk, kas masin on ĂŒks jĂ€rgmistest: âMBPâ, âMBAâ, âMBâ, âMMâ, âIMâ, âMPâ ja âXSâ. Need on sĂŒsteemi mudelikoodid, nĂ€iteks âMBPâ tĂ€histab MacBook Pro, âMBAâ â MacBook Air 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 ei ole muutunud Trend Micro'i uurimise ajast, oleme mĂ€rganud mitmeid teisi modifikatsioone. C&C serverid, mida selles nĂ€idis kasutatakse, on ĂŒsna uued, nende loomise kuupĂ€ev on 22.10.2018.
â daff.faybilodeau[.]com
â sarc.onteagleroad[.]com
â au.charlineopkesston[.]com
URL-ressurss on muutunud /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Esimene pakett, mis saadetakse C&C-serverisse, sisaldab rohkem teavet hostmasina kohta, sealhulgas kÔiki andmeid, mida koguvad allpool toodud tabelis olevad kÀsud.

Lisaks sellele kasutab konfiguratsiooni muutmise nĂ€idis vĂ”rgu filtreerimiseks mitte teeki , vaid vĂ€list teeki. Selle leidmiseks proovib tagumine uks deĆĄifreerida iga faili kĂ€esolevas kataloogis, kasutades AES-256-CBC koos vĂ”tmega gFjMXBgyXWULmVVVzyxy, tĂ€iendades nullidega. Iga fail deĆĄifreeritakse ja salvestatakse kui /tmp/store, ja proov teha seda teegina laadida toimub funktsiooni . Kui deĆĄifreerimise proov viib eduka kutsumiseni dlopen, tagumine uks ekstraktsioonib eksporditud funktsioone Boriry ja ChadylonV, mis ilmselt vastutavad serveriga suhtlemise eest. Meil pole droppijat ega muid faile nĂ€idise algusest, seega ei saa me seda teeki analĂŒĂŒsida. Veelgi enam, kuna komponent on deĆĄifreeritud, ei vasta YARA-reegel, mis pĂ”hineb neil ridadel, kettale, mis leiti kettalt.
Nagu on kirjeldatud eespool mainitud artiklis, luuakse cliendID. See identifikaator on MD5 rĂ€simine ĂŒhe jĂ€rgmise kĂ€su tagastusvÀÀrtusest:
â 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}' (saada MAC aadress)
â tundmatu kĂ€sk (âx1ex72x0aâ), mida kasutatakse eelnevalt toodud nĂ€idetes
Enne rĂ€simist lisatakse tagastusvÀÀrtusele mĂ€rk â0â vĂ”i â1â, mis nĂ€itab, kas juurĂ”igused on olemas. See clientID salvestatakse /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, kui kood kĂ€ivitatakse juurena vĂ”i ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML kĂ”ikides muudes juhtudel. Fail on tavaliselt varjatud funktsiooni , selle ajatemplit muudetakse kĂ€suga touch ât juhusliku vÀÀrtusega.
Stringide dekodeerimine
Nagu eelnevates variantides, on stringid krĂŒpteeritud AES-256-CBC abil (kuusnurkne vĂ”ti: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 tĂ€iendatud nullidega ning IV on tĂ€idetud nullidega) funktsiooni . LĂŒkat on vĂ”rreldes varasemate versioonidega muutunud, kuid kuna grupp kasutab endiselt sama stringide krĂŒpteerimise algoritmi, on dekrĂŒpteerimine automatiseeritav. Lisaks sellele postitusele avaldame IDA skripti, mis kasutab Hex-Rays API-d stringide dekrĂŒpteerimiseks, mis on olemas binaarfailis. See skript vĂ”ib aidata tulevikus OceanLotuse analĂŒĂŒsimisel ja olemasolevate proovide analĂŒĂŒsimisel, mida me hetkel veel saada ei ole suutnud. Skripti alusena on universaalne meetod funktsioonile edastatud argumentide saamiseks. Lisaks otsib see parameetrite mÀÀramisi. Meetodit saab taaskasutada funktsiooni argumentide loendi saamiseks ja seejĂ€rel edastamiseks tagasiside (callback) korral.
Teades funktsiooni prototĂŒĂŒpi decrypt, leiab skript kĂ”ik ristviidatud funktsioonide, kĂ”ik argumendid, seejĂ€rel dekrĂŒpteerib andmed ja paneb puhta teksti kommentaarina ristviidatud aadressile. Skripti korrektseks toimimiseks peab see olema seadistatud kasutajate alfabett, mida kasutab base64 dekodeerimise funktsioon, ja globaalne muutujat, mis sisaldab vĂ”tme pikkust (antud juhul DWORD, vt joonis 4).

Kujund 4. Globaalmuutuja key_len mÀÀramine
Funktsiooni aknas saab paremklÔpsuga kutsuda deƥifreerimisfunktsiooni ja klÔpsata "TÔsta ja deƥifreeri argumente". Skript peaks deƥifreeritud read paigutama kommentaaridesse, nagu on nÀidatud kujundil 5.

Kujund 5. DeĆĄifreeritud tekst on paigutatud kommentaaridesse
Nii on deƥifreeritud read mugavalt paigutatud koos IDA aknas. xrefs selle funktsiooni jaoks, nagu on nÀidatud kujundil 6.

Kujund 6. Xrefs funktsioonile f_decrypt
Skripti lÔplik versioon on saadaval .
KokkuvÔte
Kuidas juba mainitud, OceanLotus tĂ€iustab pidevalt ja uuendab oma tööriistade komplekti. Seekord on kĂŒberrĂŒhm parandanud pahavara, et töötada Mac-kasutajatega. Kood ei ole palju muutunud, kuid kuna paljud Mac-kasutajad ignoreerivad turvatooteid, on pahavara tuvastamise kaitse teisejĂ€rguline.
ESETi tooted olid selle faili juba uuringu hetkel tuvastanud. Kuna vĂ”rgukogu, mida kasutatakse C&C suhtluseks, on nĂŒĂŒd ketas salvestatud, on rĂŒnnakute tĂ€pne vĂ”rguprotocol teadmata.
Kompromentatsiooni nÀitajad
Kompromentatsiooni nÀitajad ning MITRE ATT&CK atribuudid on samuti saadaval .
Allikas: habr.com
