I marts 2019 blev en ny prøve af macOS malware fra cybergruppen OceanLotus uploadet til VirusTotal, en populær online scanningstjeneste. Den eksekverbare bagdørsfil har de samme muligheder som den tidligere version af macOS-malwaren, vi undersøgte, men dens struktur er ændret, og den er blevet sværere at opdage. Desværre var vi ikke i stand til at finde en dropper forbundet med denne prøve, så vi kender endnu ikke infektionsvektoren.
Vi har for nylig offentliggjort
Analyse
De næste tre dele beskriver analysen af en prøve med en SHA-1-hash E615632C9998E4D3E5ACD8851864ED09B02C77D2
. Filen kaldes lommelygte, ESET antivirusprodukter registrerer det som OSX/OceanLotus.D.
Anti-debugging og sandkassebeskyttelse
Som alle macOS OceanLotus binære filer er prøven pakket med UPX, men de fleste pakkeridentifikationsværktøjer genkender den ikke som sådan. Dette skyldes sandsynligvis, at de for det meste indeholder en signatur afhængig af tilstedeværelsen af "UPX"-strengen, derudover er Mach-O-signaturer mindre almindelige og opdateres ikke så ofte. Denne funktion gør statisk detektion vanskelig. Interessant nok er indgangspunktet efter udpakning i begyndelsen af afsnittet __cfstring
i segmentet .TEXT
. Denne sektion har flagattributter som vist på billedet nedenfor.
Figur 1. MACH-O __cfstring sektionsattributter
Som vist i figur 2 er kodeplaceringerne i afsnittet __cfstring
giver dig mulighed for at snyde nogle demonteringsværktøjer ved at vise kode som strenge.
Figur 2. Bagdørskode detekteret af IDA som data
Når den er udført, opretter binæren en tråd som en anti-debugger, hvis eneste formål er konstant at tjekke for tilstedeværelsen af en debugger. For dette flow:
— Forsøger at koble en hvilken som helst debugger af, ringer ptrace
с PT_DENY_ATTACH
som en anmodningsparameter
- Tjekker om nogle eksklusive porte er åbne ved at kalde en funktion task_get_exception_ports
- Kontrollerer, om debuggeren er tilsluttet, som vist på figuren nedenfor, ved at kontrollere tilstedeværelsen af flaget P_TRACED
i den nuværende proces
Figur 3. Kontrol af debuggerforbindelsen ved hjælp af sysctl-funktionen
Hvis vagthunden registrerer tilstedeværelsen af en debugger, kaldes funktionen exit
. Derudover kontrollerer prøven derefter miljøet ved at køre to kommandoer:
ioreg -l | grep -e "Manufacturer" и sysctl hw.model
Eksemplet kontrollerer derefter returværdien mod en hårdkodet liste over strenge fra kendte virtualiseringssystemer: acle, vmware, virtualbox eller paralleller. Til sidst kontrollerer den næste kommando, om maskinen er en af følgende "MBP", "MBA", "MB", "MM", "IM", "MP" og "XS". Disse er systemmodelkoder, for eksempel betyder "MBP" MacBook Pro, "MBA" betyder MacBook Air osv.
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}
Vigtigste tilføjelser
Selvom bagdørskommandoerne ikke har ændret sig siden Trend Micros forskning, bemærkede vi et par andre ændringer. C&C-serverne, der bruges i dette eksempel, er ret nye og blev oprettet den 22.10.2018.
— daff.faybilodeau[.]com
— sarc.onteagleroad[.]com
— au.charlineopkesston[.]com
Ressourcens URL er ændret til /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35
.
Den første pakke, der sendes til C&C-serveren, indeholder flere oplysninger om værtsmaskinen, inklusive alle data indsamlet af kommandoerne i tabellen nedenfor.
Ud over denne konfigurationsændring bruger prøven ikke et bibliotek til netværksfiltrering gFjMXBgyXWULmVVVzyxy
, polstret med nuller. Hver fil dekrypteres og gemmes som /tmp/store
, og et forsøg på at indlæse det som et bibliotek gøres ved hjælp af funktionen dlopen
, udtrækker bagdøren eksporterede funktioner Boriry
и ChadylonV
, som tilsyneladende er ansvarlige for netværkskommunikation med serveren. Vi har ikke dropperen eller andre filer fra prøvens oprindelige placering, så vi kan ikke analysere dette bibliotek. Desuden, da komponenten er krypteret, vil en YARA-regel baseret på disse strenge ikke matche filen fundet på disken.
Som beskrevet i ovenstående artikel skaber det klient-id. Dette id er MD5-hash for returværdien af en af følgende kommandoer:
— 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}'
(få MAC-adresse)
- ukendt hold ("x1ex72x0a
"), som er brugt i tidligere prøver
Før hashing tilføjes et "0" eller "1" til returværdien for at angive root-privilegier. Det her klient- gemt i /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex
, hvis koden køres som root eller i ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML i alle andre tilfælde. Filen er normalt skjult ved hjælp af funktionen touch –t
med en tilfældig værdi.
Afkodning af strenge
Som med tidligere muligheder krypteres strengene ved hjælp af AES-256-CBC (hexadecimal nøgle: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92
polstret med nuller og IV fyldt med nuller) gennem funktionen
At kende funktionsprototypen dekryptere, finder scriptet alle krydshenvisninger til denne funktion, alle argumenter, dekrypterer derefter dataene og placerer almindelig tekst i en kommentar på krydsreferenceadressen. For at scriptet skal fungere korrekt, skal det indstilles til det brugerdefinerede alfabet, der bruges af base64-afkodningsfunktionen, og der skal defineres en global variabel, der indeholder nøglens længde (i dette tilfælde et DWORD, se figur 4).
Figur 4. Definition af den globale variabel key_len
I vinduet Funktion kan du højreklikke på dekrypteringsfunktionen og klikke på "Udtræk og dekrypter argumenter." Scriptet skal placere de dekrypterede linjer i kommentarer, som vist i figur 5.
Figur 5. Den dekrypterede tekst er placeret i kommentarerne
På denne måde placeres de dekrypterede strenge bekvemt sammen i IDA-vinduet xrefs for denne funktion som vist i figur 6.
Figur 6. Xrefs til f_decrypt funktion
Det endelige manuskript kan findes på
Output
Som allerede nævnt forbedrer og opdaterer OceanLotus konstant sit værktøjssæt. Denne gang har cybergruppen forbedret malwaren til at fungere med Mac-brugere. Koden har ikke ændret sig meget, men da mange Mac-brugere ignorerer sikkerhedsprodukter, er beskyttelse af malware mod opdagelse af sekundær betydning.
ESET-produkter opdagede allerede denne fil på undersøgelsestidspunktet. Fordi netværksbiblioteket, der bruges til C&C-kommunikation, nu er krypteret på disken, kendes den nøjagtige netværksprotokol, der blev brugt af angriberne, endnu ikke.
Indikatorer på kompromis
Indikatorer for kompromis samt MITER ATT&CK-attributter er også tilgængelige på
Kilde: www.habr.com