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
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.
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.
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
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.
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 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
, 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 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
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).
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ó.
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.
6. ábra Xrefs to f_decrypt függvény
A végleges forgatókönyv a címen található
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
Forrás: will.com