OceanLotus: wanware-opdatering vir macOS

In Maart 2019 is 'n nuwe voorbeeld van macOS-wanware van die kubergroep OceanLotus na VirusTotal, 'n gewilde aanlyn skanderingsdiens, opgelaai. Die agterdeur-uitvoerbare lêer het dieselfde vermoëns as die vorige weergawe van die macOS-wanware wat ons bestudeer het, maar die struktuur daarvan het verander en dit het moeiliker geword om op te spoor. Ongelukkig kon ons nie 'n drupper vind wat met hierdie monster geassosieer word nie, so ons ken nog nie die infeksievektor nie.

Ons het onlangs gepubliseer plasing oor OceanLotus en hoe operateurs probeer om volharding te bied, kode-uitvoering te bespoedig en voetspoor op Windows-stelsels te verminder. Dit is ook bekend dat hierdie kubergroep ook 'n komponent vir macOS het. Hierdie pos gee besonderhede oor die veranderinge in die nuutste weergawe van die wanware vir macOS in vergelyking met die vorige weergawe (beskryf deur Trend Micro), en beskryf ook hoe jy die dekripsie van stringe kan outomatiseer tydens analise met behulp van die IDA Hex-Rays API.

OceanLotus: wanware-opdatering vir macOS

Analise

Die volgende drie dele beskryf die ontleding van 'n monster met 'n SHA-1 hash E615632C9998E4D3E5ACD8851864ED09B02C77D2. Die lêer word genoem flitslig, ESET-antivirusprodukte bespeur dit as OSX/OceanLotus.D.

Anti-ontfouting en sandbox beskerming

Soos alle macOS OceanLotus-binaries, is die monster verpak met UPX, maar die meeste verpakker-identifikasienutsgoed herken dit nie as sodanig nie. Dit is waarskynlik omdat hulle meestal 'n handtekening bevat wat afhanklik is van die teenwoordigheid van die "UPX"-string, boonop is Mach-O-handtekeninge minder algemeen en word nie so gereeld opgedateer nie. Hierdie kenmerk maak statiese opsporing moeilik. Interessant genoeg, na die uitpak, is die toegangspunt aan die begin van die afdeling __cfstring in die segment .TEXT. Hierdie afdeling het vlagkenmerke soos in die prent hieronder getoon.

OceanLotus: wanware-opdatering vir macOS
Figuur 1. MACH-O __cfstring afdeling eienskappe

Soos getoon in Figuur 2, die kode plekke in die afdeling __cfstring laat jou toe om 'n paar demontage-instrumente te mislei deur kode as stringe te vertoon.

OceanLotus: wanware-opdatering vir macOS
Figuur 2. Agterdeur-kode wat deur IDA as data opgespoor is

Sodra dit uitgevoer is, skep die binêre 'n draad as 'n anti-ontfouter wie se enigste doel is om voortdurend te kyk vir die teenwoordigheid van 'n ontfouter. Vir hierdie vloei:

— Probeer om enige ontfouter te onthaak, roep ptrace с PT_DENY_ATTACH as 'n versoekparameter
- Kontroleer of sommige eksklusiewe poorte oop is deur 'n funksie te roep task_get_exception_ports
- Kontroleer of die ontfouter gekoppel is, soos in die figuur hieronder getoon, deur die teenwoordigheid van die vlag na te gaan P_TRACED in die huidige proses

OceanLotus: wanware-opdatering vir macOS
Figuur 3. Kontroleer die ontfouterverbinding deur die sysctl-funksie te gebruik

As die waghond die teenwoordigheid van 'n ontfouter bespeur, word die funksie genoem exit. Daarbenewens kontroleer die monster dan die omgewing deur twee opdragte uit te voer:

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

Die monster kontroleer dan die terugkeerwaarde teen 'n hardgekodeerde lys stringe van bekende virtualisasiestelsels: akel, VMware, virtualbox of parallelle. Laastens, die volgende opdrag kyk of die masjien een van die volgende "MBP", "MBA", "MB", "MM", "IM", "MP" en "XS" is. Dit is stelselmodelkodes, byvoorbeeld, "MBP" beteken MacBook Pro, "MBA" beteken MacBook Air, ens.

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

Belangrikste toevoegings

Alhoewel die agterdeur-opdragte nie verander het sedert Trend Micro se navorsing nie, het ons 'n paar ander wysigings opgemerk. Die C&C-bedieners wat in hierdie voorbeeld gebruik word, is redelik nuut en is op 22.10.2018/XNUMX/XNUMX geskep.

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

Die hulpbron-URL het verander na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Die eerste pakkie wat na die C&C-bediener gestuur word, bevat meer inligting oor die gasheermasjien, insluitend al die data wat deur die opdragte in die tabel hieronder ingesamel is.

OceanLotus: wanware-opdatering vir macOS

Benewens hierdie konfigurasieverandering, gebruik die monster nie 'n biblioteek vir netwerkfiltrering nie libcurl, maar 'n eksterne biblioteek. Om dit te vind, probeer die agterdeur om elke lêer in die huidige gids te dekripteer met AES-256-CBC met die sleutel gFjMXBgyXWULmVVVzyxy, opgevul met nulle. Elke lêer word gedekripteer en gestoor as /tmp/store, en 'n poging om dit as 'n biblioteek te laai word met die funksie aangewend dlopen. Wanneer 'n dekripsiepoging 'n suksesvolle oproep tot gevolg het dlopen, die agterdeur onttrek uitgevoer funksies Boriry и ChadylonV, wat blykbaar verantwoordelik is vir netwerkkommunikasie met die bediener. Ons het nie die dropper of ander lêers vanaf die monster se oorspronklike ligging nie, so ons kan nie hierdie biblioteek ontleed nie. Verder, aangesien die komponent geïnkripteer is, sal 'n YARA-reël gebaseer op hierdie stringe nie ooreenstem met die lêer wat op skyf gevind is nie.

Soos beskryf in die bogenoemde artikel, skep dit kliëntID. Hierdie ID is die MD5-hash van die terugkeerwaarde van een van die volgende opdragte:

- 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}' (kry MAC-adres)
- onbekende span ("x1ex72x0a"), wat in vorige voorbeelde gebruik word

Voor hashing word 'n "0" of "1" by die terugkeerwaarde gevoeg om wortelvoorregte aan te dui. Hierdie kliëntID gestoor in /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, as die kode as wortel of in ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML in alle ander gevalle uitgevoer word. Die lêer word gewoonlik met die funksie versteek _chvlags, word sy tydstempel verander met behulp van die opdrag touch –t met 'n ewekansige waarde.

Dekodering snare

Soos met vorige opsies, word die stringe geïnkripteer met AES-256-CBC (heksadesimale sleutel: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 opgevul met nulle, en IV gevul met nulle) deur die funksie CCCrypt. Die sleutel het verander vanaf vorige weergawes, maar aangesien die groep steeds dieselfde string-enkripsie-algoritme gebruik, kan dekripsie geoutomatiseer word. Benewens hierdie pos, stel ons 'n IDA-skrip vry wat die Hex-Rays API gebruik om die stringe wat in die binêre lêer teenwoordig is, te dekripteer. Hierdie skrif kan help met toekomstige ontleding van OceanLotus en ontleding van bestaande monsters wat ons nog nie kon bekom nie. Die skrif is gebaseer op 'n universele metode om argumente wat na 'n funksie oorgedra word, te ontvang. Daarbenewens soek dit parametertoewysings op. Die metode kan hergebruik word om 'n lys van funksie-argumente te kry en dit dan na die terugbel deur te gee.

Ken die funksie prototipe decrypt, vind die skrip alle kruisverwysings na hierdie funksie, alle argumente, dekripteer dan die data en plaas gewone teks binne 'n opmerking by die kruisverwysingsadres. Vir die skrif om korrek te werk, moet dit gestel word op die pasgemaakte alfabet wat deur die base64-dekoderingsfunksie gebruik word, en 'n globale veranderlike moet gedefinieer word wat die lengte van die sleutel bevat (in hierdie geval 'n DWORD, sien Figuur 4).

OceanLotus: wanware-opdatering vir macOS
Figuur 4. Definisie van die globale veranderlike key_len

In die funksie-venster kan u met die rechtermuisknop op die dekripsiefunksie klik en op "Uittreksel en dekripteer argumente" klik. Die skrip moet die gedekripteerde lyne in opmerkings plaas, soos in Figuur 5 getoon.

OceanLotus: wanware-opdatering vir macOS
Figuur 5. Die ontsyferde teks word in die kommentaar geplaas

Op hierdie manier word die gedekripteerde stringe gerieflik saam in die IDA-venster geplaas xrefs vir hierdie funksie soos in Figuur 6 getoon.

OceanLotus: wanware-opdatering vir macOS
Figuur 6. Xrefs na f_decrypt funksie

Die finale draaiboek kan gevind word by Github repository.

Output

Soos reeds genoem, is OceanLotus voortdurend besig om sy gereedskapstel te verbeter en op te dateer. Hierdie keer het die kubergroep die wanware verbeter om met Mac-gebruikers te werk. Die kode het nie veel verander nie, maar aangesien baie Mac-gebruikers sekuriteitsprodukte ignoreer, is die beskerming van wanware teen opsporing van sekondêre belang.

ESET-produkte het reeds hierdie lêer bespeur ten tyde van navorsing. Omdat die netwerkbiblioteek wat vir C&C-kommunikasie gebruik word, nou op skyf geïnkripteer is, is die presiese netwerkprotokol wat deur die aanvallers gebruik word nog nie bekend nie.

Aanduiders van kompromie

Aanwysers van kompromie sowel as MITER ATT&CK-eienskappe is ook beskikbaar op GitHub.

Bron: will.com

Voeg 'n opmerking