OceanLotus: Malware-opdatering til macOS

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 indlæg om OceanLotus og hvordan operatører forsøger at give vedholdenhed, fremskynde kodeudførelse og minimere fodaftryk på Windows-systemer. Det er også kendt, at denne cybergruppe også har en komponent til macOS. Dette indlæg beskriver ændringerne i den nyeste version af malwaren til macOS sammenlignet med den tidligere version (beskrevet af Trend Micro), og beskriver også, hvordan du kan automatisere dekryptering af strenge under analyse ved hjælp af IDA Hex-Rays API.

OceanLotus: Malware-opdatering til macOS

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.

OceanLotus: Malware-opdatering til macOS
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.

OceanLotus: Malware-opdatering til macOS
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

OceanLotus: Malware-opdatering til macOS
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.

OceanLotus: Malware-opdatering til macOS

Ud over denne konfigurationsændring bruger prøven ikke et bibliotek til netværksfiltrering libcurl, men et eksternt bibliotek. For at finde den forsøger bagdøren at dekryptere hver fil i den aktuelle mappe ved hjælp af AES-256-CBC med nøglen 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. Når et dekrypteringsforsøg resulterer i et vellykket opkald 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 _chflags, dens tidsstempel ændres ved hjælp af kommandoen 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 CCCrypt. Nøglen er ændret fra tidligere versioner, men da gruppen stadig bruger den samme strengkrypteringsalgoritme, kan dekryptering automatiseres. Ud over dette indlæg frigiver vi et IDA-script, der bruger Hex-Rays API til at dekryptere de strenge, der findes i den binære fil. Dette script kan hjælpe med fremtidig analyse af OceanLotus og analyse af eksisterende prøver, som vi endnu ikke har været i stand til at opnå. Scriptet er baseret på en universel metode til at modtage argumenter sendt til en funktion. Derudover slår den op til parametertildelinger. Metoden kan genbruges til at få en liste over funktionsargumenter og derefter videregive den til tilbagekaldet.

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).

OceanLotus: Malware-opdatering til macOS
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.

OceanLotus: Malware-opdatering til macOS
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.

OceanLotus: Malware-opdatering til macOS
Figur 6. Xrefs til f_decrypt funktion

Det endelige manuskript kan findes på Github depot.

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å GitHub.

Kilde: www.habr.com

Tilføj en kommentar