MĂ€rtsis 2019 laaditi VirusTotalisse, populaarse veebipĂ”hise skaneerimisteenuse, ĂŒles uus kahjurprogrammi nĂ€idis macOS-i kĂŒberrĂŒhmituselt OceanLotus. Tagamdokumendil on samad vĂ”imalused nagu eelnevalt uuringu kĂ€igus uuritud macOS-i pahavaraversioonil, kuid selle struktuur on muutunud ja seda on keerulisem tuvastada. Kahjuks ei suutnud me leida seda nĂ€idist seostavat droppijat, seega ei tea me siiani rĂŒndevuru.
Hiljuti avaldasime ja sellest, kuidas operaatorid ĂŒritavad tagada pĂŒsivust, kiirendada koodi kĂ€ivitamist ja vĂ€hendada kohaloleku jĂ€lgi Windowsi sĂŒsteemides. Teada on ka, et sellel kĂŒberrĂŒhmitusel on olemas osakond macOS-i jaoks. Selles postituses kĂ€sitletakse uusima macOS-i pahavara versiooni muudatusi vĂ”rreldes eelneva versiooniga (), ning rÀÀgitakse ka sellest, kuidas analĂŒĂŒsi kĂ€igus saab automaatida stringide dekrĂŒpteerimist IDA Hex-Rays API abil.

AnalĂŒĂŒs
JĂ€rgmises kolmes osas kĂ€sitletakse nĂ€idise analĂŒĂŒsi SHA-1 hash'i E615632C9998E4D3E5ACD8851864ED09B02C77D2. Faili nimetatakse flashlightd, ESET-i viirusetĂ”rje tooted tuvastavad selle kui OSX/OceanLotus.D.
Antidebugging ja liivakastide kaitse
Nagu kĂ”ik OceanLotus macOS-i binaarfailid, on nĂ€idis UPX-iga pakitud, kuid enamus pakendite tuvastamise tööriistu ei tunnista seda sellisena. TĂ”enĂ€oliselt seetĂ”ttu, et nad peamiselt sisaldavad sĂ”ltuva stringi âUPXâ allkirja, lisaks esinevad Mach-O allkirjad harvemini ja neid ei uuendata nii tihti. See omadus raskendab staatilist tuvastamist. Huvi tĂ”ttu, pĂ€rast lahtipakkimist, asub sisenemise punkt sektsiooni alguses __cfstring sektoris .TEXT. Selles osas on atribuudid flag, nagu on nĂ€idatud alloleval joonisel.

Joonis 1. MACH-O __cfstring sektsiooni atribuudid
Nagu nÀidatud joonisel 2, vÔimaldab koodi asukoht sektsioonis __cfstring teatud tööriistu disassmbleerimist petta, kuvades koodi stringidena.

Joonis 2. Tagamdokumi koodi IDA poolt tuvastatakse andmetena
PÀrast kÀivitamist loob binaarfail lÔime debugeerimise kaitsemeetmena, mille ainus eesmÀrk on pidevalt jÀlgida debugeerija olemasolu. Selle saavutamiseks lÔim:
â PĂŒĂŒab Ă€ra tĂ”mmata igasuguse debugeerija, kutsudes esile ptrace jot PT_DENY_ATTACH nĂ”uete parameetrina
â Kontrollib, kas mĂ”ned eralaud on avatud, kutsudes funktsiooni task_get_exception_ports
â Kontrollib, kas debugger on ĂŒhendatud, nagu on nĂ€idatud alloleval pildil, kontrollides flagi olemasolu P_TRACED praeguses protsessis

Joonis 3. Debuggeri ĂŒhenduse kontrollimine sysctl funktsiooni kaudu
Kui valveskeem tuvastab debuggeri olemasolu, kutsutakse vÀlja funktsioon exit. Lisaks sellele kontrollib nÀidis seejÀrel keskkonda, tÀites kaks kÀsku:
ioreg -l | grep -e "Manufacturer" ja sysctl hw.model
SeejĂ€rel kontrollib nĂ€idis tagastatud vÀÀrtust kindlaks mÀÀratud stringide nimekirja jĂ€rgi tuntud virtualiseerimissĂŒsteemide jaoks: 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 lisandused
Kuigi tagasiulatuvad kĂ€sud pole muutunud alates Trend Micro uurimisest, oleme mĂ€rganud mĂ”ned muud muudatused. C&C serverid, mida selles nĂ€idises kasutatakse, on ĂŒsna uued, nende loomise kuupĂ€ev on 22.10.2018.
â daff.faybilodeau[.]com
â sarc.onteagleroad[.]com
â au.charlineopkesston[.]com
Ressursi URL on muutunud /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Esimene pakett, mis saadetakse C&C serverile, sisaldab rohkem teavet hostmasina kohta, sealhulgas kÔik andmed, mida koguvad allpool toodud tabeli kÀsud.

Lisaks sellele, konfigureerimise muudatused, nĂ€idis kasutab vĂ”rgufiltreerimiseks mitte teeki , vaid vĂ€list teeki. Selle leidmiseks ĂŒritab tagaukse kood deĆĄifreerida iga faili praeguses kataloogis, kasutades AES-256-CBC vĂ”tit gFjMXBgyXWULmVVVzyxy, millele on lisatud nullid. Iga fail deĆĄifreeritakse ja salvestatakse kui /tmp/store, ja katse seda teeki laadida tehakse funktsiooni . Kui deĆĄifreerimise katse viib eduka kutsumiseni dlopen, siis tagaukse kood ekstraheerib eksporditud funktsioonid Boriry ja ChadylonV, mis nĂ€ib vastutavat serveriga suhtlemise eest. Meil ei ole dropperit ega teisi faile, mis pĂ€rinevad nĂ€idise algasukoha, seega ei saa me seda teeki analĂŒĂŒsida. Veel enam, kuna komponent on krĂŒpteeritud, ei vasta YARA reegel nende ridade pĂ”hjal failile, mis on leitud kettalt.
Nagu on kirjeldatud ĂŒlaltoodud artiklis, luuakse cliendIDSee identifikaator on MD5 rĂ€situlemus jĂ€rgmistest kĂ€skudest:
â 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") , mis on kasutatud varasemates nĂ€idetes
Enne rĂ€simist lisatakse rĂ€situlemusnĂ€idule sĂŒmbol "0" vĂ”i "1", mis nĂ€itab, kas on olemas root Ă”igused. See clientID hoitakse /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, kui kood kĂ€ivitatakse rootina, vĂ”i ~ /Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML kĂ”ikides muudes juhtudel. Fail on tavaliselt varjatud funktsiooni , selle ajatempleid muudetakse kĂ€suga touch ât juhusliku vÀÀrtusega.
SÔnumite dekodeerimine
Nagu eelmistel variantidel, on sĂ”numid krĂŒptitud AES-256-CBC (heksadekaanne vĂ”ti: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 tĂ€iendatud nullidega ja IV tĂ€idetakse nullidega) funktsiooni kaudu . VĂ”ti on vĂ”rreldes varasemate versioonidega muudetud, kuid kuna rĂŒhm kasutab endiselt sama sĂ”numite krĂŒpteerimise algoritmi, saab dekodeerimise automatiseerida. Lisaks sellele postitusele vabastame IDA skripti, mis kasutab Hex-Rays API-d sĂ”numite dekodeerimiseks, mis esinevad binaarfailis. See skript vĂ”ib aidata tulevases OceanLotus analĂŒĂŒsis ja olemasolevate nĂ€idiste analĂŒĂŒsis, mida me siiani ei saanud. Skripti alus on universaalne meetod argumentide saamiseks, mis on saadetud funktsioonile. Samuti otsitakse parameetrite mÀÀramisi. Meetodit saab uuesti kasutada, et saada funktsiooni argumentide loend ja edastada see seejĂ€rel tagasikutsumisele (callback).
Teades funktsiooni prototĂŒĂŒpi decrypt, skript leiab kĂ”ik ristviidatud viidatud funktsioonist, kĂ”ik argumendid, seejĂ€rel dekodeerib andmed ja asetab selge teksti kommentaari sees ristviidatud aadressil. Selleks, et skript Ă”igesti töötaks, peab olema kehtestatud kohandatud tĂ€hestik, mida base64 dekodeerimise funktsioon kasutab, ja peab olema mÀÀratud globaalne muutuja, mis sisaldab vĂ”tme pikkust (antud juhul DWORD, vt joonis 4).

Joonis 4. Globaalsete muutuja key_len mÀÀramine
Funktsiooni aknas saad parema hiirtöötluse abil kĂ€ivitada dekrĂŒpteerimisfunktsiooni ja klĂ”psata âEkstrakt ja dekrĂŒpteeri argumendidâ. Skript peaks dekrĂŒpteeritud stringid paigutama kommentaaridesse, nagu on nĂ€idatud joonisel 5.

Joonis 5. DekrĂŒpteeritud tekst on paigutatud kommentaaridesse
Nii on dekrĂŒpteeritud stringid mugavalt koondatud IDA aknas xrefs selle funktsiooni jaoks, nagu on nĂ€idatud joonisel 6.

Joonis 6. Xrefs funktsiooni f_decrypt jaoks
LÔplik skripti versioon on saadaval .
KokkuvÔte
Kuidas juba mainitud, tĂ€iustavad OceanLotus pidevalt oma tööriistade komplekti. Seekord on kĂŒbergĂ€ng tĂ€iustanud pahavara töötamiseks Maci kasutajatega. Kood ei ole palju muutunud, kuid kuna paljud Maci kasutajad ignoreerivad turvatooteid, on pahavara avastamise eest kaitsmine teisejĂ€rguline.
ESETi tooted olid selle faili juba uuringu ajal tuvastanud. Kuna kasutatav vĂ”rgu teek C&C kommunikatsiooniks on nĂŒĂŒd kettale salvestatud krĂŒpteerituna, ei ole rĂŒndajate kasutatav tĂ€pne vĂ”rgu protokoll veel teada.
Kompromissindikaatorid
Kompromissindikaatorid ja MITRE ATT&CK atribuudid on saadaval ka .
Allikas: habr.com
