Ebben a bejegyzésben elmeséljük, hogy az OceanLotus kibercsoport (APT32 és APT-C-00) miként használta a közelmúltban az egyik nyilvánosan elérhető kizsákmányolást
Az OceanLotus a kiberkémkedésre specializálódott, kiemelt célpontjai a délkelet-ázsiai országok. A támadók olyan dokumentumokat hamisítanak, amelyek felkeltik a potenciális áldozatok figyelmét, hogy meggyőzzék őket a hátsó ajtó végrehajtásáról, és eszközök fejlesztésén is dolgoznak. A honeypotok létrehozására használt módszerek támadásonként eltérőek, a „kettős kiterjesztésű” fájloktól, az önkicsomagoló archívumokon, a makrókat tartalmazó dokumentumokon át az ismert kihasználásokig.
Exploit használata a Microsoft Egyenletszerkesztőben
2018 közepén az OceanLotus kampányt folytatott a CVE-2017-11882 biztonsági rést kihasználva. A kibercsoport egyik rosszindulatú dokumentumát a 360 Threat Intelligence Center szakemberei elemezték (
Az első szakasz
A dokumentum FW Report on demonstration of former CNRP in Republic of Korea.doc
(SHA-1: D1357B284C951470066AAA7A8228190B88A5C7C3
) hasonló a fenti tanulmányban említetthez. Érdekes, mert a kambodzsai politika (CNRP – Cambodia National Rescue Party, 2017 végén feloszlatott) iránt érdeklődő felhasználókat célozza meg. A .doc kiterjesztés ellenére a dokumentum RTF formátumú (lásd az alábbi képet), szemétkódot tartalmaz, és torz is.
1. ábra "Garbage" az RTF-ben
Annak ellenére, hogy vannak elrontott elemek, a Word sikeresen megnyitja ezt az RTF-fájlt. Amint a 2. ábrán látható, van egy EQNOLEFILEHDR struktúra 0xC00 eltolásnál, ezt követi egy MTEF fejléc, majd egy MTEF bejegyzés (3. ábra) a betűtípushoz.
2. ábra FONT beviteli értékek
Ábra 3.
Lehetséges túlcsordulás a terepen név, mert a méretét másolás előtt nem ellenőrzik. A túl hosszú név sebezhetőséget vált ki. Amint az RTF fájl tartalmából is látható (a 0. ábrán 26xC2 eltolás), a puffer meg van töltve shellkóddal, majd egy dummy paranccsal (0x90
) és a visszaküldési címet 0x402114
. A cím egy párbeszédpanel elem EQNEDT32.exe
, utasításokat jelezve RET
. Ez azt eredményezi, hogy az EIP a mező elejére mutat névtartalmazza a shellkódot.
4. ábra: Az exploit shellkód kezdete
cím 0x45BD3C
tárol egy változót, amelyre hivatkozik, amíg el nem éri az aktuálisan betöltött struktúrára mutató mutatót MTEFData
. A shellkód többi része itt található.
A shellcode célja a nyitott dokumentumba ágyazott shellkód második darabjának végrehajtása. Az eredeti shellkód először megpróbálja megtalálni a megnyitott dokumentum fájlleíróját az összes rendszerleíró iterációjával (NtQuerySystemInformation
érvvel SystemExtendedHandleInformation
), és ellenőrizze, hogy egyeznek-e PID leíró és PID folyamat WinWord
és hogy a dokumentumot hozzáférési maszkkal nyitották-e meg - 0x12019F
.
Annak ellenőrzésére, hogy a megfelelő kezelő található-e (és nem egy másik megnyitott dokumentum leírója), a fájl tartalma a függvény segítségével jelenik meg. CreateFileMapping
, és a shellkód ellenőrzi, hogy a dokumentum utolsó négy bájtja egyezik-eyyyy
"(Tojásvadászat módszere). Ha talál egyezést, a dokumentum egy ideiglenes mappába másolódik (GetTempPath
) hogyan ole.dll
. Ezután a dokumentum utolsó 12 bájtja kerül beolvasásra.
5. ábra: Dokumentumjelzők vége
32 bites érték a markerek között AABBCCDD
и yyyy
a következő shellkód eltolása. A függvény használatával hívják CreateThread
. Ugyanazt a shellkódot bontotta ki, amelyet korábban az OceanLotus csoport használt.
A második szakasz
Alkatrészek eltávolítása
A fájl- és könyvtárnevek kiválasztása dinamikusan történik. A kód véletlenszerűen kiválasztja a végrehajtható vagy a DLL fájl nevét C:Windowssystem32
. Ezután kérést intéz az erőforrásaihoz, és lekéri a mezőt FileDescription
mappanévként való használathoz. Ha ez nem működik, a kód véletlenszerűen kiválaszt egy mappanevet a könyvtárakból %ProgramFiles%
vagy C:Windows
(a GetWindowsDirectoryW-ből). Elkerüli a meglévő fájlokkal ütköző név használatát, és biztosítja, hogy ne tartalmazza a következő szavakat: windows
, Microsoft
, desktop
, system
, system32
vagy syswow64
. Ha a könyvtár már létezik, akkor a névhez "NLS_{6 karakter}" lesz hozzáfűzve.
forrás 0x102
elemzi, és a fájlokat kiírja %ProgramFiles%
vagy %AppData%
, egy véletlenszerűen kiválasztott mappába. A létrehozási idő megváltozott, hogy ugyanazok az értékek legyenek, mint kernel32.dll
.
Például itt van a végrehajtható fájl kiválasztásával létrehozott fájlok mappája és listája C:Windowssystem32TCPSVCS.exe
adatforrásként.
6. ábra Különféle komponensek kinyerése
Erőforrás szerkezet 0x102
egy cseppentőben meglehetősen összetett. Dióhéjban a következőket tartalmazza:
— Fájlnevek
— Fájl mérete és tartalma
– Tömörítési formátum (COMPRESSION_FORMAT_LZNT1
, a függvény által használt RtlDecompressBuffer
)
Az első fájl visszaállításra kerül mint TCPSVCS.exe
, ami jogos AcroTranscoder.exe
(alapján FileDescription
, SHA-1: 2896738693A8F36CC7AD83EF1FA46F82F32BE5A3
).
Talán észrevette, hogy egyes DLL-fájlok 11 MB-nál nagyobbak. Ennek az az oka, hogy a futtatható fájlban egy nagy, összefüggő véletlenszerű adatok puffere található. Lehetséges, hogy ezzel elkerülhető bizonyos biztonsági termékek észlelése.
A kitartás biztosítása
forrás 0x101
a dropperben két 32 bites egész számot tartalmaz, amelyek meghatározzák, hogyan kell biztosítani a perzisztenciát. Az első értéke azt határozza meg, hogy a kártevő hogyan marad fenn rendszergazdai jogok nélkül.
1. táblázat: Perzisztencia mechanizmus rendszergazdai jogok nélkül
A második egész szám azt határozza meg, hogy a rosszindulatú program hogyan érje el a tartósságot rendszergazdai jogokkal való futás közben.
2. táblázat: Perzisztencia mechanizmus rendszergazdai jogokkal
A szolgáltatásnév a fájlnév kiterjesztés nélkül; a megjelenített név a mappa neve, de ha már létezik, akkor a „ karakterlánc hozzá van fűzveRevision 1
” (a szám addig növekszik, amíg egy nem használt nevet talál). Az üzemeltetők gondoskodtak arról, hogy a szolgáltatáson keresztüli kitartás robusztus legyen - hiba esetén a szolgáltatást 1 másodperc múlva újra kell indítani. Aztán az érték WOW64
Az új szolgáltatás rendszerleíró kulcsa 4-re van állítva, ami azt jelzi, hogy 32 bites szolgáltatásról van szó.
Egy ütemezett feladat több COM interfészen keresztül jön létre: ITaskScheduler
, ITask
, ITaskTrigger
, IPersistFile
и ITaskScheduler
. A rosszindulatú program lényegében egy rejtett feladatot hoz létre, beállítja a fiókinformációkat az aktuális felhasználói vagy rendszergazdai adatokkal együtt, majd beállítja a triggert.
Ez egy napi feladat, 24 órás időtartammal és két végrehajtás között 10 perces időközökkel, ami azt jelenti, hogy folyamatosan fut.
Rosszindulatú darab
Példánkban a végrehajtható fájl TCPSVCS.exe
(AcroTranscoder.exe
) egy legitim szoftver, amely betölti a vele együtt visszaállított DLL-eket. Ebben az esetben ez érdekes Flash Video Extension.dll
.
A funkciója DLLMain
csak egy másik függvényt hív meg. Néhány fuzzy predikátum jelen van:
7. ábra Fuzzy predikátumok
A félrevezető ellenőrzések után a kód egy szakaszt kap .text
fájlt TCPSVCS.exe
, megváltoztatja a védekezését PAGE_EXECUTE_READWRITE
és álutasítások hozzáadásával átírja:
8. ábra Az utasítások sorrendje
A végén a függvény címére FLVCore::Uninitialize(void)
, exportált Flash Video Extension.dll
, utasítást adunk hozzá CALL
. Ez azt jelenti, hogy a rosszindulatú DLL betöltése után, amikor a futtatókörnyezet hív WinMain
в TCPSVCS.exe
, az utasításmutató a NOP-ra mutat, ami okozza FLVCore::Uninitialize(void)
, következő szint.
A függvény egyszerűen létrehoz egy mutexet, amely a következővel kezdődik {181C8480-A975-411C-AB0A-630DB8B0A221}
utána az aktuális felhasználónév. Ezután beolvassa a kiírt *.db3 fájlt, amely pozíciófüggetlen kódot tartalmaz, és használja CreateThread
a tartalom végrehajtásához.
A *.db3 fájl tartalma az OceanLotus csoport által általában használt shellkód. Az általunk közzétett emulátor szkript segítségével ismét sikeresen kicsomagoltuk a rakományt
A szkript kibontja az utolsó szakaszt. Ez a komponens egy hátsó ajtó, amelyet már elemeztünk {A96B020F-0000-466F-A96D-A91BBF8EAC96}
bináris fájl. A rosszindulatú program konfigurációja továbbra is titkosítva van a PE-erőforrásban. Megközelítőleg azonos konfigurációval rendelkezik, de a C&C szerverek eltérnek az előzőektől:
- andreagahuvrauvin[.]com
- byronorenstein[.]com
- stienollmache[.]xyz
Az OceanLotus csapata ismét különböző technikák kombinációját mutatja be az észlelés elkerülése érdekében. A fertőzési folyamat „finomított” diagramjával tértek vissza. A véletlenszerű nevek kiválasztásával és a végrehajtható fájlok véletlenszerű adatokkal való kitöltésével csökkentik a megbízható IoC-k számát (hash-ek és fájlnevek alapján). Ezenkívül a harmadik féltől származó DLL-betöltésnek köszönhetően a támadóknak csak a legitim bináris fájlt kell eltávolítaniuk. AcroTranscoder
.
Önkicsomagoló archívumok
Az RTF-fájlok után a csoport az önkicsomagoló (SFX) archívumokhoz költözött, közös dokumentumikonokkal, hogy tovább zavarják a felhasználót. A Threatbook írt erről ({A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
. 2019. január közepe óta az OceanLotus újrahasznosítja ezt a technikát, de idővel módosított bizonyos konfigurációkon. Ebben a részben a technikáról és a változtatásokról lesz szó.
Csali létrehozása
A dokumentum THICH-THONG-LAC-HANH-THAP-THIEN-VIET-NAM (1).EXE
(SHA-1: AC10F5B1D5ECAB22B7B418D6E98FA18E32BBDEAB
) először 2018-ban találták meg. Ez az SFX fájl bölcsen jött létre - a leírásban (Verzió információ) azt írja, hogy ez egy JPEG kép. Az SFX szkript így néz ki:
9. ábra: SFX parancsok
A rosszindulatú program visszaáll {9ec60ada-a200-4159-b310-8071892ed0c3}.ocx
(SHA-1: EFAC23B0E6395B1178BCF7086F72344B24C04DCC
), valamint egy képet 2018 thich thong lac.jpg.
A csali kép így néz ki:
10. ábra Csalikép
Talán észrevette, hogy az SFX szkript első két sora kétszer hívja meg az OCX fájlt, de ez nem hiba.
{9ec60ada-a200-4159-b310-8071892ed0c3}.ocx (ShLd.dll)
Az OCX-fájlok vezérlési folyamata nagyon hasonló a többi OceanLotus-összetevőhöz – sok parancssorozat JZ/JNZ
и PUSH/RET
, váltakozva a szemétkóddal.
11. ábra: Obfuszkált kód
A kéretlen kód kiszűrése után exportálja DllRegisterServer
, hívott regsvr32.exe
, alábbiak szerint:
12. ábra: Alapvető telepítői kód
Lényegében az első híváskor DllRegisterServer
az export beállítási értéket állít be HKCUSOFTWAREClassesCLSID{E08A0F4B-1F65-4D4D-9A09-BD4625B9C5A1}Model
titkosított eltoláshoz a DLL-ben (0x10001DE0
).
A függvény másodszori meghívásakor ugyanazt az értéket olvassa be, és azon a címen fut le. Innentől a RAM-ban lévő erőforrás és számos művelet beolvasásra és végrehajtásra kerül.
A shellkód ugyanaz a PE betöltő, amelyet a korábbi OceanLotus kampányokban használtak. segítségével emulálható db293b825dcc419ba7dc2c49fa2757ee.dll
, betölti a memóriába és végrehajtja DllEntry
.
A DLL kibontja az erőforrás tartalmát, visszafejti (AES-256-CBC) és kicsomagolja (LZMA). Az erőforrásnak van egy speciális formátuma, amely könnyen visszafordítható.
13. ábra: Telepítő konfigurációs szerkezete (KaitaiStruct Visualizer)
A konfiguráció kifejezetten meg van adva - a jogosultsági szinttől függően a rendszer a bináris adatokat írja %appdata%IntellogsBackgroundUploadTask.cpl
vagy %windir%System32BackgroundUploadTask.cpl
(vagy SysWOW64
64 bites rendszerekhez).
A további kitartást a névvel ellátott feladat létrehozása biztosítja BackgroundUploadTask[junk].job
Ahol [junk]
bájtok halmazát jelöli 0x9D
и 0xA0
.
Feladat Alkalmazás neve %windir%System32control.exe
, és a paraméter értéke a letöltött bináris fájl elérési útja. A rejtett feladat minden nap fut.
Szerkezetileg a CPL fájl egy belső névvel rendelkező DLL ac8e06de0a6c4483af9837d96504127e.dll
, amely egy függvényt exportál CPlApplet
. Ez a fájl dekódolja az egyetlen erőforrást {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
, majd betölti ezt a DLL-t, és meghívja az egyetlen exportálást DllEntry
.
Backdoor konfigurációs fájl
A hátsó ajtó konfigurációja titkosítva van, és be van ágyazva az erőforrásaiba. A konfigurációs fájl szerkezete nagyon hasonló az előzőhöz.
14. ábra: A hátsó ajtó konfigurációs struktúrája (KaitaiStruct Visualizer)
Bár a szerkezet hasonló, sok mezőértéket frissítettünk a képen látható értékekhez képest
A bináris tömb első eleme egy DLL-t (HttpProv.dll
MD5: 2559738D1BD4A999126F900C7357B759
),
További kutatások
A mintagyűjtés során észrevettünk néhány jellemzőt. Az imént leírt példány 2018 júliusa körül jelent meg, a többi hasonló pedig 2019. január közepétől február elejéig. Az SFX archívumot fertőzési vektorként használták, és eldobtak egy legitim csalidokumentumot és egy rosszindulatú OSX-fájlt.
Annak ellenére, hogy az OceanLotus hamis időbélyegeket használ, észrevettük, hogy az SFX és OCX fájlok időbélyegei mindig ugyanazok (0x57B0C36A
(08. 14. 2016. 7:15 UTC) és 0x498BE80F
(02. 06. 2009. 7:34 UTC). Ez valószínűleg azt jelzi, hogy a szerzőknek van valamilyen „designerje”, amely ugyanazokat a sablonokat használja, és egyszerűen megváltoztat néhány jellemzőt.
Az általunk 2018 eleje óta tanulmányozott dokumentumok között különböző nevek találhatók, amelyek jelzik a támadók érdeklődésére számot tartó országokat:
— A Cambodia Media(New).xls.exe új elérhetőségei
— 李建香 (个人简历).exe (egy önéletrajz hamis pdf-dokumentuma)
— visszajelzés, rally az USA-ban 28. július 29-2018.exe
Mióta felfedezték a hátsó ajtót {A96B020F-0000-466F-A96D-A91BBF8EAC96}.dll
és elemzésének több kutató általi publikálása után némi változást figyeltünk meg a malware konfigurációs adatokban.
Először a szerzők elkezdték eltávolítani a neveket a segítő DLL-ekből (DNSprov.dll
és két változat HttpProv.dll
). Az üzemeltetők ezután leállították a harmadik DLL (a második verzió) csomagolását HttpProv.dll
), csak egy beágyazását választja.
Másodszor, sok hátsó ajtó konfigurációs mezőt megváltoztattak, valószínűleg elkerülve az észlelést, mivel sok IoC vált elérhetővé. A szerzők által módosított fontos mezők a következők:
- Az AppX rendszerleíró kulcs megváltozott (lásd az IoC-ket)
- mutex kódoló karakterlánc ("def", "abc", "ghi")
- portszám
Végül, minden elemzett új verzió új C&C-t tartalmaz a IoC-k szakaszban.
Álláspontja
Az OceanLotus tovább fejlődik. A kibercsoport az eszközök és csalétek finomítására és bővítésére összpontosít. A szerzők a rosszindulatú rakományokat olyan figyelemfelkeltő dokumentumok segítségével leplezik le, amelyek témája releváns a szándékolt áldozatok számára. Új sémákat fejlesztenek ki, és nyilvánosan elérhető eszközöket is használnak, mint például az Egyenletszerkesztő exploit. Ezen túlmenően olyan eszközöket fejlesztenek, amelyek csökkentik az áldozatok gépein maradó műtermékek számát, ezáltal csökkentve a víruskereső szoftver általi észlelés esélyét.
A kompromisszum jelzői
A kompromisszum indikátorai, valamint a MITER ATT&CK attribútumok elérhetők
Forrás: will.com