OceanLotus: aktualizácia škodlivého softvéru pre macOS

V marci 2019 bola do populárnej online skenovacej služby VirusTotal nahraná nová vzorka malvéru macOS od kybernetickej skupiny OceanLotus. Spustiteľný súbor backdoor má rovnaké možnosti ako predchádzajúca verzia škodlivého softvéru macOS, ktorý sme študovali, ale jeho štruktúra sa zmenila a bolo ťažšie ho odhaliť. Bohužiaľ sa nám nepodarilo nájsť kvapkadlo spojené s touto vzorkou, takže zatiaľ nepoznáme vektor infekcie.

Nedávno sme zverejnili príspevok o OceanLotus a ako sa operátori snažia zabezpečiť vytrvalosť, urýchliť vykonávanie kódu a minimalizovať nároky na systém Windows. Je tiež známe, že táto kybernetická skupina má komponent aj pre macOS. Tento príspevok podrobne popisuje zmeny v najnovšej verzii malvéru pre macOS v porovnaní s predchádzajúcou verziou (opísal Trend Micro) a tiež popisuje, ako môžete automatizovať dešifrovanie reťazcov počas analýzy pomocou IDA Hex-Rays API.

OceanLotus: aktualizácia škodlivého softvéru pre macOS

analýza

Nasledujúce tri časti popisujú analýzu vzorky s hashom SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Súbor sa volá baterkou, antivírusové produkty ESET ho detegujú ako OSX/OceanLotus.D.

Ochrana proti ladeniu a karanténe

Rovnako ako všetky binárne súbory MacOS OceanLotus, vzorka je zabalená s UPX, ale väčšina nástrojov na identifikáciu balíčka ju ako takú nerozpozná. Je to pravdepodobne preto, že väčšinou obsahujú podpis závislý od prítomnosti reťazca „UPX“, navyše podpisy Mach-O sú menej bežné a nie sú tak často aktualizované. Táto funkcia sťažuje detekciu statickej elektriny. Zaujímavosťou je, že po vybalení je vstupný bod na začiatku úseku __cfstring v segmente .TEXT. Táto sekcia má atribúty vlajky, ako je znázornené na obrázku nižšie.

OceanLotus: aktualizácia škodlivého softvéru pre macOS
Obrázok 1. Atribúty sekcie MACH-O __cfstring

Ako je znázornené na obrázku 2, umiestnenie kódu v sekcii __cfstring umožňuje oklamať niektoré nástroje na demontáž zobrazením kódu ako reťazcov.

OceanLotus: aktualizácia škodlivého softvéru pre macOS
Obrázok 2. Kód zadného vrátka detekovaný IDA ako dáta

Po spustení binárny súbor vytvorí vlákno ako anti-debugger, ktorého jediným účelom je neustále kontrolovať prítomnosť debuggera. Pre tento tok:

— Pokúša sa odpojiť akýkoľvek debugger, volá ptrace с PT_DENY_ATTACH ako parameter požiadavky
- Volaním funkcie kontroluje, či sú otvorené niektoré exkluzívne porty task_get_exception_ports
- Skontroluje, či je debugger pripojený, ako je znázornené na obrázku nižšie, kontrolou prítomnosti príznaku P_TRACED v aktuálnom procese

OceanLotus: aktualizácia škodlivého softvéru pre macOS
Obrázok 3. Kontrola pripojenia debuggera pomocou funkcie sysctl

Ak strážny pes zistí prítomnosť debuggera, funkcia sa zavolá exit. Okrem toho vzorka skontroluje prostredie spustením dvoch príkazov:

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

Vzorka potom skontroluje návratovú hodnotu oproti pevne zakódovanému zoznamu reťazcov zo známych virtualizačných systémov: acle, vmware, VirtualBox alebo paralely. Nakoniec nasledujúci príkaz skontroluje, či je stroj jedným z nasledujúcich „MBP“, „MBA“, „MB“, „MM“, „IM“, „MP“ a „XS“. Ide o kódy modelu systému, napríklad „MBP“ znamená MacBook Pro, „MBA“ znamená MacBook Air atď.

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

Hlavné doplnky

Zatiaľ čo príkazy pre zadné vrátka sa od výskumu Trend Micro nezmenili, všimli sme si niekoľko ďalších úprav. Servery C&C použité v tejto vzorke sú celkom nové a boli vytvorené 22.10.2018.

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

Adresa URL zdroja sa zmenila na /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Prvý paket odoslaný na server C&C obsahuje viac informácií o hostiteľskom počítači vrátane všetkých údajov zhromaždených príkazmi v tabuľke nižšie.

OceanLotus: aktualizácia škodlivého softvéru pre macOS

Okrem tejto zmeny konfigurácie vzorka nepoužíva knižnicu na filtrovanie siete libcurl, ale externá knižnica. Aby ho backdoor našiel, pokúsi sa dešifrovať každý súbor v aktuálnom adresári pomocou AES-256-CBC s kľúčom gFjMXBgyXWULmVVVzyxy, doplnené nulami. Každý súbor je dešifrovaný a uložený ako /tmp/storea pomocou funkcie sa vykoná pokus o načítanie ako knižnice dlopen. Keď pokus o dešifrovanie vedie k úspešnému hovoru dlopen, zadné vrátka extrahujú exportované funkcie Boriry и ChadylonV, ktoré sú zrejme zodpovedné za sieťovú komunikáciu so serverom. Nemáme kvapkadlo ani iné súbory z pôvodného umiestnenia vzorky, takže túto knižnicu nemôžeme analyzovať. Navyše, keďže je komponent šifrovaný, pravidlo YARA založené na týchto reťazcoch sa nebude zhodovať so súborom nájdeným na disku.

Ako je opísané vo vyššie uvedenom článku, vytvára clientID. Toto ID je MD5 hash návratovej hodnoty jedného z nasledujúcich príkazov:

- 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}' (získať MAC adresu)
- neznámy tím ("x1ex72x0a"), ktorý je použitý v predchádzajúcich vzorkách

Pred hashovaním sa k vrátenej hodnote pridá „0“ alebo „1“, ktoré označujú oprávnenia root. Toto clientID uložené v /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ak je kód spustený ako root alebo vo všetkých ostatných prípadoch v ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML. Súbor je zvyčajne skrytý pomocou funkcie _chflags, jeho časová pečiatka sa zmení pomocou príkazu touch –t s náhodnou hodnotou.

Dekódovacie reťazce

Rovnako ako v predchádzajúcich možnostiach sú reťazce šifrované pomocou AES-256-CBC (hexadecimálny kľúč: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 vyplnené nulami a IV vyplnené nulami) prostredníctvom funkcie CCCrypt. Kľúč sa oproti predchádzajúcim verziám zmenil, ale keďže skupina stále používa rovnaký reťazcový šifrovací algoritmus, dešifrovanie môže byť automatizované. Okrem tohto príspevku vydávame skript IDA, ktorý používa rozhranie Hex-Rays API na dešifrovanie reťazcov prítomných v binárnom súbore. Tento skript môže pomôcť s budúcou analýzou OceanLotus a analýzou existujúcich vzoriek, ktoré sa nám zatiaľ nepodarilo získať. Skript je založený na univerzálnej metóde prijímania argumentov odovzdaných funkcii. Okrem toho vyhľadáva priradenia parametrov. Metódu možno znova použiť na získanie zoznamu argumentov funkcií a potom ho odovzdať spätnému volaniu.

Poznanie prototypu funkcie dešifrovať, skript nájde všetky krížové odkazy na túto funkciu, všetky argumenty, potom dešifruje údaje a umiestni obyčajný text do komentára na adresu krížového odkazu. Aby skript fungoval správne, musí byť nastavený na vlastnú abecedu používanú dekódovacou funkciou base64 a musí byť definovaná globálna premenná obsahujúca dĺžku kľúča (v tomto prípade DWORD, pozri obrázok 4).

OceanLotus: aktualizácia škodlivého softvéru pre macOS
Obrázok 4. Definícia globálnej premennej key_len

V okne Funkcia môžete kliknúť pravým tlačidlom myši na funkciu dešifrovania a kliknúť na „Extrahovať a dešifrovať argumenty“. Skript by mal umiestniť dešifrované riadky do komentárov, ako je znázornené na obrázku 5.

OceanLotus: aktualizácia škodlivého softvéru pre macOS
Obrázok 5. Dešifrovaný text je umiestnený v komentároch

Týmto spôsobom sú dešifrované reťazce pohodlne umiestnené spolu v okne IDA xrefs pre túto funkciu, ako je znázornené na obrázku 6.

OceanLotus: aktualizácia škodlivého softvéru pre macOS
Obrázok 6. Xrefs funkcie f_decrypt

Finálny scenár nájdete na Úložisko Githubu.

Výkon

Ako už bolo spomenuté, OceanLotus neustále zlepšuje a aktualizuje svoju sadu nástrojov. Tentoraz kybernetická skupina vylepšila malvér na prácu s používateľmi počítačov Mac. Kód sa príliš nezmenil, no keďže mnohí používatelia Macov ignorujú bezpečnostné produkty, ochrana malvéru pred detekciou je druhoradá.

Produkty ESET tento súbor detegovali už v čase výskumu. Keďže sieťová knižnica používaná na komunikáciu C&C je teraz na disku šifrovaná, presný sieťový protokol, ktorý útočníci použili, zatiaľ nie je známy.

Ukazovatele kompromisu

Indikátory kompromisu, ako aj atribúty MITER ATT&CK sú dostupné aj na GitHub.

Zdroj: hab.com

Pridať komentár