OceanLotus: kártevő frissítése macOS-hez

2019 márciusában a VirusTotal, a népszerű online víruskereső szolgáltatás, új mintát töltött fel a macOS rosszindulatú szoftveréről, amely az OceanLotus kiberbűnöző csoporttól származik. A hátsó ajtó végrehajtható fájl ugyanolyan lehetőségekkel rendelkezik, mint a korábban elemzett macOS malware verzió, de a struktúrája megváltozott, így nehezebb észlelni. Sajnos nem tudtuk megtalálni a mintához kapcsolódó droppert, ezért egyelőre nem ismerjük a fertőzés útját.

Nemrégiben közzétettük a OceanLotusról szóló bejegyzést és arról, hogy az operátorok hogyan próbálják biztosítani a folyamatos jelenlétet, felgyorsítani a kód végrehajtását és minimalizálni a nyomokat a Windows rendszerekben. Azt is tudjuk, hogy ennek a kiberbűnöző csoportnak van macOS-re szánt összetevője is. Ebben a bejegyzésben részletesen bemutatjuk a legújabb macOS malware verzió változásait a korábbi változathoz képest (amelyet a Trend Micro részletezett), valamint szó esik arról, hogyan lehet automatizálni a karakterláncok dekódolását az IDA Hex-Rays API segítségével az elemzés során.

OceanLotus: kártevő frissítése macOS-hez

Elemzés

A következő három rész bemutatja a SHA-1 hashelésű minta elemzését E615632C9998E4D3E5ACD8851864ED09B02C77D2. A fájl neve flashlightd, az ESET antivírus termékek OSX/OceanLotus.D néven észlelik.

Debuggerek elleni védelem és homokozó védelem

Mint minden OceanLotus macOS bináris, ez a minta is UPX-szel van becsomagolva, de a legtöbb csomagolt azonosító eszköz nem ismeri fel ilyenként. Valószínűleg azért, mert ezek főként az „UPX” karakterlánc meglététől függő aláírást tartalmaznak, továbbá a Mach-O aláírások ritkábban fordulnak elő, és nem frissülnek olyan gyakran. Ez a jellemző megnehezíti a statikus észlelést. Érdekes, hogy a kibővített fájl belépési pontja a __cfstring szakasz elején található .TEXT. Ebben a szakaszban flag attribútumok találhatók, ahogyan az alábbi képen látható.

OceanLotus: kártevő frissítése macOS-hez
1. ábra. A MACH-O __cfstring szakasz attribútumai

Ahogyan a 2. ábrán is látható, a kódok elhelyezkedése a szakaszban __cfstring segíthet becsapni egyes disassembler eszközöket, mivel a kódot karakterláncként mutatja be.

OceanLotus: kártevő frissítése macOS-hez
2. ábra. A hátsó ajtó kódját az IDA adatként azonosítja

A bináris fájl futtatása után egy szálat hoz létre a debuggerek elleni védelme érdekében, amelynek egyetlen célja, hogy folyamatosan ellenőrizze a debuggerek jelenlétét. Ehhez a szál:

— Megpróbálja leválasztani a debuggert, amikor a ptrace a PT_DENY_ATTACH paramétert hívja
— Ellenőrzi, hogy néhány kivételes port nyitva van-e, meghívva a task_get_exception_ports
— Ellenőrzi, hogy a hibakereső csatlakoztatva van-e, ahogy az az alábbi ábrán látható, a jelző ellenőrzésével P_TRACED az aktuális folyamatban

OceanLotus: kártevő frissítése macOS-hez
3. ábra. A hibakereső csatlakozásának ellenőrzése a sysctl funkcióval

Ha a figyelő rendszer észleli a hibakereső jelenlétét, meghívja a funkciót exit. Ezenkívül a minta két parancs végrehajtásával ellenőrzi a környezetet:

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

Ezután a minta a visszatérési értéket egy hardveresen kódolt ismert virtualizációs rendszerek listájához ellenőrzi: acle, vmware, virtualbox vagy parallels. Végül a következő parancs ellenőrzi, hogy a gép az alábbi modellek egyike-e: "MBP", "MBA", "MB", "MM", "IM", "MP" és "XS". Ezek rendszermodellek, például a "MBP" a MacBook Pro-t, az "MBA" a MacBook Air-t jelenti, stb.

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

Főbb kiegészítők

Bár a hátsó parancsok nem változtak a Trend Micro kutatása óta, észrevettünk néhány más módosítást is. A mintában használt C&C szerverek viszonylag újjak, létrehozásuk dátuma: 2018.10.22.

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

Az URL forrás megváltozott /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
Az első csomag, amely a C&C szerverre kerül, több információt tartalmaz a házigépéről, beleértve az alábbi táblázatból gyűjtött adatokat is.

OceanLotus: kártevő frissítése macOS-hez

Ezen kívül a konfigurációs változtatások mellett a minta nem a libcurl, hanem egy külső könyvtárat használ a hálózati szűréshez. Azonosításához a hátsó program megpróbálja visszafejteni az aktuális mappában lévő fájlokat az AES-256-CBC-al, a kulccsal, gFjMXBgyXWULmVVVzyxy, amelyet nullákkal egészítenek ki. Minden fájl visszafejtésre kerül és /tmp/store, a betöltési kísérlet könyvtárként történik a dlopenfunkció által. Amikor a visszafejtési kísérlet sikeres meghívást eredményez, dlopen, a hátsó program a kiexportált funkciókat bármilyen nevű elemként kinyeri. Boriry és ChadylonV, amelyek úgy tűnik, hogy a szerverrel való hálózati interakcióért felelnek. Nincs dropper vagy más fájlunk a minta eredeti helyéről, így nem tudjuk elemezni ezt a könyvtárat. Továbbá, mivel az összetevő titkosítva van, a fenti sorok alapján készült YARA-szabály nem fog illeszkedni a lemezen található fájlhoz.

Ahogy a fent említett cikkben leírták, létrejön a cliendIDEz az azonosító az MD5 hashe a visszatérési értéke egyik következő parancsnak:

— 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ímet kapni)
— ismeretlen parancs («x1ex72x0a«), amely a korábbi példákban szerepel

A hashelés előtt a visszatérési értékhez hozzáadódik az „0” vagy „1” karakter, amely a root jogosultságok meglétét jelzi. Ez a clientID tárolva van /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex, ha a kód root felhasználóként fut, vagy a ~\/Library\/SmartCardsServices\/Technology\/PlugIns\/drivers\/snippets.ecgML fájlban minden más esetben. A fájl általában rejtve van a _chflagsparancs használatával, időbélyegét pedig a touch –t véletlenszerű értékkel módosítják.

A karakterláncok dekódolása

A korábbi verziókhoz hasonlóan a szövegek AES-256-CBC használatával vannak titkosítva (hexadecimális kulcs: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 nullákkal kiegészítve, az IV pedig nullákkal van kitöltve) a CCCryptfüggvény segítségével. A kulcs megváltozott a korábbi verziókhoz képest, de mivel a csoport még mindig ugyanazt a titkosítási algoritmust használja a szövegekhez, a visszafejtés automatizálható. Ezen poszt mellett kiadunk egy IDA szkriptet, amely a Hex-Rays API-t használja a bináris fájlban található szövegek visszafejtésére. Ez a szkript segíthet a jövőbeni OceanLotus elemzéseknél és a meglévő példák elemzésénél, amelyeket eddig nem tudtunk megszerezni. A szkript alapja egy univerzális módszer az átadott argumentumok megszerzésére. Továbbá keres a paraméterek elhelyezése után. A módszer újrahasználható az argumentumok listájának megszerzésére a függvényhez, majd átadható egy callback-nek.

A függvény prototípusának ismeretében a decryptszkript megtalálja az összes kereszthivatkozást erre a függvényre, az összes argumentumot, majd visszafejti az adatokat és az egyszerű szöveget elhelyezi a kereszthivatkozás címkéjével ellátott megjegyzésben. Ahhoz, hogy a szkript helyesen működjön, szükség van egy egyedi ábécére, amelyet a base64 dekódoló függvény használ, és meghatározott globális változóra, amely a kulcs hosszát tartalmazza (ebben az esetben DWORD, lásd a 4. ábrát).

OceanLotus: kártevő frissítése macOS-hez
4. ábra. A globális kulcs_hossz változó meghatározása

A Function window allows you to right-click the decryption function and click 'Extract and Decrypt Arguments'. The script should place the decrypted strings in comments, as shown in Figure 5.

OceanLotus: kártevő frissítése macOS-hez
Figure 5. Decrypted text is placed in comments

Thus, the decrypted strings are conveniently located together in the IDA window xrefs for this function, as shown in Figure 6.

OceanLotus: kártevő frissítése macOS-hez
Figure 6. Xrefs to function f_decrypt

The final version of the script can be found at Github repository.

Következtetés

As already mentioned, OceanLotus continuously improves and updates its toolkit. This time, the cyber group has enhanced the malware to work with Mac users. The code has not changed significantly, but since many Mac users ignore security products, malware detection evasion has become a secondary concern.

ESET products have already detected this file at the time of research. Since the network library used for C&C communication is now encrypted on disk, the exact network protocol used by the attackers is still unknown.

Kompromittálódási mutatók

Indicators of compromise, as well as MITRE ATT&CK attributes, are also available at GitHub.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster