Yn maart 2019 waard in nije stekproef fan macOS-malware fan 'e cybergroep OceanLotus uploaded nei VirusTotal, in populêre online skennentsjinst. It útfierbere efterdoarbestân hat deselde mooglikheden as de foarige ferzje fan 'e macOS-malware dy't wy studearre, mar de struktuer is feroare en it is dreger wurden om te ûntdekken. Spitigernôch koene wy gjin dropper fine dy't ferbûn is mei dit stekproef, dus wy kenne de ynfeksjevektor noch net.
We koartlyn publisearre
Analysis
De folgjende trije dielen beskriuwe de analyze fan in stekproef mei in SHA-1 hash E615632C9998E4D3E5ACD8851864ED09B02C77D2
. De triem wurdt neamd zaklamp, ESET antivirus produkten detect it as OSX/OceanLotus.D.
Anti-debuggen en sânbakbeskerming
Lykas alle macOS OceanLotus binaries, is de stekproef ferpakt mei UPX, mar de measte ark foar identifikaasje fan pakketten werkenne it net as sadanich. Dit is wierskynlik om't se meast in hantekening befetsje dy't ôfhinklik is fan 'e oanwêzigens fan' e "UPX" tekenrige, boppedat binne Mach-O-hantekeningen minder gewoan en wurde net sa faak bywurke. Dizze funksje makket statyske deteksje lestich. Nijsgjirrich, nei it útpakke, is it yngongspunt oan it begjin fan 'e seksje __cfstring
yn it segment .TEXT
. Dizze seksje hat flagge-attributen lykas werjûn yn 'e ôfbylding hjirûnder.
figuer 1. MACH-O __cfstring seksje attributen
Lykas werjûn yn figuer 2, de koade lokaasjes yn de seksje __cfstring
kinne jo in trick guon disassembly ark troch werjaan fan koade as snaren.
figuer 2. Backdoor koade ûntdutsen troch IDA as gegevens
Ien kear útfierd, makket de binêre in thread as in anty-debugger waans ienige doel is om kontinu te kontrolearjen op de oanwêzigens fan in debugger. Foar dizze stream:
- Besiket elke debugger los te meitsjen, ropt ptrace
с PT_DENY_ATTACH
as in fersyk parameter
- Kontrolearret as guon eksklusive havens iepen binne troch in funksje op te roppen task_get_exception_ports
- Kontrolearret as de debugger ferbûn is, lykas werjûn yn 'e ôfbylding hjirûnder, troch de oanwêzigens fan' e flagge te kontrolearjen P_TRACED
yn it hjoeddeiske proses
figuer 3. Kontrolearje de debugger ferbining mei help fan de sysctl funksje
As de wachthûn de oanwêzigens fan in debugger ûntdekt, wurdt de funksje neamd exit
. Derneist kontroleart de stekproef dan de omjouwing troch twa kommando's út te fieren:
ioreg -l | grep -e "Manufacturer" и sysctl hw.model
De stekproef kontrolearret dan de weromwearde tsjin in hurd-kodearre list mei stringen fan bekende virtualisaasjesystemen: acle, vmware, virtualbox of parallellen. Uteinlik kontrolearret it folgjende kommando as de masine ien fan 'e folgjende "MBP", "MBA", "MB", "MM", "IM", "MP" en "XS" is. Dit binne systeemmodelkoades, bygelyks "MBP" betsjut MacBook Pro, "MBA" betsjut MacBook Air, ensfh.
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}
Grutte tafoegings
Wylst de efterdoar-kommando's net binne feroare sûnt it ûndersyk fan Trend Micro, hawwe wy in pear oare wizigingen opmurken. De C&C-tsjinners brûkt yn dit stekproef binne frij nij en waarden makke op 22.10.2018/XNUMX/XNUMX.
- daff.faybilodeau[.]com
- sarc.onteagleroad[.]com
- au.charlineopkesston[.]com
De boarne URL is feroare yn /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35
.
It earste pakket stjoerd nei de C&C-tsjinner befettet mear ynformaasje oer de hostmasine, ynklusyf alle gegevens sammele troch de kommando's yn 'e tabel hjirûnder.
Neist dizze konfiguraasjeferoaring brûkt de stekproef gjin bibleteek foar netwurkfiltering gFjMXBgyXWULmVVVzyxy
, opknapt mei nullen. Elk bestân wurdt ûntsifere en bewarre as /tmp/store
, en in besykjen om it as biblioteek te laden wurdt makke mei de funksje dlopen
, de efterdoar ekstrakt eksportearre funksjes Boriry
и ChadylonV
, dy't blykber ferantwurdlik binne foar netwurkkommunikaasje mei de tsjinner. Wy hawwe net de dropper of oare bestannen fan 'e oarspronklike lokaasje fan' e stekproef, dus wy kinne dizze bibleteek net parse. Boppedat, om't de komponint fersifere is, sil in YARA-regel basearre op dizze snaren net oerienkomme mei it bestân fûn op skiif.
Lykas beskreaun yn it boppesteande artikel, it skept clientID. Dizze ID is de MD5-hash fan 'e weromkommende wearde fan ien fan' e folgjende kommando's:
- 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}'
(krije MAC-adres)
- ûnbekend team ("x1ex72x0a
"), dat wurdt brûkt yn eardere samples
Foar it hasjen wurdt in "0" of "1" tafoege oan de weromwearde om root-privileezjes oan te jaan. Dit clientID opslein yn /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex
, as de koade wurdt útfierd as root of yn ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML yn alle oare gefallen. It bestân wurdt normaal ferburgen mei de funksje touch –t
mei in willekeurige wearde.
Dekodearjen fan snaren
Lykas by foarige opsjes wurde de stringen fersifere mei AES-256-CBC (hexadesimale kaai: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92
padded mei nullen, en IV fol mei nullen) troch de funksje
It kennen fan de funksje prototype ûntsiferje, it skript fynt alle krúsferwizings nei dizze funksje, alle arguminten, ûntsiferet dan de gegevens en pleatst platte tekst yn in opmerking op it krúsferwizingsadres. Foar it skript om goed te wurkjen, moat it ynsteld wurde op it oanpaste alfabet dat brûkt wurdt troch de base64-dekodearringfunksje, en in globale fariabele moat wurde definieare mei de lingte fan 'e kaai (yn dit gefal in DWORD, sjoch figuer 4).
figuer 4. Definysje fan de globale fariabele key_len
Yn it Funksje-finster kinne jo mei de rjochter klikke op de ûntsiferfunksje en klikje op "Arguminten útpakke en ûntsiferje." It skript moat de dekodearre rigels yn opmerkings pleatse, lykas werjûn yn figuer 5.
Figure 5. De dekodearre tekst wurdt pleatst yn de kommentaren
Op dizze manier wurde de dekodearre snaren maklik byinoar pleatst yn it IDA-finster xrefs foar dizze funksje lykas werjûn yn figuer 6.
figuer 6. Xrefs to f_decrypt funksje
It definitive skript is te finen op
konklúzje
Lykas al neamd, wurdt OceanLotus syn toolkit konstant ferbettere en bywurke. Dizze kear hat de cybergroep de malware ferbettere om te wurkjen mei Mac-brûkers. De koade is net folle feroare, mar om't in protte Mac-brûkers befeiligingsprodukten negearje, is it beskermjen fan malware tsjin deteksje fan sekundêr belang.
ESET-produkten fûnen dit bestân al op it momint fan ûndersyk. Om't de netwurkbibleteek dy't brûkt wurdt foar C&C-kommunikaasje no fersifere is op skiif, is it krekte netwurkprotokol brûkt troch de oanfallers noch net bekend.
Yndikatoaren fan kompromis
Yndikatoaren fan kompromis likegoed as MITER ATT & CK attributen binne ek beskikber op
Boarne: www.habr.com