OceanLotus: Haittaohjelmapäivitys macOS:lle

Maaliskuussa 2019 suosittuun verkkoskannauspalveluun VirusTotaliin ladattiin uusi näyte macOS-haittaohjelmista kyberryhmältä OceanLotus. Takaoven suoritettavalla tiedostolla on samat ominaisuudet kuin tutkimamme macOS-haittaohjelman edellisellä versiolla, mutta sen rakenne on muuttunut ja sen havaitseminen on vaikeutunut. Valitettavasti emme löytäneet tähän näytteeseen liittyvää tiputinta, joten emme vielä tiedä tartuntavektoria.

Julkaisimme äskettäin viesti OceanLotusista ja kuinka operaattorit yrittävät tarjota pysyvyyttä, nopeuttaa koodin suorittamista ja minimoida jalanjäljen Windows-järjestelmissä. Tiedetään myös, että tällä kyberryhmällä on myös macOS-komponentti. Tässä viestissä kerrotaan macOS:n haittaohjelman uusimman version muutoksista verrattuna edelliseen versioon (Trend Micron kuvaama), ja kuvailee myös, kuinka voit automatisoida merkkijonojen salauksen purkamisen analyysin aikana IDA Hex-Rays API:n avulla.

OceanLotus: Haittaohjelmapäivitys macOS:lle

Analyysi

Seuraavat kolme osaa kuvaavat näytteen analysointia SHA-1-tiivisteellä E615632C9998E4D3E5ACD8851864ED09B02C77D2. Tiedostoa kutsutaan taskulamppu, ESETin virustorjuntatuotteet havaitsevat sen muodossa OSX/OceanLotus.D.

Virheenkorjauksen esto ja hiekkalaatikkosuojaus

Kuten kaikki macOS OceanLotus -binaarit, näyte on pakattu UPX:llä, mutta useimmat pakkaajien tunnistustyökalut eivät tunnista sitä sellaisenaan. Tämä johtuu luultavasti siitä, että ne sisältävät enimmäkseen "UPX"-merkkijonosta riippuvan allekirjoituksen, lisäksi Mach-O-allekirjoitukset ovat harvinaisempia ja niitä ei päivitetä niin usein. Tämä ominaisuus vaikeuttaa staattisen sähkön havaitsemista. Mielenkiintoista on, että pakkauksen purkamisen jälkeen sisääntulopiste on osan alussa __cfstring segmentissä .TEXT. Tässä osiossa on lippumääritteet alla olevan kuvan mukaisesti.

OceanLotus: Haittaohjelmapäivitys macOS:lle
Kuva 1. MACH-O __cfstring -osion attribuutit

Kuten kuvassa 2, koodin sijainnit osiossa __cfstring voit huijata joitain purkutyökaluja näyttämällä koodia merkkijonoina.

OceanLotus: Haittaohjelmapäivitys macOS:lle
Kuva 2. IDA:n tietona havaitsema takaovikoodi

Kun binaari on suoritettu, se luo säikeen virheenkorjausohjelmana, jonka ainoana tarkoituksena on jatkuvasti tarkistaa, onko debuggeri olemassa. Tätä virtausta varten:

— Yrittää irrottaa debuggerin soittamalla ptrace с PT_DENY_ATTACH pyyntöparametrina
- Tarkistaa, ovatko jotkin eksklusiiviset portit auki kutsumalla toimintoa task_get_exception_ports
- Tarkistaa, onko debuggeri kytketty alla olevan kuvan mukaisesti, tarkistamalla lipun olemassaolo P_TRACED nykyisessä prosessissa

OceanLotus: Haittaohjelmapäivitys macOS:lle
Kuva 3. Vianetsintäyhteyden tarkistaminen sysctl-funktiolla

Jos vahtikoira havaitsee debuggerin, toiminto kutsutaan exit. Lisäksi näyte tarkistaa ympäristön suorittamalla kaksi komentoa:

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

Sitten näyte tarkistaa palautusarvon tunnetuista virtualisointijärjestelmistä koodattua merkkijonoluetteloa vastaan: acle, vMware, virtualbox tai rinnastukset. Lopuksi seuraava komento tarkistaa, onko kone jokin seuraavista "MBP", "MBA", "MB", "MM", "IM", "MP" ja "XS". Nämä ovat järjestelmämallikoodeja, esimerkiksi "MBP" tarkoittaa MacBook Prota, "MBA" tarkoittaa MacBook Airia jne.

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

Tärkeimmät lisäykset

Vaikka takaoven komennot eivät ole muuttuneet Trend Micron tutkimuksen jälkeen, huomasimme muutamia muita muutoksia. Tässä näytteessä käytetyt C&C-palvelimet ovat melko uusia ja luotu 22.10.2018.

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

Resurssin URL-osoite on muuttunut muotoon /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Ensimmäinen C&C-palvelimelle lähetetty paketti sisältää lisätietoja isäntäkoneesta, mukaan lukien kaikki alla olevan taulukon komentojen keräämät tiedot.

OceanLotus: Haittaohjelmapäivitys macOS:lle

Tämän kokoonpanomuutoksen lisäksi näyte ei käytä kirjastoa verkon suodattamiseen libcurl, mutta ulkoinen kirjasto. Löytääkseen sen takaovi yrittää purkaa jokaisen nykyisen hakemiston tiedoston salauksen käyttämällä AES-256-CBC:tä avaimella gFjMXBgyXWULmVVVzyxy, pehmustettu nolilla. Jokaisen tiedoston salaus puretaan ja tallennetaan nimellä /tmp/store, ja se yritetään ladata kirjastona funktiolla dlopen. Kun salauksen purkuyritys johtaa onnistuneeseen puheluun dlopen, takaovi poimii viedyt toiminnot Boriry и ChadylonV, jotka ilmeisesti vastaavat verkkoyhteydestä palvelimen kanssa. Meillä ei ole dropperia tai muita tiedostoja näytteen alkuperäisestä sijainnista, joten emme voi jäsentää tätä kirjastoa. Lisäksi, koska komponentti on salattu, näihin merkkijonoihin perustuva YARA-sääntö ei vastaa levyltä löytyvää tiedostoa.

Kuten yllä olevassa artikkelissa kuvataan, se luo Asiakastunnus. Tämä tunnus on yhden seuraavista komennoista palautusarvon MD5-tiiviste:

- 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}' (hanki MAC-osoite)
- tuntematon joukkue ("x1ex72x0a"), jota on käytetty aikaisemmissa näytteissä

Ennen tiivistystä palautusarvoon lisätään "0" tai "1" osoittamaan pääkäyttäjän oikeuksia. Tämä Asiakastunnus tallennettu sisään /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, jos koodi suoritetaan pääkäyttäjänä tai tiedostossa ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML kaikissa muissa tapauksissa. Tiedosto on yleensä piilotettu käyttämällä toimintoa _chflags, sen aikaleima muutetaan komennolla touch –t satunnaisella arvolla.

merkkijonojen dekoodaus

Kuten aikaisemmissakin vaihtoehdoissa, merkkijonot salataan AES-256-CBC:llä (heksadesimaaliavain: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 täytetty nolilla ja IV täytetty nolilla) funktion kautta CCCrypt. Avain on muuttunut aiemmista versioista, mutta koska ryhmä käyttää edelleen samaa merkkijonosalausalgoritmia, salauksen purku voidaan automatisoida. Tämän viestin lisäksi julkaisemme IDA-skriptin, joka käyttää Hex-Rays API:ta binaaritiedoston merkkijonojen salauksen purkamiseen. Tämä skripti voi auttaa OceanLotuksen tulevassa analysoinnissa ja olemassa olevien näytteiden analysoinnissa, joita emme ole vielä pystyneet saamaan. Skripti perustuu universaaliin menetelmään funktiolle välitettyjen argumenttien vastaanottamiseksi. Lisäksi se etsii parametrien määritykset. Menetelmää voidaan käyttää uudelleen saadakseen luettelo funktion argumenteista ja välittää se sitten takaisinkutsuun.

Toiminnon prototyypin tunteminen purkaa, skripti löytää kaikki ristiviittaukset tähän funktioon, kaikki argumentit, purkaa tietojen salauksen ja sijoittaa pelkkää tekstiä kommentin sisään ristiviittausosoitteeseen. Jotta komentosarja toimisi oikein, se on asetettava base64-dekoodaustoiminnon käyttämiin mukautettuihin aakkosiin ja määritettävä globaali muuttuja, joka sisältää avaimen pituuden (tässä tapauksessa DWORD, katso kuva 4).

OceanLotus: Haittaohjelmapäivitys macOS:lle
Kuva 4. Globaalin muuttujan key_len määritelmä

Toiminto-ikkunassa voit napsauttaa salauksen purkutoimintoa hiiren kakkospainikkeella ja valita "Pura ja pura argumentit". Skriptin tulee sijoittaa salatut rivit kommentteihin kuvan 5 mukaisesti.

OceanLotus: Haittaohjelmapäivitys macOS:lle
Kuva 5. Purettu teksti sijoitetaan kommentteihin

Näin puretut merkkijonot sijoitetaan kätevästi yhteen IDA-ikkunassa xrefs tätä toimintoa varten kuvan 6 mukaisesti.

OceanLotus: Haittaohjelmapäivitys macOS:lle
Kuva 6. Xrefs to f_decrypt -funktioon

Lopullinen käsikirjoitus löytyy osoitteesta Github-arkisto.

johtopäätös

Kuten jo mainittiin, OceanLotus parantaa ja päivittää työkalupakettiaan jatkuvasti. Tällä kertaa kyberryhmä on parantanut haittaohjelmia toimimaan Mac-käyttäjien kanssa. Koodi ei ole juurikaan muuttunut, mutta koska monet Mac-käyttäjät jättävät tietoturvatuotteet huomiotta, haittaohjelmien suojaaminen havaitsemiselta on toissijaista.

ESET-tuotteet havaitsivat tämän tiedoston jo tutkimushetkellä. Koska C&C-viestintään käytetty verkkokirjasto on nyt salattu levylle, hyökkääjien käyttämää tarkkaa verkkoprotokollaa ei vielä tiedetä.

Kompromissin osoittimet

Kompromissin ilmaisimet sekä MITER ATT&CK -attribuutit ovat myös saatavilla GitHub.

Lähde: will.com

Lisää kommentti