Noong Marso 2019, isang bagong sample ng macOS malware mula sa cyber group na OceanLotus ang na-upload sa VirusTotal, isang sikat na online scanning service. Ang backdoor executable file ay may parehong mga kakayahan tulad ng nakaraang bersyon ng macOS malware na aming pinag-aralan, ngunit ang istraktura nito ay nagbago at ito ay naging mas mahirap na matukoy. Sa kasamaang palad, hindi kami nakahanap ng dropper na nauugnay sa sample na ito, kaya hindi pa namin alam ang vector ng impeksyon.
Na-publish namin kamakailan
Pagsusuri
Inilalarawan ng susunod na tatlong bahagi ang pagsusuri ng isang sample na may SHA-1 hash E615632C9998E4D3E5ACD8851864ED09B02C77D2
. Ang file ay tinatawag na flashlight, nakita ito ng mga produktong antivirus ng ESET bilang OSX/OceanLotus.D.
Anti-debugging at proteksyon ng sandbox
Tulad ng lahat ng macOS OceanLotus binary, ang sample ay nakabalot sa UPX, ngunit karamihan sa mga tool sa pagkilala sa packager ay hindi nakikilala ito bilang ganoon. Ito ay marahil dahil karamihan sa mga ito ay naglalaman ng isang lagda na nakadepende sa pagkakaroon ng "UPX" na string, bilang karagdagan, ang mga pirma ng Mach-O ay hindi gaanong karaniwan at hindi naa-update nang madalas. Ang tampok na ito ay nagpapahirap sa static na pagtuklas. Kapansin-pansin, pagkatapos i-unpack, ang entry point ay nasa simula ng seksyon __cfstring
sa segment .TEXT
. Ang seksyong ito ay may mga katangian ng bandila tulad ng ipinapakita sa larawan sa ibaba.
Figure 1. MACH-O __cfstring section attributes
Gaya ng ipinapakita sa Figure 2, ang mga lokasyon ng code sa seksyon __cfstring
ay nagbibigay-daan sa iyong linlangin ang ilang mga tool sa disassembly sa pamamagitan ng pagpapakita ng code bilang mga string.
Figure 2. Backdoor code na nakita ng IDA bilang data
Sa sandaling naisakatuparan, ang binary ay gagawa ng isang thread bilang isang anti-debugger na ang tanging layunin ay upang patuloy na suriin ang pagkakaroon ng isang debugger. Para sa daloy na ito:
— Sinusubukang i-unhook ang anumang debugger, pagtawag ptrace
с PT_DENY_ATTACH
bilang parameter ng kahilingan
- Sinusuri kung ang ilang eksklusibong port ay bukas sa pamamagitan ng pagtawag sa isang function task_get_exception_ports
- Sinusuri kung nakakonekta ang debugger, tulad ng ipinapakita sa figure sa ibaba, sa pamamagitan ng pagsuri sa presensya ng flag P_TRACED
sa kasalukuyang proseso
Figure 3. Sinusuri ang koneksyon ng debugger gamit ang sysctl function
Kung nakita ng asong tagapagbantay ang pagkakaroon ng isang debugger, ang function ay tinatawag exit
. Bukod pa rito, sinusuri ng sample ang kapaligiran sa pamamagitan ng pagpapatakbo ng dalawang command:
ioreg -l | grep -e "Manufacturer" и sysctl hw.model
Sinusuri ng sample ang return value laban sa isang hard-coded na listahan ng mga string mula sa mga kilalang virtualization system: acle, vmware, virtualbox o parallels. Sa wakas, susuriin ng susunod na command kung ang makina ay isa sa mga sumusunod na "MBP", "MBA", "MB", "MM", "IM", "MP" at "XS". Ito ang mga code ng modelo ng system, halimbawa, "MBP" ay nangangahulugang MacBook Pro, "MBA" ay nangangahulugang MacBook Air, atbp.
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}
Pangunahing mga karagdagan
Habang ang mga utos sa backdoor ay hindi nagbago mula noong pananaliksik ng Trend Micro, napansin namin ang ilang iba pang mga pagbabago. Ang mga server ng C&C na ginamit sa sample na ito ay medyo bago at ginawa noong 22.10.2018/XNUMX/XNUMX.
- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com
Ang URL ng mapagkukunan ay nagbago sa /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35
.
Ang unang packet na ipinadala sa C&C server ay naglalaman ng higit pang impormasyon tungkol sa host machine, kasama ang lahat ng data na nakolekta ng mga command sa talahanayan sa ibaba.
Bilang karagdagan sa pagbabago ng configuration na ito, ang sample ay hindi gumagamit ng library para sa network filtering gFjMXBgyXWULmVVVzyxy
, may palaman na mga zero. Ang bawat file ay decrypted at nai-save bilang /tmp/store
, at isang pagtatangka na i-load ito bilang isang library ay ginawa gamit ang function dlopen
, kinukuha ng backdoor ang mga na-export na function Boriry
и ChadylonV
, na tila responsable para sa komunikasyon ng network sa server. Wala kaming dropper o iba pang mga file mula sa orihinal na lokasyon ng sample, kaya hindi namin ma-parse ang library na ito. Bukod dito, dahil naka-encrypt ang bahagi, hindi tutugma ang panuntunan ng YARA batay sa mga string na ito sa file na makikita sa disk.
Tulad ng inilarawan sa artikulo sa itaas, lumilikha ito ID ng kliyente. Ang ID na ito ay ang MD5 hash ng return value ng isa sa mga sumusunod na command:
- 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}'
(kumuha ng MAC address)
- hindi kilalang koponan ("x1ex72x0a
"), na ginagamit sa mga nakaraang sample
Bago ang pag-hash, isang "0" o "1" ang idinaragdag sa return value upang isaad ang mga pribilehiyo sa ugat. Ito ID ng kliyente naka-imbak sa /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex
, kung ang code ay tatakbo bilang ugat o sa ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML sa lahat ng iba pang mga kaso. Karaniwang nakatago ang file gamit ang function touch –t
na may random na halaga.
Pag-decode ng mga string
Tulad ng mga nakaraang opsyon, ang mga string ay naka-encrypt gamit ang AES-256-CBC (hexadecimal key: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92
may palaman na may mga zero, at IV na puno ng mga zero) sa pamamagitan ng function
Pag-alam sa prototype ng function decrypt, hinahanap ng script ang lahat ng cross-reference sa function na ito, lahat ng argumento, pagkatapos ay i-decrypt ang data at inilalagay ang plain text sa loob ng isang komento sa cross-reference na address. Para gumana nang tama ang script, dapat itong itakda sa custom na alpabeto na ginagamit ng base64 decoding function, at dapat tukuyin ang isang global variable na naglalaman ng haba ng key (sa kasong ito ay isang DWORD, tingnan ang Figure 4).
Figure 4. Kahulugan ng global variable key_len
Sa window ng Function, maaari mong i-right-click ang function ng decryption at i-click ang "I-extract at i-decrypt ang mga argumento." Dapat ilagay ng script ang mga decrypted na linya sa mga komento, tulad ng ipinapakita sa Figure 5.
Figure 5. Ang decrypted text ay inilalagay sa mga komento
Sa ganitong paraan ang mga naka-decrypt na mga string ay maginhawang inilalagay nang magkasama sa window ng IDA xrefs para sa function na ito tulad ng ipinapakita sa Figure 6.
Figure 6. Xrefs sa f_decrypt function
Ang huling script ay matatagpuan sa
Pagbubuhos
Gaya ng nabanggit na, patuloy na pinapabuti at ina-update ng OceanLotus ang toolkit nito. Sa pagkakataong ito, pinahusay ng cyber group ang malware para gumana sa mga user ng Mac. Ang code ay hindi masyadong nagbago, ngunit dahil maraming mga gumagamit ng Mac ang hindi pinapansin ang mga produkto ng seguridad, ang pagprotekta sa malware mula sa pagtuklas ay pangalawang kahalagahan.
Natukoy na ng mga produkto ng ESET ang file na ito sa panahon ng pananaliksik. Dahil ang network library na ginagamit para sa C&C na komunikasyon ay naka-encrypt na ngayon sa disk, ang eksaktong network protocol na ginagamit ng mga umaatake ay hindi pa alam.
Mga tagapagpahiwatig ng kompromiso
Ang mga tagapagpahiwatig ng kompromiso gayundin ang mga katangian ng MITRE ATT&CK ay available din sa
Pinagmulan: www.habr.com