OceanLotus: opdatering af malware til macOS

I marts 2019 blev der uploadet en ny prøve af malware til macOS til VirusTotal, den populære online scanningstjeneste, af hackergruppen OceanLotus. Den kørende fil af backdoor'en har de samme funktioner som den foregående version af malwaren til macOS, som vi har studeret, men dens struktur er ændret, hvilket gør den sværere at opdage. Desværre har vi ikke kunnet finde dråberen, der er forbundet med denne prøve, så vi kender endnu ikke infektionsvejen.

For nylig offentliggjorde vi et indlæg om OceanLotus og hvordan operatørerne forsøger at sikre persistence, fremskynde kodeudførelse og minimere spor i Windows-systemer. Det er også kendt, at denne hackergruppe har en komponent til macOS. I dette indlæg beskrives ændringerne i den nyeste version af malwaren til macOS sammenlignet med den tidligere version (beskrevet af Trend Micro), og det forklares, hvordan man kan automatisere dekodningen af strenge ved brug af IDA Hex-Rays API under analysen.

OceanLotus: opdatering af malware til macOS

Analyse

I de næste tre dele beskrives analysen af prøven med SHA-1 hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. Filen hedder flashlightd, og ESETs antivirusprodukter identificerer den som OSX/OceanLotus.D.

Anti-debug og sandkassebeskyttelse

Som alle OceanLotus macOS-binærer er prøven pakket med UPX, men de fleste identifikationsværktøjer for pakkere genkender den ikke som sådan. Sandsynligvis fordi de hovedsageligt indeholder en signatur, der afhænger af tilstedeværelsen af strengen “UPX”, derudover ses Mach-O signaturer sjældnere og opdateres ikke så ofte. Denne egenskab gør statisk opdagelse vanskelig. Interessant nok, efter udpakning, ligger indgangspunktet i starten af sektionen __cfstring i segmentet .TEXT. I denne sektion er der flag-attributter, som vist på billedet nedenfor.

OceanLotus: opdatering af malware til macOS
Figur 1. ATTRIBUTTER FOR MACH-O __cfstring SEKTIONEN

Som vist i figur 2 tillader placeringen af koden i sektionen at narre nogle disassembleringsværktøjer ved at vise koden som strenge. __cfstring Figur 2. Backdoor-koden identificeres af IDA som data

OceanLotus: opdatering af malware til macOS
Efter kørslen opretter den binære fil en tråd som en anti-debugging-foranstaltning, hvis eneste formål er konstant at kontrollere for tilstedeværelsen af en debugger. For dette forsøger tråden:

— At afmontere enhver debugger ved at kalde

PT_DENY_ATTACH ptrace med som parameteren for forespørgslen — At kontrollere, om nogle undtagelsesportene er åbne, ved at anke funktionen
task_get_exception_ports opgave_få_undtagelseshavne
— Tjekker om debuggeren er tilsluttet, som vist på billedet nedenfor, ved at kontrollere tilstedeværelsen af flaget P_TRACED i den nuværende proces

OceanLotus: opdatering af malware til macOS
Figur 3. Tjek af debuggertilslutning ved hjælp af sysctl-funktionen

Hvis overvågningsskemaet opdager tilstedeværelsen af debuggeren, kaldes funktionen sigreturn. Desuden kontrollerer prøven miljøet ved at udføre to kommandoer:

ioreg -l | grep -e "Manufacturer" og sysctl hw.model

Derefter kontrollerer prøven det returnerede værdig i en hårdkodet liste over strenge for kendte virtualiseringssystemer: acle, vmware, virtualbox eller parallels. Endelig kontrollerer den følgende kommando, om maskinen er en af følge “MBP”, “MBA”, “MB”, “MM”, “IM”, “MP” og “XS”. Dette er systemmodelkoder, for eksempel betyder “MBP” MacBook Pro, “MBA” – MacBook Air osv.

system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}'

Vigtige tilføjelser

Selvom backdoor-kommandoerne ikke har ændret sig siden Trend Micro's undersøgelse, har vi bemærket flere andre modifikationer. C&C-serverne, der bruges i dette mønster, er ret nye, deres oprettelsesdato er 22.10.2018.

— daff.faybilodeau[.]com
— sarc.onteagleroad[.]com
— au.charlineopkesston[.]com

Ressource-URL'en er ændret til /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Den første pakke, der sendes til C&C-serveren, indeholder mere information om værtmaskinen, herunder alle data, der indsamles af kommandoerne i tabellen nedenfor.

OceanLotus: opdatering af malware til macOS

Derudover bruger prøven til netværksfiltrering ikke biblioteket libcurl, men et eksternt bibliotek. For at finde det forsøger backdoor at afkode hver fil i den nuværende mappe ved hjælp af AES-256-CBC med nøglen gFjMXBgyXWULmVVVzyxy, suppleret med nuller. Hver fil afkodes 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 afkodningsforsøget fører til et succesfuldt kald dlopen, udtrækker backdoor de eksporterede funktioner Boriry og ChadylonV, som tilsyneladende er ansvarlige for netværksinteraktion med serveren. Vi har ingen dropper eller andre filer fra den originale placering af prøven, så vi kan ikke analysere dette bibliotek. Desuden, da komponenten er krypteret, vil et YARA-regel baseret på disse strenge ikke matche filen på disken.

Som beskrevet i den førnævnte artikel, genereres cliendID. Denne identifikator er en MD5-hash af returværdien fra en af de 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}' (hente MAC-adressen)
— ukendt kommando («x1ex72x0a«), som bruges i de tidligere eksempler

Før hashing tilføjes tegnet «0» eller «1» til returværdien for at indikere tilstedeværelsen af root-rettigheder. Denne clientID opbevares i /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, hvis koden køres fra 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 et tilfældigt værd.

Dekryptering af strenge

Som i de tidligere versioner er strenge krypteret ved hjælp af AES-256-CBC (hexadecimalt nøgle: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 fyldt op med nuller, og IV er fyldt med nuller) ved hjælp af funktionen CCCrypt. Nøglen er ændret i forhold til tidligere versioner, men da gruppen stadig bruger den samme krypteringsalgoritme, kan dekrypteringen automatiseres. Udover dette indlæg frigiver vi et IDA-script, der bruger API Hex-Rays til at dekryptere strenge, der findes i binærfilen. Dette script kan hjælpe med fremtidig analyse af OceanLotus og analyse af eksisterende prøver, som vi endnu ikke har fået fat i. I scriptet findes en universel metode til at hente argumenter, der er givet til funktionen. Derudover leder det efter parameterhenvisninger. Metoden kan genbruges for at få en liste over funktionsargumenter og derefter sende dem til en callback.

Ved at kende funktionsprototypen decrypt, finder scriptet alle krydsreferencer til denne funktion, alle argumenter, derefter dekrypterer det data og placerer almindelig tekst inden for kommentaren på krydsreferencens adresse. For at scriptet skal fungere korrekt, skal det have et brugerdefineret alfabet, der bruges af base64-dekodningsfunktionen, og der skal være defineret en global variabel, der indeholder længden af nøglen (i dette tilfælde DWORD, se figur 4).

OceanLotus: opdatering af malware til macOS
Figur 4. Definition af global variabel key_len

I vinduet Funktion kan du højreklikke på dekrypteringsfunktionen og klikke på «Uddrag og dekrypter argumenter». Scriptet skal placere de dekrypterede strenge i kommentarerne, som vist i billede 5.

OceanLotus: opdatering af malware til macOS
Billede 5. Dekrypteret tekst placeret i kommentarerne

Således kan de dekrypterede strenge nemt placeres sammen i IDA-vinduet xrefs for denne funktion, som vist i billede 6.

OceanLotus: opdatering af malware til macOS
Billede 6. Xrefs til funktionen f_decrypt

Den endelige version af scriptet kan findes på Github repository.

Output

Som allerede nævnt, forbedrer og opdaterer OceanLotus konstant deres værktøjer. Denne gang har cybersyndikatet forbedret malware til Mac-brugere. Koden er ikke meget ændret, men da mange Mac-brugere ignorerer sikkerhedsprodukter, er beskyttelse mod malware-detektion af sekundær betydning.

ESET-produkter har allerede opdaget denne fil på tidspunktet for undersøgelsen. Da netværksbiblioteket, der bruges til C&C-kommunikation, nu er krypteret på disken, er den præcise netværksprotokol, der bruges af angriberne, endnu ukendt.

Indikatorer for kompromittering

Indikatorer for kompromittering samt MITRE ATT&CK-attributter er også tilgængelige på GitHub.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster