I mars 2019 ble en ny prÞve av skadelig programvare for macOS lastet opp til VirusTotal, en populÊr nettjeneste for skanning. Ekskutable filen til bakdÞren har de samme mulighetene som den forrige versjonen av malware for macOS vi studerte, men strukturen har endret seg og det har blitt vanskeligere Ä oppdage. Dessverre har vi ikke klart Ä finne droppere knyttet til dette eksemplaret, sÄ vi vet forelÞpig ikke infeksjonsvektoren.
Nylig publiserte vi og hvordan operatÞrene prÞver Ä sikre persistens, pÄskynde utfÞrelsen av koden og minimere spor av tilstedevÊrelse i Windows-systemer. Det er ogsÄ kjent at denne cybergruppen har en komponent for macOS. Dette innlegget beskriver endringene i den nyeste versjonen av malware for macOS sammenlignet med den forrige varianten (), samt hvordan man kan automatisere dekodingsprosessen under analyse ved hjelp av IDA Hex-Rays API.

Analyse
I de neste tre delene beskrives analysen av prĂžven med SHA-1-hashen E615632C9998E4D3E5ACD8851864ED09B02C77D2. Filen kalles flashlightd, ESETs antivirusprodukter oppdager den som OSX/OceanLotus.D.
Anti-debugging og beskyttelse mot sandkasser
Som alle OceanLotus-macOS-binarier, er prĂžven pakket med UPX, men de fleste verktĂžy for identifisering av pakkere gjenkjenner den ikke som sĂ„dan. Sannsynligvis fordi de hovedsakelig inneholder en signatur avhengig av tilstedevĂŠrelsen av strengen âUPXâ, i tillegg er Mach-O signaturer sjeldnere og ikke sĂ„ ofte oppdateres. Denne egenskapen vanskeliggjĂžr statisk oppdagelse. Det er interessant at etter dekomprimering, er inngangspunktet lokalisert i begynnelsen av seksjonen __cfstring i segmentet .TEXT. I denne seksjonen er det flagg-attributter, som vist pĂ„ bildet nedenfor.

Figur 1. Attributtene for MACH-O-seksjonen __cfstring
Som vist i figur 2, gjĂžr plasseringen av koden i seksjonen __cfstring at noen disassembleringsverktĂžy kan bli lurt ved Ă„ vise koden som strenger.

Figur 2. BakdĂžren koden blir identifisert av IDA som data
Etter oppstart oppretter den binÊre filen en trÄd som et middel for beskyttelse mot debugging, hvis eneste mÄl er Ä konstant sjekke etter debuggere. For dette, gjÞr trÄden:
â PrĂžver Ă„ frakoble enhver debugger ved Ă„ kalle ptrace med PT_DENY_ATTACH som forespĂžrsel parameter
â Sjekker om noen unntaksporter er Ă„pne ved Ă„ kalle funksjonen task_get_exception_ports
â Sjekker om debuggteren er koblet til, som vist i bildet nedenfor, ved Ă„ sjekke for tilstedevĂŠrelsen av flagget P_TRACED i den nĂ„vĂŠrende prosessen

Figur 3. Sjekking av debuggertilkobling ved hjelp av sysctl-funksjonen
Hvis overvÄkingsskjemaet oppdager tilstedevÊrelsen av debuggerten, blir funksjonen kalt exit. I tillegg sjekker deretter prÞven miljÞet ved Ä kjÞre to kommandoer:
ioreg -l | grep -e "Manufacturer" og sysctl hw.model
Deretter sjekker prĂžven den returnerte verdien mot en hardkodet liste over kjente virtualiseringssystemer: acle, vmware, virtualbox eller parallels. 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â â MacBook Air osv.
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}'
Hovedtillegg
Selv om bakdĂžrskommandene ikke har endret seg siden Trend Micro-forskningen, har vi lagt merke til flere andre modifikasjoner. C&C-serverne som brukes i denne prĂžven er ganske nye, opprettelsesdatoen er 22.10.2018.
â daff.faybilodeau[.]com
â sarc.onteagleroad[.]com
â au.charlineopkesston[.]com
Ressurs-URL har endret seg til /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Den fĂžrste pakken sendt til C&C-serveren inneholder mer informasjon om vertsmaskinen, inkludert alle data samlet inn av kommandoene i tabellen nedenfor.

I tillegg til dette bruker prÞven for nettverksfiltrering ikke biblioteket , men et eksternt bibliotek. For Ä finne det, prÞver bakdÞren Ä dekryptere hver fil i den gjeldende katalogen ved hjelp av AES-256-CBC med en nÞkkel gFjMXBgyXWULmVVVzyxy, supplert med nuller. Hver fil dekrypteres og lagres som /tmp/store, og et forsÞk pÄ Ä laste den opp som et bibliotek er gjort ved hjelp av funksjonen . NÄr dekrypteringsforsÞket resulterer i et vellykket anrop dlopen, trekker bakdÞren ut de eksporterte funksjonene Boriry og ChadylonV, som tilsynelatende er ansvarlige for nettverksinteraksjon med serveren. Vi har verken dropperen eller andre filer fra den opprinnelige plasseringen av prÞven, sÄ vi kan ikke analysere dette biblioteket. Videre, siden komponenten er kryptert, vil et YARA-regel basert pÄ disse linjene ikke matche filen som finnes pÄ disken.
Som beskrevet i den ovennevnte artikkelen, opprettes cliendIDDenne identifikatoren er en MD5-hash av returverdien fra 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-adressen)
â ukjent kommando ("x1ex72x0a"), som brukes i de foregĂ„ende eksemplene.
FĂžr hashing av returverdien legges symbolet «0» eller «1» til, som indikerer tilstedevĂŠrelse av root-rettigheter. Denne clientID lagres i /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, hvis koden kjĂžres fra root, eller i ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML i alle andre tilfeller. Filen er vanligvis skjult med funksjonen , tidsstempelet endres med kommandoen touch ât med et tilfeldig verdi.
Avkoding av strenger
Som i de foregÄende versjonene, er strenger kryptert med AES-256-CBC (hex-nÞkkel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 fylt med nuller, og IV er fylt med nuller) gjennom funksjonen . NÞkkelen er endret sammenlignet med tidligere versjoner, men siden gruppen fortsatt bruker den samme krypteringsalgoritmen for strenger, kan dekryptering automatiseres. I tillegg til dette innlegget gir vi ut et IDA-skript som bruker Hex-Rays API for Ä dekryptere strenger som finnes i den binÊre filen. Dette skriptet kan hjelpe med fremtidig analyse av OceanLotus og analysen av eksisterende prÞver vi ennÄ ikke har vÊrt i stand til Ä fÄ. Basert pÄ skriptet er det en universell metode for Ä hente argumenter sendt til funksjonen. I tillegg sÞker den etter parameter tildelinger. Metoden kan brukes flere ganger for Ä hente en liste over funksjonsargumenter og deretter sende dem til en tilbakeringing (callback).
Ved Ä kjenne prototypen til funksjonen decrypt, finner skriptet alle kryssreferanser til denne funksjonen, alle argumenter, deretter dekrypterer den data og plasserer klar tekst i kommentarene ved kryssreferansens adresse. For at skriptet skal fungere riktig, mÄ det vÊre installert et tilpasset alfabet som brukes av funksjonen for dekoding av base64, og en global variabel som inneholder lengden pÄ nÞkkelen mÄ vÊre definert (i dette tilfellet DWORD, se figur 4).

Figur 4. Definering av global variabel key_len
I vinduet Function kan du hÞjreklikke for at kalde dekarteringsfunktionen og klikke pÄ 'Hent og dekod argumenter'. Scriptet skal placere de dekodede strenge i kommentarerne, som vist i figur 5.

Figur 5. Dekodet tekst indsat i kommentarer
PÄ denne mÄde er de dekodede strenge praktisk placeret sammen i IDA-vinduet xrefs for denne funktion, som vist i figur 6.

Figur 6. Xrefs til funktionen f_decrypt
Den endelige version af scriptet kan findes pÄ .
Utdata
Som allerede nĂŠvnt, forbedrer og opdaterer OceanLotus konstant deres vĂŠrktĂžjer. Denne gang har cybergruppen forbedret malware til Mac-brugere. Koden er ikke meget ĂŠndret, men da mange Mac-brugere ignorerer sikkerhedsprodukter, er beskyttelse mod opdagelse af malware mindre vigtig.
ESET-produkter har allerede registreret denne fil pÄ tidspunktet for undersÞgelsen. Da det netvÊrksbibliotek, der anvendes til C&C-kommunikation, nu er krypteret pÄ disken, er den nÞjagtige netvÊrksprotokol, der bruges af angriberne, endnu ikke kendt.
Indikatorer for kompromittering
Indikatorer for kompromittering samt MITRE ATT&CK-attributter er ogsÄ tilgÊngelige pÄ .
Kilde: habr.com
