OceanLotus: Malware frissítés a macOS rendszerhez

2019 márciusában az OceanLotus kibercsoporttól származó macOS rosszindulatú program új mintáját töltötték fel a VirusTotal, egy népszerű online szkennelő szolgáltatásba. A hátsó ajtón futtatható fájl ugyanazokkal a képességekkel rendelkezik, mint az általunk vizsgált macOS kártevő előző verziója, de a szerkezete megváltozott, és nehezebbé vált az észlelése. Sajnos ehhez a mintához nem tudtunk csepegtetőt találni, így még nem ismerjük a fertőzés vektorát.

Nemrég publikáltuk bejegyzés az OceanLotusról és hogy a kezelők hogyan próbálják biztosítani a kitartást, felgyorsítani a kódvégrehajtást és minimalizálni a lábnyomot a Windows rendszereken. Az is ismert, hogy ennek a kibercsoportnak is van egy összetevője a macOS számára. Ez a bejegyzés részletezi a macOS-hez készült rosszindulatú program legújabb verziójának változásait az előző verzióhoz képest (írta le a Trend Micro), és azt is leírja, hogyan automatizálhatja a karakterláncok visszafejtését elemzés közben az IDA Hex-Rays API segítségével.

OceanLotus: Malware frissítés a macOS rendszerhez

Elemzés

A következő három rész egy minta elemzését írja le SHA-1 hash-sel E615632C9998E4D3E5ACD8851864ED09B02C77D2. A fájl neve zseblámpa, az ESET víruskereső termékei OSX/OceanLotus.D-ként észlelik.

Hibakeresés és homokozó védelem

Az összes macOS OceanLotus binárishoz hasonlóan a minta UPX-szel van csomagolva, de a legtöbb csomagolóazonosító eszköz nem ismeri fel. Ez valószínűleg azért van, mert többnyire az „UPX” karakterlánc jelenlététől függő aláírást tartalmaznak, ráadásul a Mach-O aláírások ritkábban fordulnak elő, és nem frissülnek olyan gyakran. Ez a funkció megnehezíti a statikus érzékelést. Érdekes módon a kicsomagolás után a szakasz elején van a belépési pont __cfstring a szegmensben .TEXT. Ez a szakasz az alábbi képen látható zászlóattribútumokkal rendelkezik.

OceanLotus: Malware frissítés a macOS rendszerhez
1. ábra MACH-O __cfstring szakasz attribútumai

Ahogy a 2. ábrán látható, a kódhelyek a szakaszban __cfstring lehetővé teszi néhány szétszerelő eszköz becsapását a kód karakterláncként történő megjelenítésével.

OceanLotus: Malware frissítés a macOS rendszerhez
2. ábra: Az IDA által adatként észlelt hátsó ajtó kód

A végrehajtás után a bináris egy szálat hoz létre hibakeresőként, amelynek egyetlen célja, hogy folyamatosan ellenőrizze a hibakereső jelenlétét. Ehhez az áramláshoz:

— Megpróbál lekapcsolni minden hibakeresőt, hív ptrace с PT_DENY_ATTACH kérési paraméterként
- Funkció meghívásával ellenőrzi, hogy néhány exkluzív port nyitva van-e task_get_exception_ports
- Ellenőrzi, hogy a hibakereső csatlakoztatva van-e, amint az az alábbi ábrán látható, a zászló meglétének ellenőrzésével P_TRACED a jelenlegi folyamatban

OceanLotus: Malware frissítés a macOS rendszerhez
3. ábra: A hibakereső kapcsolat ellenőrzése a sysctl függvény segítségével

Ha a watchdog hibakereső jelenlétét észleli, a függvény meghívásra kerül exit. Ezenkívül a minta két parancs futtatásával ellenőrzi a környezetet:

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

A minta ezután ellenőrzi a visszatérési értéket az ismert virtualizációs rendszerekből származó karakterláncok keményen kódolt listájához képest: acle, vmware, VirtualBox vagy párhuzamok. Végül a következő parancs ellenőrzi, hogy a gép az „MBP”, „MBA”, „MB”, „MM”, „IM”, „MP” és „XS” valamelyike-e. Ezek rendszermodellkódok, például az „MBP” azt jelenti, hogy MacBook Pro, az „MBA” azt jelenti, hogy MacBook Air stb.

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

Főbb kiegészítések

Bár a hátsó ajtó parancsai nem változtak a Trend Micro kutatása óta, néhány egyéb módosítást is észrevettünk. A mintában használt C&C szerverek meglehetősen újak, és 22.10.2018-én készültek.

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

Az erőforrás URL-je a következőre módosult: /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
A C&C szervernek küldött első csomag több információt tartalmaz a gazdagépről, beleértve az alábbi táblázatban szereplő parancsok által gyűjtött összes adatot.

OceanLotus: Malware frissítés a macOS rendszerhez

Ezen a konfigurációs változtatáson kívül a minta nem használ könyvtárat a hálózati szűréshez libcurl, hanem egy külső könyvtár. Ennek megtalálásához a hátsó ajtó megpróbálja visszafejteni az aktuális könyvtárban lévő összes fájlt az AES-256-CBC segítségével a kulccsal gFjMXBgyXWULmVVVzyxy, nullákkal bélelt. Minden fájl visszafejtésre kerül, és más néven menti /tmp/store, és a függvény segítségével megkíséreljük betölteni könyvtárként dlopen. Amikor a visszafejtési kísérlet sikeres hívást eredményez dlopen, a hátsó ajtó kivonatolja az exportált függvényeket Boriry и ChadylonV, amelyek nyilvánvalóan felelősek a szerverrel való hálózati kommunikációért. Nem rendelkezünk a dropper vagy más fájlokkal a minta eredeti helyéről, ezért nem tudjuk elemezni ezt a könyvtárat. Ezenkívül, mivel az összetevő titkosított, az ezeken a karakterláncokon alapuló YARA-szabályok nem egyeznek meg a lemezen található fájllal.

A fenti cikkben leírtak szerint létrehozza Ügyfélazonosító. Ez az azonosító a következő parancsok egyikének visszatérési értékének MD5-kivonata:

- 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}' (MAC-cím lekérése)
- ismeretlen csapat ("x1ex72x0a"), amelyet a korábbi mintákban használtak

A kivonatolás előtt a visszatérési értékhez "0" vagy "1" kerül hozzáadva a root jogosultság jelzésére. Ez Ügyfélazonosító ben tárolva /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ha a kód rootként vagy a ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML fájlban fut minden más esetben. A fájl általában el van rejtve a funkció használatával _chflags, az időbélyegét a paranccsal módosítjuk touch –t véletlenszerű értékkel.

Húrok dekódolása

Az előző beállításokhoz hasonlóan a karakterláncok titkosítása AES-256-CBC (hexadecimális kulcs: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 nullákkal kitöltve, IV nullákkal kitöltve) a függvényen keresztül CCCrypt. A kulcs megváltozott a korábbi verziókhoz képest, de mivel a csoport továbbra is ugyanazt a karakterlánc-titkosítási algoritmust használja, a visszafejtés automatizálható. Ezen a bejegyzésen kívül kiadunk egy IDA-szkriptet, amely a Hex-Rays API-t használja a bináris fájlban lévő karakterláncok visszafejtésére. Ez a szkript segíthet az OceanLotus jövőbeni elemzésében és a meglévő minták elemzésében, amelyeket még nem tudtunk megszerezni. A szkript egy univerzális metóduson alapul a függvénynek átadott argumentumok fogadására. Ezenkívül megkeresi a paraméter-hozzárendeléseket. A metódus újra felhasználható a függvényargumentumok listájának lekéréséhez, majd átadható a visszahívásnak.

A függvény prototípusának ismerete visszafejtése, a szkript megtalálja az összes kereszthivatkozást erre a függvényre, minden argumentumot, majd visszafejti az adatokat, és egyszerű szöveget helyez el egy megjegyzésben a kereszthivatkozási címen. Ahhoz, hogy a szkript megfelelően működjön, a base64 dekódoló függvény által használt egyéni ábécére kell állítani, és meg kell határozni egy globális változót, amely tartalmazza a kulcs hosszát (jelen esetben egy duplaszó, lásd a 4. ábrát).

OceanLotus: Malware frissítés a macOS rendszerhez
4. ábra: A key_len globális változó definíciója

A Funkció ablakban kattintson a jobb gombbal a visszafejtő funkcióra, majd kattintson az „Argumentumok kibontása és visszafejtése” elemre. A szkriptnek a visszafejtett sorokat megjegyzésekben kell elhelyeznie, ahogy az 5. ábrán látható.

OceanLotus: Malware frissítés a macOS rendszerhez
5. ábra A visszafejtett szöveg a megjegyzések közé kerül

Így a visszafejtett karakterláncok kényelmesen elhelyezhetők az IDA ablakban xrefs ehhez a funkcióhoz a 6. ábrán látható módon.

OceanLotus: Malware frissítés a macOS rendszerhez
6. ábra Xrefs to f_decrypt függvény

A végleges forgatókönyv a címen található Github tároló.

Teljesítmény

Mint már említettük, az OceanLotus folyamatosan fejleszti és frissíti eszköztárát. Ezúttal a kibercsoport úgy fejlesztette tovább a kártevőt, hogy a Mac felhasználókkal is működjön. A kód nem sokat változott, de mivel sok Mac-felhasználó figyelmen kívül hagyja a biztonsági termékeket, a rosszindulatú programok észlelése elleni védelme másodlagos fontosságú.

Az ESET-termékek már a kutatás idején észlelték ezt a fájlt. Mivel a C&C kommunikációhoz használt hálózati könyvtár ma már lemezen titkosítva van, a támadók által használt pontos hálózati protokoll még nem ismert.

A kompromisszum jelzői

A kompromisszum jelzői, valamint a MITER ATT&CK attribútumok szintén elérhetők ezen a helyen GitHub.

Forrás: will.com

Hozzászólás