A process hollowing egy kifinomult technika, amelyet kártékony kódok futtatására használnak. Lényege, hogy egy legitim folyamat tartalmát kicserélik egy rosszindulatú kóddal, így a kártevő a megbízható folyamat nevében fut. Ez a módszer azért hatékony, mert megnehezíti a vírusirtó szoftverek és más biztonsági eszközök számára a kártevő azonosítását és eltávolítását.
A támadó először elindít egy új folyamatot felfüggesztett állapotban. Ezután a memóriatérképét felülírja a saját, rosszindulatú kódjával. Végül a folyamatot újraindítja, így a kártevő a legitim folyamat kontextusában hajtódik végre.
A process hollowing kihasználja az operációs rendszerek működését, amelyek lehetővé teszik a folyamatok létrehozását és memóriájának manipulálását. A technika különösen veszélyes, mert a kártékony kód álcázva van egy megbízható alkalmazás mögött, ami megnehezíti a detektálást. A felfüggesztett állapot kulcsfontosságú a folyamat átvételéhez, mivel megakadályozza az eredeti kód futását a felülírás előtt.
A process hollowing célja, hogy a kártevő tevékenységét egy megbízható folyamathoz kösse, elkerülve a gyanút és a detektálást.
Számos kártevőcsalád alkalmazza ezt a technikát, beleértve a trójai programokat, zsarolóvírusokat és kémprogramokat. A védekezés érdekében fontos a naprakész vírusirtó szoftver használata, a gyanús fájlok futtatásának kerülése és az operációs rendszer biztonsági frissítéseinek telepítése. A process hollowing elleni védekezés összetett feladat, amely többrétegű biztonsági megközelítést igényel.
A Process Hollowing története és evolúciója
A Process Hollowing, mint kártékony technika, nem egy hirtelen ötlet eredménye, hanem a Windows operációs rendszer architektúrájának kihasználásából ered. Eredetileg nem rosszindulatú célokra tervezték, de a támadók hamar felismerték a benne rejlő lehetőségeket.
A technika alapja az, hogy egy futó processzust felülírnak egy másik, rosszindulatú kóddal. A korai verziók egyszerűbb felülírási módszereket alkalmaztak, amelyek viszonylag könnyen detektálhatóak voltak. A támadók azonban folyamatosan finomították a módszereiket, hogy elkerüljék a vírusirtók és más biztonsági megoldások észlelését.
Az evolúció során a Process Hollowing egyre kifinomultabbá vált. A támadók elkezdték alkalmazni a kód obfuscation és encryption technikákat, hogy elrejtsék a rosszindulatú kódot a memóriában. Emellett a Dynamic-link library (DLL) injection is egyre gyakoribbá vált a Process Hollowing részeként, ami lehetővé tette a támadóknak, hogy külső kódot futtassanak a felülírt processzusban.
A Process Hollowing evolúciója szorosan összefügg a vírusirtók és a támadók közötti macska-egér játékkal. Ahogy a védelem egyre hatékonyabbá vált, a támadók is egyre kifinomultabb módszereket fejlesztettek ki.
A modern Process Hollowing technikák már a kernel szintű manipulációkat is magukban foglalhatják, ami még nehezebbé teszi a detektálást. A támadók például módosíthatják a Windows kernel memóriakezelési mechanizmusait, hogy elrejtsék a rosszindulatú kódot.
A különböző variánsok között megkülönböztethetünk például:
- Classic Process Hollowing: Az eredeti technika, ahol egy legitimenek tűnő processzus tartalmát felülírják.
- Reflective DLL Injection alapú Process Hollowing: Egy DLL-t injektálnak egy processzusba, amely a hollowing folyamatot végzi.
- Transacted Hollowing: A memóriaműveletek tranzakciókba vannak foglalva, ami lehetővé teszi az eredeti processzus visszaállítását hiba esetén.
A folyamatos evolúció miatt a Process Hollowing továbbra is egy komoly fenyegetést jelent a számítógépes biztonságra. A védekezéshez elengedhetetlen a folyamatosan frissített vírusirtó szoftverek, a viselkedéselemzésen alapuló detektálási módszerek, és a felhasználók tudatosságának növelése.
A Process Hollowing technikai alapjai: Alacsonyszintű folyamatok működése
A Process Hollowing egy olyan technika, amelyet a kártékony kódok arra használnak, hogy elrejtőzzenek és futtassák magukat egy legitim folyamat kontextusában. A cél az, hogy elkerüljék a biztonsági szoftverek és a felhasználók figyelmét, mert a futó kód egy megbízhatónak tűnő alkalmazás nevében fut. A technika alacsonyszintű folyamatkezelési műveleteken alapul.
A folyamat lényegében a következő lépésekből áll:
- Indítás felfüggesztett állapotban: Először egy legitim folyamatot indítanak el, de fontos, hogy ezt felfüggesztett állapotban tegyék. Ez azt jelenti, hogy a folyamat memóriája inicializálódik, de a kód végrehajtása nem kezdődik meg.
- Memória felszabadítása: A felfüggesztett folyamat memóriájában lévő kódot (azaz az eredeti, legitim alkalmazás kódját) fel kell szabadítani. Ezt a
VirtualAllocEx
ésNtUnmapViewOfSection
API hívásokkal lehet megtenni. Gyakorlatilag a legitim alkalmazás memóriaterületét üressé teszik. - Kártékony kód írása: A felszabadított memóriaterületre a kártékony kód kerül beírásra. Ez a
WriteProcessMemory
API használatával történik. A támadó alapvetően a legitim folyamat memóriájába „cseréli” a kártékony kódot. - Belépési pont átírása: A folyamat belépési pontját (azaz azt a memóriacímet, ahol a kód végrehajtása elkezdődik) át kell írni úgy, hogy az a kártékony kódra mutasson. Ez a
SetThreadContext
API hívással érhető el. - Folyamat folytatása: Végül a felfüggesztett folyamatot folytatják a
ResumeThread
API-val. Mivel a belépési pont már a kártékony kódra mutat, a folyamat a kártékony kódot fogja végrehajtani a legitim alkalmazás nevében.
A Process Hollowing technikát gyakran használják más technikákkal kombinálva, például a kód befecskendezésével (code injection) vagy a dinamikus link könyvtárak (DLL) manipulálásával.
A technika hatékonysága abban rejlik, hogy a kártékony kód egy legitim folyamat kontextusában fut, ami megnehezíti a biztonsági szoftverek számára a detektálást. A biztonsági szoftverek gyakran a folyamatok viselkedését figyelik, és ha egy legitim folyamat hirtelen gyanús tevékenységet végez, az felkeltheti a gyanút. Azonban a Process Hollowing esetén a kártékony kód már egy megbízható folyamat nevében fut, ami megnehezíti a viselkedés alapú detektálást.
A Process Hollowing lényege, hogy egy legitim folyamatot „kicserélnek” egy kártékony folyamatra anélkül, hogy a folyamat nevét vagy PID-jét (Process ID) megváltoztatnák. Ezáltal a kártékony tevékenység egy megbízható folyamat álcája mögött rejtőzik.
A védekezés a Process Hollowing ellen többrétegű megközelítést igényel. Ide tartozik a viselkedésalapú detektálás, a memória integritásának ellenőrzése és a folyamatok közötti kommunikáció figyelése. A folyamatok integritásának ellenőrzése, azaz annak vizsgálata, hogy a futó kód megegyezik-e azzal, amit a lemezről betöltöttek, kulcsfontosságú a technikák felismerésében.
A folyamat létrehozásának és indításának folyamata a Windows alatt

A Windows operációs rendszerben egy új folyamat létrehozása és elindítása több lépésből áll, melyek kulcsfontosságúak a process hollowing támadások szempontjából. A támadó ugyanis kihasználja ezeket a lépéseket, hogy a saját kártékony kódját egy legitim folyamat memóriájába injektálja.
Az első lépés a folyamat létrehozása. Ezt a CreateProcess
API hívással lehet megvalósítani. Ekkor a rendszer létrehoz egy új folyamatot a megadott futtatható fájl alapján. Ez a folyamat azonban még nem futtat semmilyen kódot, csupán a memóriában foglal helyet.
A process hollowing lényege, hogy a támadó leállítja a legitim folyamat eredeti kódjának futtatását, és a saját kódját futtatja helyette.
A következő lépés a folyamat memóriájának kezelése. A VirtualAllocEx
és WriteProcessMemory
API hívásokkal a támadó képes felülírni a legitim folyamat memóriájában tárolt kódot a saját kártékony kódjával. Ehhez először lefoglal egy memóriaterületet, majd ebbe a területbe bemásolja a kártékony kódot.
Ezután a támadónak módosítania kell a folyamat belépési pontját. A belépési pont az a memóriacím, ahol a folyamat végrehajtása elkezdődik. A támadó a SetThreadContext
API hívással átállítja a belépési pontot a saját kártékony kódjának címére. Így amikor a folyamat futni kezd, a kártékony kód fog elindulni.
Végül a támadó elindítja a folyamatot a ResumeThread
API hívással. Ekkor a Windows elkezdi végrehajtani a folyamat kódját a megadott belépési ponttól. Mivel a támadó átállította a belépési pontot a saját kártékony kódjának címére, a kártékony kód fog futni a legitim folyamat memóriájában.
A process hollowing sikere azon múlik, hogy a támadó képes-e észrevétlenül végrehajtani ezeket a lépéseket, mielőtt a legitim folyamat elkezdené a saját kódjának futtatását. A védekezés kulcsa a folyamatok viselkedésének monitorozása és az anomáliák észlelése.
A CreateProcess API szerepe a folyamatok létrehozásában
A CreateProcess API kulcsszerepet játszik a process hollowing technikában, mivel ez a függvény felelős új folyamatok létrehozásáért a Windows operációs rendszerben. A process hollowing lényege, hogy egy létező, legitim folyamatot használnak fel a kártékony kód futtatására, elkerülve ezzel a biztonsági mechanizmusokat.
A támadás során a CreateProcess API-t arra használják, hogy felfüggesztett állapotban (CREATE_SUSPENDED
flag) elindítsanak egy új folyamatot, tipikusan egy legitim alkalmazást. Ez azt jelenti, hogy a folyamat létrehozódik, de a fő szál végrehajtása nem kezdődik meg azonnal. Ez a felfüggesztett állapot kritikus a process hollowing szempontjából, mivel időt ad a támadónak arra, hogy beavatkozzon a folyamat memóriájába.
A CreateProcess API által létrehozott folyamat kezdeti memóriaterülete (a `.text` szegmens) ezután felülíródik a kártékony kóddal.
A kártékony kód injektálása után a támadó a ResumeThread API segítségével elindítja a felfüggesztett folyamat fő szálát. Ekkor a folyamat a kártékony kódot kezdi el futtatni, mintha az a legitim alkalmazás része lenne.
A CreateProcess API használatának egyik előnye a támadók számára, hogy a létrehozott folyamat örökli a legitim alkalmazás jellemzőit, például a digitális aláírást és a jogosultságokat. Ez megnehezíti a kártékony tevékenység észlelését a biztonsági szoftverek számára.
Röviden, a CreateProcess API lehetővé teszi a támadó számára, hogy egy legitim folyamatot „üresen” hozzon létre, majd feltöltse a saját kártékony kódjával, elrejtve azt a gyanútlan felhasználó és a biztonsági rendszerek elől.
A PROCESS_CREATE_SUSPENDED flag jelentősége a Process Hollowingban
A Process Hollowing során a PROCESS_CREATE_SUSPENDED
flag kulcsfontosságú szerepet játszik. Ez a flag a CreateProcess
függvény paramétere, és azt eredményezi, hogy az új processz felfüggesztett állapotban jön létre.
Enélkül a flag nélkül a célprocessz azonnal elkezdene futni, ami meghiúsítaná a kártékony kód bejuttatásának kísérletét. A felfüggesztés lehetővé teszi a támadó számára, hogy módosítsa a processz memóriáját, mielőtt az bármilyen kódot végrehajtana.
A
PROCESS_CREATE_SUSPENDED
flag biztosítja az időt, amire a támadónak szüksége van a legitim processz lecserélésére a saját kártékony kódjával.
A támadó először a GetThreadContext
függvény segítségével lekéri a processz főszálának kontextusát. Ez tartalmazza a processzor regisztereinek állapotát, beleértve a program számlálót (EIP/RIP), ami a következő végrehajtandó utasításra mutat. Ezután a támadó feloldja a processz memóriáját a VirtualAllocEx
és WriteProcessMemory
függvényekkel, hogy a kártékony kód elférjen.
Miután a kártékony kód bekerült a memóriába, a támadó a WriteProcessMemory
-val átírja a processz belépési pontját (a program számlálót) az új, kártékony kód címére. Végül a SetThreadContext
-el beállítja az új kontextust, és a ResumeThread
-el elindítja a processzt. Ekkor a processz a kártékony kódot fogja futtatni, a legitim kód helyett.
A VirtualAllocEx és WriteProcessMemory API-k használata a kód injektálásához
A process hollowing során a VirtualAllocEx és WriteProcessMemory API-k kulcsszerepet játszanak a kártékony kód injektálásában a kiszemelt folyamatba. Ezek az API-k teszik lehetővé a támadó számára, hogy a folyamat memóriájában területet foglaljon és oda adatokat írjon, ami a kártékony kód futtatásának alapja.
Először a támadó a VirtualAllocEx függvényt használja. Ennek a függvénynek a segítségével egy új memóriaterületet foglal le a célfolyamatban. A függvény paraméterei között szerepel a folyamat handle-je, a kívánt memóriaterület címe (általában NULL, hogy a rendszer válassza ki), a lefoglalandó méret, a foglalás típusa (MEM_COMMIT, MEM_RESERVE) és a védelem (pl. PAGE_EXECUTE_READWRITE). A PAGE_EXECUTE_READWRITE védelem engedélyezi a kód futtatását, olvasását és írását a lefoglalt területen, ami elengedhetetlen a kártékony kód végrehajtásához.
A VirtualAllocEx lehetővé teszi, hogy a támadó egy teljesen új, az eredetihez képest üres és futtatható memóriaterületet hozzon létre a célfolyamatban.
Miután a memóriaterület lefoglalásra került, a WriteProcessMemory API lép a színre. Ezzel a függvénnyel a támadó a saját memóriájából adatokat másol át a célfolyamat újonnan lefoglalt területére. A másolandó adatok általában a kártékony kód bináris formája. A függvény paraméterei között szerepel a célfolyamat handle-je, a célmemória címe (a VirtualAllocEx által visszaadott cím), a másolandó adatok címe és a másolandó adatok mérete.
A WriteProcessMemory segítségével a támadó gyakorlatilag felülírja a célfolyamat memóriáját a saját kódjával. Ez a lépés kritikus, mert ezáltal kerül a kártékony kód a célfolyamatba.
Fontos megjegyezni, hogy a sikeres kódinjektálás után a támadónak gondoskodnia kell arról, hogy a vezérlés átkerüljön az újonnan injektált kódra. Ezt többféleképpen meg lehet oldani, például a SetThreadContext API használatával, ami módosítja a célfolyamat szálának regisztereit, beleértve a programszámlálót (EIP/RIP), hogy az az injektált kód kezdőcímére mutasson. Másik módszer a CreateRemoteThread használata, amely egy új szálat hoz létre a célfolyamatban, és az injektált kód kezdőcímén kezdi meg a futtatást.
A támadók gyakran alkalmaznak obfuszkációs technikákat is a kódinjektálás során, hogy megnehezítsék a detektálást. Például titkosíthatják a kártékony kódot, és csak a célfolyamatban dekódolják azt a WriteProcessMemory meghívása előtt.
Az NtUnmapViewOfSection API szerepe a memóriaterület felszabadításában

A Process Hollowing során a kártékony kód egy legitim folyamatba kerül injektálásra, hogy elkerülje a detektálást. Ennek a technikának kulcsfontosságú lépése a legitim folyamat memóriaterületének felszabadítása, hogy helyet csináljon a kártékony kódnak. Ebben a folyamatban játszik központi szerepet az NtUnmapViewOfSection API.
Az NtUnmapViewOfSection egy natív API függvény, melynek feladata egy memória szakasz leválasztása egy folyamat címtartományából. Lényegében a folyamat memóriatérképéből távolítja el a megadott szakaszt, így felszabadítva a hozzá tartozó virtuális címeket. A Process Hollowing esetében a támadó ezt az API-t használja a legitim folyamat eredeti kódjának és adatainak tárolására szolgáló memóriaterület eltávolítására.
Az NtUnmapViewOfSection sikeres meghívása után a korábban lefoglalt memóriaterület felszabadul, lehetővé téve a támadó számára, hogy a kártékony kódot az üres területre írja.
A függvény használatakor a támadó megadja a célfolyamat handle-jét és a leválasztandó memóriaterület báziscímét. A sikeres végrehajtás után a megadott címtartományban lévő memória már nem lesz hozzárendelve a folyamathoz, így a korábbi tartalom elveszik.
A támadók gyakran dinamikusan keresik meg az NtUnmapViewOfSection címét a ntdll.dll fájlban, mivel a cím változhat a különböző Windows verziók között. Ennek érdekében a GetModuleHandle és a GetProcAddress függvényeket használják.
Érdemes megjegyezni, hogy az NtUnmapViewOfSection használata a Process Hollowing során nem feltétlenül jelenti a kártékony tevékenység egyetlen indikátorát. A legitim szoftverek is használhatják ezt az API-t különböző célokra. A Process Hollowing detektálásához más technikákat, például a memóriaminták elemzését és a folyamat viselkedésének megfigyelését is alkalmazni kell.
A SetThreadContext API használata az új belépési pont beállításához
A process hollowing során a SetThreadContext API kulcsfontosságú szerepet játszik a kártékony kód végrehajtásának irányításában. Miután egy legitim folyamat memóriájában helyet csináltunk a rosszindulatú kód számára (például a VirtualAllocEx és WriteProcessMemory függvényekkel), a végrehajtás átirányítása a cél.
A SetThreadContext függvény lehetővé teszi egy szál kontextusának (regiszterek, verem, stb.) beállítását egy másik folyamatban. Ez azt jelenti, hogy a kártékony kód írója képes arra, hogy a legitim folyamat fő szálának kontextusát úgy módosítsa, hogy az a frissen beillesztett, rosszindulatú kód belépési pontjára mutasson.
A folyamat a következőképpen zajlik:
- Először meg kell szereznünk a célfolyamat fő szálának handle-jét a OpenThread függvénnyel.
- Ezután a GetThreadContext API-val kiolvassuk a szál aktuális kontextusát. Ez a kontextus tartalmazza az összes regiszter értékét, beleértve az EIP (Instruction Pointer) regisztert is, ami a következő végrehajtandó utasítás címét tárolja.
- Módosítjuk a kontextusban található EIP regiszter értékét úgy, hogy az a kártékony kód belépési pontjára mutasson.
- Végül a SetThreadContext függvény segítségével beállítjuk a módosított kontextust a célfolyamat fő szálában.
Ezzel a módszerrel lényegében „átverjük” a folyamatot, hogy a saját kódja helyett a kártékony kódot kezdje el végrehajtani.
A ResumeThread API meghívása után a célfolyamat a módosított kontextussal folytatja a futást, ami a rosszindulatú kód végrehajtásához vezet.
A ResumeThread API szerepe a kártékony kód futtatásában
A ResumeThread API kulcsfontosságú szerepet játszik a process hollowing támadások során a kártékony kód végrehajtásában. A technika lényege, hogy egy legitim folyamat (pl. Notepad.exe) memóriáját felülírják a támadó kódjával. Ezután a folyamat eredeti belépési pontját a támadó kódjának belépési pontjára cserélik.
Miután a memóriát felülírták és a belépési pontot átírták, a folyamat főszálát általában felfüggesztik (pl. a CreateProcess API CREATE_SUSPENDED flag-jével). Ezt követően, a kártékony kód sikeres injektálása után, a ResumeThread API hivatott újraindítani a felfüggesztett szálat.
A ResumeThread API lényegében a startjelzés a kártékony kód számára, amely így a legitim folyamat kontextusában kezd el futni.
A ResumeThread meghívásával a vezérlés átkerül a támadó kódjához, ami így elkerülheti a védelmi mechanizmusokat, mivel egy megbízható folyamat (a felülírt legitim program) nevében fut. Ezzel a módszerrel a kártékony kód álcázhatja magát, és nehezebben detektálhatóvá válik a biztonsági szoftverek számára.
A Process Hollowing lépésről lépésre: A technika részletes bemutatása
A process hollowing egy kártékony technika, amely lehetővé teszi a támadók számára, hogy egy legitim folyamatba injektálják a rosszindulatú kódjukat, elrejtve azt a biztonsági szoftverek elől. A technika lényege, hogy egy meglévő, általában megbízhatónak tartott processzus memóriájába írják a kártékony kódot, majd átveszik az irányítást a folyamat végrehajtásán.
A process hollowing folyamata több lépésből áll:
- Egy új, felfüggesztett állapotú processzus létrehozása: A támadó először létrehoz egy új processzust a CreateProcess API segítségével, a CREATE_SUSPENDED flag-et használva. Ez biztosítja, hogy a processzus ne kezdjen el futni a létrehozás után. Általában egy megbízható alkalmazást választanak ki célpontnak, például a notepad.exe-t.
- A memóriaterület felszabadítása: Miután a processzus felfüggesztett állapotban van, a támadó a ZwUnmapViewOfSection API-val felszabadítja a processzus memóriaterületét. Ez eltávolítja az eredeti, legitim kód leképezését a memóriából.
- Kártékony kód leképezése: A felszabadított memóriaterületre a támadó a saját kártékony kódját képezi le a VirtualAllocEx és WriteProcessMemory API-k segítségével. Ezzel a kártékony kód kerül a processzus memóriájába.
- A belépési pont átírása: A támadó ezután megkeresi a processzus belépési pontját (entry point), és átírja azt, hogy a kártékony kódra mutasson. Ehhez a GetThreadContext és SetThreadContext API-kat használja.
- A processzus futtatása: Végül a támadó elindítja a felfüggesztett processzust a ResumeThread API-val. Ekkor a processzus a kártékony kódot kezdi el futtatni.
A process hollowing lényege, hogy a támadó kihasználja a legitim processzus identitását, elrejtve a kártékony tevékenységet a háttérben.
A process hollowing elleni védekezés komplex feladat. A biztonsági szoftvereknek figyelemmel kell kísérniük a processzek létrehozását, a memóriaterületek módosítását és a belépési pontok átírását. Emellett fontos a gyanús tevékenységek észlelésére szolgáló heurisztikák alkalmazása is.
A támadók gyakran alkalmaznak különböző technikákat a process hollowing detektálásának megnehezítésére. Például:
- Kód obfuscation: A kártékony kód elrejtése, hogy ne legyen könnyen elemezhető.
- Anti-debugging technikák: A hibakeresés megakadályozása.
- Dynamic API resolution: Az API címek dinamikus feloldása, hogy ne legyenek statikusan elemezhetők.
A process hollowing elleni védekezés során elengedhetetlen a többrétegű védelem alkalmazása, amely magában foglalja a végpontvédelmet, a hálózati felügyeletet és a felhasználói tudatosság növelését.
A Process Hollowing variációi: RunPE és más technikák

A Process Hollowing, mint kártékony technika, számos variációban jelenhet meg. Ezek közül a legismertebb a RunPE, de léteznek más, kevésbé elterjedt, de hasonló elven működő módszerek is. A RunPE lényege, hogy egy ártalmatlan folyamat (például a Notepad) indítása után annak memóriáját felülírják a kártékony kód tartalmával. Ezzel a támadó eléri, hogy a kártékony kód egy megbízható folyamat nevében fusson, megnehezítve a detektálást.
A RunPE folyamata általában a következő lépésekből áll:
- Egy ártalmatlan folyamat elindítása felfüggesztett állapotban.
- A folyamat memóriájának feloldása.
- A kártékony kód memóriába másolása.
- A folyamat belépési pontjának (entry point) átírása a kártékony kód belépési pontjára.
- A folyamat futtatásának folytatása.
A RunPE mellett léteznek más variációk is, amelyek eltérő módon érik el ugyanazt a célt. Például egyes technikák nem feltétlenül indítanak új folyamatot, hanem egy már futó folyamatba injektálják a kártékony kódot. Ez történhet a CreateRemoteThread függvénnyel, amely lehetővé teszi, hogy egy másik folyamatban új szálat indítsunk, melynek kódja a kártékony payload.
A Process Hollowing variációk közös jellemzője, hogy a kártékony kód egy legális folyamat kontextusában fut, ami megnehezíti a hagyományos vírusirtók számára a detektálást.
Egy másik megközelítés a DLL injektálás. Ebben az esetben egy dinamikus link könyvtárat (DLL) injektálnak egy futó folyamatba. A DLL tartalmazza a kártékony kódot, amely betöltéskor automatikusan elindul. A DLL injektálás számos módon megvalósítható, például a CreateRemoteThread függvénnyel vagy a SetWindowsHookEx függvénnyel.
Vannak olyan technikák is, amelyek a folyamat memóriájának közvetlen manipulálásával érik el a kártékony kód futtatását. Ez magában foglalhatja a memóriavédelmi attribútumok módosítását (például a VirtualProtect függvénnyel), hogy a memóriaterület írható és futtatható legyen, majd a kártékony kód beleírását és futtatását.
Ezen technikák mindegyike kihasználja a Windows operációs rendszer működését, és célja, hogy a kártékony kód a lehető legészrevétlenebbül futhasson.
A Process Hollowing előnyei a támadók szemszögéből: Lopakodás és elrejtőzés
A process hollowing egy olyan technika, amelyet a támadók a kártékony kódjuk futtatására használnak, kihasználva a legitim folyamatok álcáját. Ennek egyik legfőbb előnye a lopakodás és az elrejtőzés.
A támadó által kiválasztott legitim folyamat (például a notepad.exe) memóriájába injektálják a kártékony kódot. Ezt követően a legitim folyamat eredeti kódja törlésre kerül, és a helyére a támadó által bejuttatott kód kerül. A folyamat neve és más alapvető jellemzői azonban változatlanok maradnak, ami megtéveszti a biztonsági szoftvereket és a rendszergazdákat.
A process hollowing lehetővé teszi a kártékony kód számára, hogy egy megbízható folyamat kontextusában futtassa a tevékenységét, minimalizálva a lebukás kockázatát.
A támadók gyakran választanak olyan folyamatokat, amelyek a rendszer szempontjából általánosan elfogadottak és széles körben használtak. Ez tovább nehezíti a kártékony tevékenység azonosítását, mivel a folyamat normális működésnek tűnik a felszínen.
A technika hatékonysága abban rejlik, hogy a kártékony kód nem közvetlenül a lemezről indul, hanem egy már futó, legitim folyamatba ágyazódik be. Ez megkerüli a fájl alapú víruskeresőket és más biztonsági intézkedéseket, amelyek a végrehajtható fájlok jellemzőit vizsgálják.
Egy másik előnye, hogy a kártékony kód nehezebben nyomon követhető, mivel a tevékenység egy legitim folyamathoz kapcsolódik. A biztonsági elemzőknek mélyrehatóan kell vizsgálniuk a folyamat működését, hogy felfedezzék a mögöttes kártékony tevékenységet.
A Process Hollowing hátrányai és korlátai
A Process Hollowing, bár hatékony technika a kártékony kód rejtett futtatására, számos hátránnyal és korláttal rendelkezik, amelyek befolyásolják a hatékonyságát és a felfedezhetőségét.
Az egyik fő korlát a memóriakezelés. A technika során új folyamatot kell létrehozni, ami erőforrásigényes. Emellett a memóriaterület lecserélése is kockázatokkal jár, például inkompatibilitási problémák léphetnek fel a kód és a futtatókörnyezet között.
A felfedezhetőség is jelentős probléma. A Process Hollowing tevékenység nyomokat hagy a rendszeren, például a folyamatokkal kapcsolatos anomáliákat (eltérő szülőfolyamatok, szokatlan memóriahasználat). Ezek a nyomok detektálhatók a modern víruskeresők és behatolásészlelő rendszerek által.
A Process Hollowing sikeressége nagymértékben függ a célfolyamat kiválasztásától és a bejuttatott kód álcázásától.
Továbbá, a működési hibák is gyakoriak lehetnek. Ha a kártékony kód nem kompatibilis a célfolyamat architektúrájával (pl. 32-bit versus 64-bit), a folyamat összeomolhat, ami azonnal felhívja a figyelmet a támadásra. A kódinjekció során fellépő hibák szintén a támadás lelepleződéséhez vezethetnek.
Végül, a biztonsági szoftverek fejlesztése folyamatosan javul, ami egyre nehezebbé teszi a Process Hollowing sikeres alkalmazását. A viselkedésalapú detektálási módszerek és a gépi tanulás alapú elemzések egyre hatékonyabban azonosítják a gyanús folyamatokat.
A Process Hollowing észlelése: Statikus és dinamikus analízis
A Process Hollowing észlelése során mind statikus, mind dinamikus analízisre szükség van, mivel a kártevő célja a detektálás elkerülése. A statikus analízis a kód vizsgálatára fókuszál a futtatás előtt, míg a dinamikus analízis a kód viselkedését monitorozza futás közben.
Statikus analízis során a következőkre érdemes figyelni:
- Import táblák: Vizsgáljuk meg, hogy a program importál-e olyan API-kat, mint a CreateProcess, WriteProcessMemory, ResumeThread, VirtualAllocEx, NtUnmapViewOfSection és SetThreadContext. Ezen függvények használata önmagában nem bizonyíték a Process Hollowingra, de gyanús lehet.
- Kód struktúra: Keressünk olyan kódmintákat, melyek új folyamat létrehozására, memóriaterületek felülírására és a végrehajtás átirányítására utalnak.
- Packerek és obfuscátorok: A kártevők gyakran használják ezeket a technikákat a kód elrejtésére, ami megnehezíti a statikus analízist. A packer eltávolítása vagy a kód deobfuszkálása elengedhetetlen a valódi viselkedés feltárásához.
Dinamikus analízis során a hangsúly a program futás közbeni viselkedésének megfigyelésén van:
- Folyamat létrehozás: Figyeljük meg a létrehozott folyamatokat. Ha egy folyamat gyanúsan gyorsan jön létre és szűnik meg, vagy ha a szülőfolyamat és a gyermekfolyamat tevékenységei nem egyeznek, az Process Hollowingra utalhat.
- Memóriaírás: Monitorozzuk a folyamatok által végzett memóriaírási műveleteket. Ha egy folyamat egy másik folyamat memóriájába ír, különösen a kódszegmensbe, az gyanús.
- API hívások: Kövessük nyomon az API hívásokat, és figyeljük meg a sorrendet és a paramétereket. A CreateProcess után a WriteProcessMemory és a SetThreadContext hívások kombinációja erősen gyanús.
- Hálózati tevékenység: A Process Hollowing során betöltött kártevő gyakran hálózati tevékenységet végez. Figyeljük meg a program által kezdeményezett kapcsolatokat és a küldött/fogadott adatokat.
A dinamikus analízis során a legfontosabb a szokatlan folyamat viselkedésének azonosítása, különös tekintettel a memóriakezelésre és az API hívásokra.
Mindkét analízis típust kombinálva lehet a leghatékonyabban azonosítani a Process Hollowing technikát alkalmazó kártevőket. A statikus analízis segít a gyanús kódminták felkutatásában, míg a dinamikus analízis a valós viselkedés feltárásában.
Signature-alapú észlelések korlátai

A process hollowing technika kihasználja a meglévő, legális folyamatok memóriáját kártékony kód futtatására. Ez komoly kihívást jelent a signature-alapú észlelési módszerek számára, mivel a kártékony kód nem egy önálló fájlként jelenik meg a rendszerben.
A signature-alapú megoldások a kártékony kódra jellemző mintákat, vagyis a „signature”-öket keresik a fájlokban. Mivel a process hollowing során a kártékony kód egy már létező, megbízható folyamat memóriájába kerül, a fájl, amit a víruskereső vizsgál, legálisnak fog tűnni.
A signature-alapú detektálás hatékonysága jelentősen csökken, ha a kártékony kód dinamikusan változik, vagy ha a process hollowing technikát alkalmazzák, mivel a kód nem a lemezen, hanem a memóriában fut, és a memóriában lévő kód gyakran titkosított vagy tömörített.
Ezért a támadók könnyen elkerülhetik a signature-alapú védelmet azáltal, hogy a kártékony kódot egy legális folyamatba injektálják. A hagyományos víruskeresőknek nehézséget okoz a futó folyamatok memóriájának mélyreható elemzése, ami a process hollowing elleni védekezés kulcsa lenne.
A heurisztikus elemzés és a viselkedésalapú detektálás hatékonyabb lehet a process hollowing által elrejtett kártékony kódok észlelésére, mivel ezek a módszerek a programok viselkedését figyelik, nem pedig a kódjukat.
Viselkedésalapú észlelések előnyei és hátrányai
A viselkedésalapú észlelések előnye, hogy képesek azonosítani azokat a process hollowing támadásokat is, amelyek új, ismeretlen kártevőket használnak. Mivel a technika lényege a legitim folyamatok átvétele, a viselkedésalapú rendszerek figyelhetik a szokatlan memóriakezelést, a kód injektálását, vagy a jogosulatlan folyamatok létrehozását, függetlenül a kártevő aláírásától.
Ugyanakkor jelentős hátrányuk is van: a téves riasztások magas aránya. A jogos szoftverek is végezhetnek hasonló műveleteket, mint például a dinamikus kódgenerálás vagy a folyamatok közötti kommunikáció, ami a viselkedésalapú rendszereket könnyen megtévesztheti.
A process hollowing észlelése viselkedés alapon hatékony lehet, de a finomhangolás elengedhetetlen a téves riasztások minimalizálása érdekében.
Egy másik kihívás a kártevők kifinomultabbá válása. A támadók folyamatosan keresik a módját a viselkedésalapú detektálás megkerülésére, például a legitim folyamatok viselkedésének utánzásával, vagy a támadások lassításával és elosztásával, hogy azok kevésbé tűnjenek fel.
Mindezek ellenére a viselkedésalapú észlelések elengedhetetlenek a modern védekezési stratégiákban, különösen a nulladik napi támadások ellen, ahol az aláírás alapú megoldások hatástalanok.
A Process Hollowing megelőzése: Hardening technikák és best practices
A process hollowing elleni védekezés kulcsa a proaktív megközelítés. Számos hardening technika és bevált gyakorlat létezik, melyek alkalmazásával jelentősen csökkenthető a támadás sikeres végrehajtásának valószínűsége.
A process hollowing megelőzésének leghatékonyabb módja a szigorú jogosultságkezelés és az alkalmazások viselkedésének folyamatos monitorozása.
Először is, minimalizálni kell az alkalmazások által igényelt jogosultságokat. Egy alkalmazásnak csak a működéséhez feltétlenül szükséges engedélyekkel szabad rendelkeznie. A felesleges jogosultságok csökkentése korlátozza a támadó mozgásterét egy esetleges sikeres behatolás esetén.
Másodszor, a szoftverek naprakészen tartása elengedhetetlen. A szoftvergyártók folyamatosan javítják a termékeikben található biztonsági réseket, ezért a frissítések rendszeres telepítése kritikus fontosságú.
Harmadszor, a végpontvédelmi megoldások (EDR) használata segít a gyanús tevékenységek detektálásában és blokkolásában. Ezek a megoldások képesek felismerni a process hollowing-ra utaló tipikus viselkedésmintákat, például egy ártalmatlan folyamat hirtelen memóriájának módosítását.
Negyedszer, a kód aláírásának ellenőrzése biztosítja, hogy csak megbízható forrásból származó kód fusson a rendszeren. Ez megakadályozza a hamisított vagy módosított binárisok futtatását.
Végül, a rendszeres biztonsági auditok és penetrációs tesztek segítenek azonosítani a gyenge pontokat és a potenciális támadási felületeket.
A felhasználói jogosultságok korlátozásának fontossága
A process hollowing egy olyan technika, ahol a kártékony kód egy legitim folyamat memóriájába injektálódik, majd a folyamat eredeti kódja felülírásra kerül. Ez lehetővé teszi a támadónak, hogy elkerülje a detektálást, mivel a rosszindulatú kód egy megbízható alkalmazás kontextusában fut.
Ebben a kontextusban a felhasználói jogosultságok korlátozása kulcsfontosságú védelmi vonalat jelent. Ha egy felhasználó nem rendelkezik rendszergazdai jogosultságokkal, a kártékony kód kevésbé valószínű, hogy végrehajthatóvá válik egy legitim folyamatban. Ugyanis a legtöbb process hollowing támadás emeltszintű jogosultságokat igényel a célfolyamat memóriájának módosításához.
A legfontosabb: a felhasználói fiókokat a legszükségesebb jogosultságokkal kell ellátni.
A jogosultságok korlátozása megakadályozza, hogy a támadó teljes mértékben kihasználja a process hollowing adta lehetőségeket. Ezáltal a rendszer kevésbé lesz sebezhető a kártékony szoftverekkel szemben, amelyek ezt a technikát alkalmazzák a végrehajtás során.
A szoftverek naprakészen tartásának szerepe

A process hollowing elleni védekezés egyik alapvető eleme a szoftverek, különösen az operációs rendszer és a futtatókörnyezetek naprakészen tartása. A frissítések gyakran tartalmaznak biztonsági javításokat, amelyek célja a kártékony kódok által kihasználható sebezhetőségek megszüntetése.
Ezek a javítások létfontosságúak, mivel a process hollowing technikát alkalmazó támadók gyakran élnek a régi, javítatlan hibákkal.
A szoftverek frissítése során a fejlesztők megszüntetik a kód azon pontjait, ahol a támadók be tudnák injektálni a saját kódjukat egy legitim folyamatba. Tehát, ha a rendszereinket frissen tartjuk, jelentősen csökkentjük a sikeres támadás kockázatát.
A memória védelmének technikái: DEP, ASLR
A process hollowing technikát alkalmazó kártékony kódok gyakran próbálják meg kijátszani a memória védelmi mechanizmusokat. Két ilyen fontos mechanizmus a DEP (Data Execution Prevention) és az ASLR (Address Space Layout Randomization).
A DEP célja, hogy megakadályozza a memóriának azokat a területeit, amelyek adatok tárolására szolgálnak, kód végrehajtására való használatát. A process hollowing során a kártékony kód a jogos alkalmazás memória területére másolja magát, így a DEP megakadályozhatja a kód futtatását, ha az eredeti terület nem rendelkezik végrehajtási jogokkal. A támadók ezt gyakran ROP (Return-Oriented Programming) technikákkal próbálják megkerülni, amelyek már meglévő, végrehajtható kód darabjait láncolják össze.
Az ASLR minden egyes program futtatásakor véletlenszerűen helyezi el a memóriában a program kódját, a könyvtárakat és más kritikus adatokat. Ez megnehezíti a támadók számára, hogy előre meghatározott memóriacímekre hagyatkozzanak, például a ROP láncok építésekor. Az ASLR hatékonysága függ a véletlenszerűség mértékétől. Minél nagyobb a véletlenszerűség, annál nehezebb a támadás.
Az ASLR és a DEP együttes alkalmazása jelentősen megnehezíti a process hollowing technikát használó kártékony kódok sikeres futtatását.
Fontos azonban, hogy ezek a védekezési mechanizmusok sem tökéletesek, és a támadók folyamatosan új módszereket keresnek a kijátszásukra. Például, a memóriaszivárgás kihasználásával a támadók információt szerezhetnek az ASLR által véletlenszerűen generált címekről.
Valós példák Process Hollowing támadásokra
A Process Hollowing támadások a valóságban is gyakran előfordulnak, különböző kártékony szoftverek alkalmazzák a rejtőzködés és a detektálás elkerülése érdekében. Például, a Zeus trójai egy korai, de hatékony példa erre a technikára. A Zeus gyakran a explorer.exe vagy más legitim folyamatokat használta fel a kártékony kód befecskendezésére és futtatására.
Egy másik példa az APT (Advanced Persistent Threat) csoportok által használt támadások. Ezek a csoportok kifinomult technikákat alkalmaznak, beleértve a Process Hollowing-ot is, hogy hosszú távon behatoljanak a célpont rendszereibe. Gyakran használnak fel legitim szoftvereket, mint például a Microsoft Office alkalmazásait, hogy elrejtsék a kártékony kódjukat.
A Process Hollowing lehetővé teszi a támadók számára, hogy elkerüljék a hagyományos víruskereső szoftverek detektálását, mivel a kártékony kód egy legitim folyamat memóriájában fut, nem pedig egy önálló, gyanús fájlban.
A Ransomware támadások során is megfigyelhető a Process Hollowing használata. A támadók a zsarolóvírus kódját egy legitim folyamatba injektálják, ami lehetővé teszi a fájlok titkosítását anélkül, hogy a víruskereső azonnal észlelné a fenyegetést. Ezáltal a kártékony kód nagyobb valószínűséggel hajtja végre a titkosítási folyamatot, mielőtt a védelem aktiválódna.
A Dridex malware is gyakran alkalmazza a Process Hollowing technikát a banki adatok ellopására. A Dridex a svchost.exe vagy más rendszerfolyamatokat használja fel a kártékony kód futtatására, ami megnehezíti a nyomkövetést és az eltávolítást.
A Process Hollowing és a modern malware: Összefüggések
A process hollowing egy olyan technika, amelyet a kártevők arra használnak, hogy elrejtsék a tényleges tevékenységüket. Lényege, hogy egy létező, legitim folyamatot (process) indítanak el, majd annak memóriatartalmát felülírják a saját, kártékony kódjukkal.
A folyamat a következőképpen zajlik: a malware először létrehoz egy új, felfüggesztett állapotú folyamatot. Ezt követően feloldja a memóriaterületet, amelyet eredetileg a legitim program használt, majd ide bemásolja a saját, rosszindulatú kódját. Végül, átirányítja a program belépési pontját (entry point) a kártékony kódra, így amikor a felfüggesztett folyamat folytatódik, a malware kódja fog futni a legitim program nevében.
Ezáltal a kártevő elkerülheti a detektálást, mivel a biztonsági szoftverek a legitim folyamatot fogják látni, nem pedig a benne futó kártékony kódot.
A process hollowing különösen hatékony, mert kihasználja az operációs rendszer megbízható folyamatait, így nehezebbé teszi a kártevő azonosítását. A támadók gyakran használják ezt a technikát más módszerekkel kombinálva, például shellcode injektálással vagy DLL-ek bejuttatásával a rendszerbe.
A Process Hollowing a zsarolóvírusok (ransomware) terjesztésében

A Process Hollowing egy olyan technika, amelyet a zsarolóvírusok előszeretettel használnak a működésük leplezésére. Lényege, hogy a támadók egy legitim folyamatot (pl. egy ártalmatlan rendszerfolyamatot) indítanak el.
Ezt követően a legitim folyamat memóriáját felülírják a zsarolóvírus kódjával. Így a futó folyamat látszólag ártalmatlan, miközben valójában a kártékony kód futtatásáért felelős.
A Process Hollowing lehetővé teszi a zsarolóvírus számára, hogy elkerülje a víruskeresők és más biztonsági szoftverek észlelését, mivel a kártékony tevékenység egy megbízható folyamat kontextusában zajlik.
Ezáltal a zsarolóvírus rejtve maradhat a rendszerben, miközben titkosítja a fájlokat és zsarolja az áldozatot.
A Process Hollowing és az APT csoportok
A process hollowing egy olyan technika, amelyet kártékony kódok futtatására használnak, gyakran APT (Advanced Persistent Threat) csoportok által. Lényege, hogy egy legitim, de üres folyamatot hoznak létre, majd annak memóriájába injektálják a kártékony kódot.
A támadók először elindítanak egy ártalmatlan programot (pl. a jegyzettömböt) szüneteltetett állapotban. Ezután a program memóriájában lévő kódot felülírják a saját kártékony kódjukkal. Végül a szüneteltetett folyamatot újraindítják, így valójában a kártékony kód fut a legitim program álcája alatt.
Ezáltal a támadók elkerülhetik a hagyományos víruskeresők és biztonsági megoldások figyelmét, mivel a futó folyamat látszólag megbízható forrásból származik.
Az APT csoportok előszeretettel alkalmazzák ezt a módszert, mert segítségével hosszú ideig rejtve maradhatnak a rendszerben, és észrevétlenül gyűjthetnek adatokat vagy végezhetnek egyéb kártékony tevékenységeket. A process hollowing különösen hatékony a fájl nélküli malware terjesztésében.
Jövőbeli trendek a Process Hollowing elleni védekezésben
A Process Hollowing elleni védekezés jövője a viselkedésalapú detektálás irányába mozdul el. A hagyományos, szignatúrákon alapuló módszerekkel szemben, melyek a már ismert kártevők felismerésére fókuszálnak, az új megközelítések a folyamatok abnormális viselkedését figyelik.
Ez a paradigma váltás lehetővé teszi a korábban ismeretlen, vagy éppen a szignatúrákat elkerülő támadások azonosítását.
Növekvő hangsúlyt kap a gépi tanulás alkalmazása, mely képes a normál folyamatműködés mintáinak megtanulására, és az attól való eltérések észlelésére. Emellett egyre fontosabb a processz-integritás védelme, például a kód-aláírások ellenőrzésével és a memóriavédelemmel. A jövőben a runtime elemzési technikák, amelyek futás közben vizsgálják a folyamatokat, szintén kulcsszerepet játszanak majd a Process Hollowing elleni védekezésben.
A gépi tanulás szerepe a Process Hollowing észlelésében
A gépi tanulás jelentős szerepet játszik a process hollowing észlelésében. Az anomália-észlelési modellek képesek felderíteni a normálistól eltérő folyamatviselkedést, ami a process hollowing tipikus jellemzője.
A modellek rendszerhívások (system call) szekvenciáit, memóriaműveleteket és egyéb folyamatattribútumokat elemeznek. Az eltérések mintázatai, például egy legitim folyamat memória-területének váratlan felülírása, riasztást generálhatnak.
A gépi tanulás algoritmusai, mint a felügyelet nélküli tanulás (unsupervised learning), képesek azonosítani a kártékony process hollowingra jellemző csoportosulásokat anélkül, hogy előzetes ismerettel rendelkeznének a támadási mintákról.
A viselkedésalapú elemzés, melyet gépi tanulási módszerekkel valósítanak meg, hatékonyabb lehet a statikus szignatúrákon alapuló megoldásoknál, mivel képes alkalmazkodni az új, változó kártevőkhöz.
A homokozók (sandboxes) használata a kártékony kódok elemzésére

A homokozók (sandboxes) kulcsszerepet játszanak a process hollowing technikát alkalmazó kártékony kódok elemzésében. Mivel a process hollowing során a kártékony kód egy legitim folyamatba injektálja magát, a statikus elemzés gyakran nem elegendő.
A homokozók dinamikus elemzést tesznek lehetővé, azaz a kód futtatása közben figyelik a viselkedését. Ezáltal a szakértők láthatják, hogyan használja a kártékony kód a process hollowingot, melyik folyamatot célozza meg, és milyen műveleteket hajt végre a rendszeren.
A homokozók elszigetelt környezetet biztosítanak, megakadályozva, hogy a kártékony kód valódi károkat okozzon a rendszerben.
A homokozók elemzőeszközei képesek API hívásokat, memóriaműveleteket és hálózati tevékenységeket rögzíteni, így feltárva a kártékony kód rejtett funkcióit. Ezen információk alapján a szakemberek azonosíthatják a kártevő célját, terjedési módját, és a védekezéshez szükséges lépéseket.
További források és tanulási lehetőségek a Process Hollowing témában
A Process Hollowing elleni védekezéshez elengedhetetlen a téma alapos ismerete.
Online kurzusok, szakmai blogok és kártevőelemző oldalak kínálnak mélyebb betekintést a technikába.
A Microsoft dokumentációja és a SANS Institute anyagai kiváló források lehetnek.
Ezenfelül érdemes reverse engineering feladatokat megoldani, hogy gyakorlati tapasztalatot szerezzünk a process hollowing működéséről.