Î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
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.
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.
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
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.
În plus față de această modificare de configurare, eșantionul nu folosește o bibliotecă pentru filtrarea rețelei 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
, 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 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
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).
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.
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.
Figura 6. Xrefs pentru funcția f_decrypt
Scenariul final poate fi găsit la
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
Sursa: www.habr.com