OceanLotus: skadelig programvareoppdatering for macOS

I mars 2019 ble et nytt utvalg av macOS-malware fra cybergruppen OceanLotus lastet opp til VirusTotal, en populær nettbasert skanningstjeneste. Den kjørbare bakdørsfilen har de samme egenskapene som den forrige versjonen av macOS-malwaren vi studerte, men strukturen har endret seg og den har blitt vanskeligere å oppdage. Dessverre klarte vi ikke å finne en dropper assosiert med denne prøven, så vi kjenner ennå ikke smittevektoren.

Vi publiserte nylig innlegg om OceanLotus og hvordan operatører prøver å gi utholdenhet, øke hastigheten på kodeutførelse og minimere fotavtrykk på Windows-systemer. Det er også kjent at denne cybergruppen også har en komponent for macOS. Dette innlegget beskriver endringene i den nyeste versjonen av skadelig programvare for macOS sammenlignet med forrige versjon (beskrevet av Trend Micro), og beskriver også hvordan du kan automatisere dekryptering av strenger under analyse ved hjelp av IDA Hex-Rays API.

OceanLotus: skadelig programvareoppdatering for macOS

Analyse

De neste tre delene beskriver analysen av en prøve med en SHA-1-hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. Filen kalles lommelykt, ESET antivirusprodukter oppdager det som OSX/OceanLotus.D.

Anti-debugging og sandkassebeskyttelse

Som alle macOS OceanLotus-binærfiler, er prøven pakket med UPX, men de fleste pakkeridentifikasjonsverktøy gjenkjenner den ikke som sådan. Dette er sannsynligvis fordi de stort sett inneholder en signatur avhengig av tilstedeværelsen av "UPX"-strengen, i tillegg er Mach-O-signaturer mindre vanlige og blir ikke oppdatert så ofte. Denne funksjonen gjør statisk deteksjon vanskelig. Interessant nok, etter utpakking, er inngangspunktet i begynnelsen av delen __cfstring i segmentet .TEXT. Denne delen har flaggattributter som vist på bildet nedenfor.

OceanLotus: skadelig programvareoppdatering for macOS
Figur 1. MACH-O __cfstring seksjonsattributter

Som vist i figur 2, er kodeplasseringene i seksjonen __cfstring lar deg lure noen demonteringsverktøy ved å vise kode som strenger.

OceanLotus: skadelig programvareoppdatering for macOS
Figur 2. Bakdørskode oppdaget av IDA som data

Når den er utført, oppretter binærfilen en tråd som en anti-debugger hvis eneste formål er å kontinuerlig sjekke for tilstedeværelsen av en debugger. For denne flyten:

— Prøver å koble fra en hvilken som helst debugger, ringer ptrace с PT_DENY_ATTACH som en forespørselsparameter
- Sjekker om noen eksklusive porter er åpne ved å kalle en funksjon task_get_exception_ports
- Sjekker om feilsøkeren er tilkoblet, som vist i figuren under, ved å sjekke tilstedeværelsen av flagget P_TRACED i den nåværende prosessen

OceanLotus: skadelig programvareoppdatering for macOS
Figur 3. Kontroll av feilsøkingstilkoblingen ved hjelp av sysctl-funksjonen

Hvis vakthunden oppdager tilstedeværelsen av en debugger, kalles funksjonen opp exit. I tillegg sjekker prøven miljøet ved å kjøre to kommandoer:

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

Prøven sjekker deretter returverdien mot en hardkodet liste over strenger fra kjente virtualiseringssystemer: acle, VMware, VirtualBox eller paralleller. Til slutt sjekker neste kommando om maskinen er en av følgende "MBP", "MBA", "MB", "MM", "IM", "MP" og "XS". Dette er systemmodellkoder, for eksempel betyr "MBP" MacBook Pro, "MBA" betyr MacBook Air, etc.

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

Grunnleggende tillegg

Mens bakdørskommandoene ikke har endret seg siden Trend Micros forskning, la vi merke til noen få andre modifikasjoner. C&C-serverne som brukes i denne prøven er ganske nye og ble opprettet 22.10.2018.

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

Ressurs-URLen er endret til /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Den første pakken som sendes til C&C-serveren inneholder mer informasjon om vertsmaskinen, inkludert alle dataene som er samlet inn av kommandoene i tabellen nedenfor.

OceanLotus: skadelig programvareoppdatering for macOS

I tillegg til denne konfigurasjonsendringen, bruker ikke prøven et bibliotek for nettverksfiltrering libcurl, men et eksternt bibliotek. For å finne den prøver bakdøren å dekryptere hver fil i gjeldende katalog ved å bruke AES-256-CBC med nøkkelen gFjMXBgyXWULmVVVzyxy, polstret med nuller. Hver fil dekrypteres og lagres som /tmp/store, og et forsøk på å laste det som et bibliotek gjøres ved å bruke funksjonen dlopen. Når et dekrypteringsforsøk resulterer i en vellykket samtale dlopen, trekker bakdøren ut eksporterte funksjoner Boriry и ChadylonV, som tilsynelatende er ansvarlige for nettverkskommunikasjon med serveren. Vi har ikke dropper eller andre filer fra prøvens opprinnelige plassering, så vi kan ikke analysere dette biblioteket. Siden komponenten er kryptert, vil en YARA-regel basert på disse strengene ikke samsvare med filen som finnes på disken.

Som beskrevet i artikkelen ovenfor, skaper det klient-ID. Denne IDen er MD5-hashen til returverdien til en av 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)
- ukjent lag ("x1ex72x0a"), som er brukt i tidligere prøver

Før hashing legges en "0" eller "1" til returverdien for å indikere root-privilegier. Dette klient-ID lagret i /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, hvis koden kjøres som root eller i ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML i alle andre tilfeller. Filen skjules vanligvis ved hjelp av funksjonen _chflags, endres tidsstempelet ved hjelp av kommandoen touch –t med en tilfeldig verdi.

Dekoding av strenger

Som med tidligere alternativer, er strengene kryptert med AES-256-CBC (heksadesimal nøkkel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 polstret med nuller, og IV fylt med nuller) gjennom funksjonen CCCrypt. Nøkkelen er endret fra tidligere versjoner, men siden gruppen fortsatt bruker den samme strengkrypteringsalgoritmen, kan dekryptering automatiseres. I tillegg til dette innlegget gir vi ut et IDA-skript som bruker Hex-Rays API for å dekryptere strengene som finnes i den binære filen. Dette skriptet kan hjelpe med fremtidig analyse av OceanLotus og analyse av eksisterende prøver som vi ennå ikke har klart å få tak i. Skriptet er basert på en universell metode for å motta argumenter som sendes til en funksjon. I tillegg ser den opp parametertilordninger. Metoden kan gjenbrukes for å få en liste over funksjonsargumenter og deretter sende den til tilbakeringingen.

Kjenne til funksjonsprototypen dekryptere, finner skriptet alle kryssreferanser til denne funksjonen, alle argumenter, og dekrypterer deretter dataene og plasserer ren tekst i en kommentar på kryssreferanseadressen. For at skriptet skal fungere riktig, må det settes til det tilpassede alfabetet som brukes av base64-dekodingsfunksjonen, og en global variabel må defineres som inneholder lengden på nøkkelen (i dette tilfellet en DWORD, se figur 4).

OceanLotus: skadelig programvareoppdatering for macOS
Figur 4. Definisjon av den globale variabelen key_len

I funksjonsvinduet kan du høyreklikke på dekrypteringsfunksjonen og klikke på "Pakk ut og dekrypter argumenter." Skriptet skal plassere de dekrypterte linjene i kommentarer, som vist i figur 5.

OceanLotus: skadelig programvareoppdatering for macOS
Figur 5. Den dekrypterte teksten er plassert i kommentarfeltet

På denne måten er de dekrypterte strengene praktisk plassert sammen i IDA-vinduet xrefs for denne funksjonen som vist i figur 6.

OceanLotus: skadelig programvareoppdatering for macOS
Figur 6. Xrefs til f_decrypt funksjon

Det endelige manuset finner du på Github depot.

Utgang

Som allerede nevnt, forbedrer og oppdaterer OceanLotus stadig verktøysettet sitt. Denne gangen har cybergruppen forbedret skadelig programvare for å fungere med Mac-brukere. Koden har ikke endret seg mye, men siden mange Mac-brukere ignorerer sikkerhetsprodukter, er det av underordnet betydning å beskytte skadelig programvare mot oppdagelse.

ESET-produkter oppdaget allerede denne filen på undersøkelsestidspunktet. Fordi nettverksbiblioteket som brukes til C&C-kommunikasjon nå er kryptert på disk, er den eksakte nettverksprotokollen brukt av angriperne ennå ikke kjent.

Indikatorer på kompromisser

Indikatorer for kompromiss samt MITER ATT&CK-attributter er også tilgjengelige på GitHub.

Kilde: www.habr.com

Legg til en kommentar