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 é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 (), 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.

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ó.

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.

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

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.

Ezen kívül a konfigurációs változtatások mellett a minta nem a , 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 funkció á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 parancs 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 fü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).

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.

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.

Figure 6. Xrefs to function f_decrypt
The final version of the script can be found at .
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 .
Forrás: habr.com
