OceanLotus: actualizare malware pentru macOS

În martie 2019, un nou eșantion de malware macOS de la grupul cibernetic OceanLotus a fost încărcat în VirusTotal, un serviciu popular de scanare online. Fișierul executabil backdoor are aceleași capacități ca și versiunea anterioară a malware-ului macOS pe care l-am studiat, dar structura sa s-a schimbat și a devenit mai dificil de detectat. Din păcate, nu am putut găsi un picurător asociat cu această probă, așa că nu cunoaștem încă vectorul infecției.

Am publicat recent postare despre OceanLotus și modul în care operatorii încearcă să ofere persistență, să accelereze execuția codului și să minimizeze amprenta pe sistemele Windows. De asemenea, se știe că acest grup cibernetic are și o componentă pentru macOS. Această postare detaliază modificările din cea mai nouă versiune a malware-ului pentru macOS în comparație cu versiunea anterioară (descris de Trend Micro) și, de asemenea, descrie modul în care puteți automatiza decriptarea șirurilor în timpul analizei folosind API-ul IDA Hex-Rays.

OceanLotus: actualizare malware pentru macOS

analiza

Următoarele trei părți descriu analiza unui eșantion cu un hash SHA-1 E615632C9998E4D3E5ACD8851864ED09B02C77D2. Fișierul este numit lanternă, produsele antivirus ESET îl detectează ca OSX/OceanLotus.D.

Protecție anti-depanare și sandbox

La fel ca toate binarele macOS OceanLotus, eșantionul este ambalat cu UPX, dar majoritatea instrumentelor de identificare a ambalajului nu îl recunosc ca atare. Acest lucru se datorează probabil că acestea conțin în cea mai mare parte o semnătură dependentă de prezența șirului „UPX”, în plus, semnăturile Mach-O sunt mai puțin frecvente și nu sunt actualizate la fel de des. Această caracteristică face dificilă detectarea statică. Interesant, după despachetare, punctul de intrare este la începutul secțiunii __cfstring în segment .TEXT. Această secțiune are atribute de steag așa cum se arată în imaginea de mai jos.

OceanLotus: actualizare malware pentru macOS
Figura 1. Atributele secțiunii MACH-O __cfstring

După cum se arată în Figura 2, locațiile codului din secțiune __cfstring vă permite să păcăliți unele instrumente de dezasamblare prin afișarea codului sub formă de șiruri.

OceanLotus: actualizare malware pentru macOS
Figura 2. Codul backdoor detectat de IDA ca date

Odată executat, binarul creează un fir de execuție ca un anti-depanare al cărui singur scop este să verifice continuu prezența unui depanator. Pentru acest flux:

— Încearcă să decupleze orice depanator, apelând ptrace с PT_DENY_ATTACH ca parametru de cerere
- Verifică dacă unele porturi exclusive sunt deschise apelând o funcție task_get_exception_ports
- Verifică dacă depanatorul este conectat, așa cum se arată în figura de mai jos, verificând prezența steagului P_TRACED în procesul curent

OceanLotus: actualizare malware pentru macOS
Figura 3. Verificarea conexiunii depanatorului folosind funcția sysctl

Dacă watchdog-ul detectează prezența unui depanator, funcția este apelată exit. În plus, eșantionul verifică apoi mediul rulând două comenzi:

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

Eșantionul verifică apoi valoarea returnată cu o listă codificată de șiruri din sistemele de virtualizare cunoscute: acle, VMware, VirtualBox sau paralele. În cele din urmă, următoarea comandă verifică dacă aparatul este unul dintre următoarele „MBP”, „MBA”, „MB”, „MM”, „IM”, „MP” și „XS”. Acestea sunt coduri de model de sistem, de exemplu, „MBP” înseamnă MacBook Pro, „MBA” înseamnă MacBook Air etc.

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

Adăugări principale

Deși comenzile backdoor nu s-au schimbat de la cercetările Trend Micro, am observat alte câteva modificări. Serverele C&C utilizate în acest exemplu sunt destul de noi și au fost create pe 22.10.2018.

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

Adresa URL a resursei s-a schimbat în /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Primul pachet trimis către serverul C&C conține mai multe informații despre mașina gazdă, inclusiv toate datele colectate de comenzile din tabelul de mai jos.

OceanLotus: actualizare malware pentru macOS

În plus față de această modificare de configurare, eșantionul nu folosește o bibliotecă pentru filtrarea rețelei libcurl, ci o bibliotecă externă. Pentru a-l găsi, ușa din spate încearcă să decripteze fiecare fișier din directorul curent folosind AES-256-CBC cu cheia gFjMXBgyXWULmVVVzyxy, căptuşit cu zerouri. Fiecare fișier este decriptat și salvat ca /tmp/store, iar o încercare de a-l încărca ca bibliotecă se face folosind funcția dlopen. Când o încercare de decriptare are ca rezultat un apel reușit dlopen, backdoor extrage funcțiile exportate Boriry и ChadylonV, care aparent sunt responsabili pentru comunicarea în rețea cu serverul. Nu avem dropper sau alte fișiere din locația originală a eșantionului, așa că nu putem analiza această bibliotecă. Mai mult, deoarece componenta este criptată, o regulă YARA bazată pe aceste șiruri nu se va potrivi cu fișierul găsit pe disc.

După cum este descris în articolul de mai sus, creează ID client. Acest ID este hash-ul MD5 al valorii returnate a uneia dintre următoarele comenzi:

- 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}' (obține adresa MAC)
- echipa necunoscuta ("x1ex72x0a"), care este utilizat în mostrele anterioare

Înainte de hashing, un „0” sau „1” este adăugat la valoarea returnată pentru a indica privilegiile root. Acest clientID stocat in /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, dacă codul este rulat ca root sau în ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML în toate celelalte cazuri. Fișierul este de obicei ascuns folosind funcția _chflags, marcajul de timp este modificat folosind comanda touch –t cu o valoare aleatorie.

Decodificarea șirurilor

Ca și în cazul opțiunilor anterioare, șirurile sunt criptate folosind AES-256-CBC (cheie hexazecimală: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 umplut cu zerouri și IV umplut cu zerouri) prin funcție CCCrypt. Cheia s-a schimbat față de versiunile anterioare, dar din moment ce grupul folosește în continuare același algoritm de criptare șir, decriptarea poate fi automatizată. În plus față de această postare, lansăm un script IDA care utilizează API-ul Hex-Rays pentru a decripta șirurile prezente în fișierul binar. Acest script poate ajuta la analiza viitoare a OceanLotus și analiza mostrelor existente pe care încă nu le-am putut obține. Scriptul se bazează pe o metodă universală de primire a argumentelor transmise unei funcții. În plus, caută alocarea parametrilor. Metoda poate fi reutilizată pentru a obține o listă de argumente ale funcției și apoi o transmite callback-ului.

Cunoașterea prototipului funcției decripta, scriptul găsește toate referințele încrucișate la această funcție, toate argumentele, apoi decriptează datele și plasează text simplu în interiorul unui comentariu la adresa de referință încrucișată. Pentru ca scriptul să funcționeze corect, acesta trebuie setat la alfabetul personalizat utilizat de funcția de decodare base64 și trebuie definită o variabilă globală care să conțină lungimea cheii (în acest caz un DWORD, vezi Figura 4).

OceanLotus: actualizare malware pentru macOS
Figura 4. Definiția variabilei globale key_len

În fereastra Funcție, puteți face clic dreapta pe funcția de decriptare și faceți clic pe „Extrageți și decriptați argumentele”. Scriptul ar trebui să plaseze liniile decriptate în comentarii, așa cum se arată în Figura 5.

OceanLotus: actualizare malware pentru macOS
Figura 5. Textul decriptat este plasat în comentarii

În acest fel șirurile decriptate sunt plasate în mod convenabil împreună în fereastra IDA xrefs pentru această funcție, așa cum se arată în Figura 6.

OceanLotus: actualizare malware pentru macOS
Figura 6. Xrefs pentru funcția f_decrypt

Scenariul final poate fi găsit la Depozit Github.

Producție

După cum am menționat deja, OceanLotus își îmbunătățește și își actualizează în mod constant setul de instrumente. De data aceasta, grupul cibernetic a îmbunătățit malware-ul pentru a funcționa cu utilizatorii de Mac. Codul nu s-a schimbat prea mult, dar din moment ce mulți utilizatori de Mac ignoră produsele de securitate, protejarea malware-ului împotriva detectării este de o importanță secundară.

Produsele ESET detectau deja acest fișier în momentul cercetării. Deoarece biblioteca de rețea folosită pentru comunicarea C&C este acum criptată pe disc, protocolul de rețea exact folosit de atacatori nu este încă cunoscut.

Indicatori de compromis

Indicatorii de compromis, precum și atributele MITRE ATT&CK sunt, de asemenea, disponibili pe GitHub.

Sursa: www.habr.com

Adauga un comentariu