Van hely a kód beszúrására egy alkalmazás és külső könyvtárai közé. Ez önmagában nem rossz, de nagyszerű módja annak, hogy kárt okozzunk.
Amikor a fejlesztőknek ki kell terjeszteniük egy olyan program funkcionalitását, amelyhez nem rendelkeznek forráskóddal, gyakran DLL-hez kapcsolódnak. Ez egy szokatlan módja annak, hogy egy programot olyasmire kényszerítsünk, amire nem szánták.
A helyzet az, hogy a hackerek rossz okokból is használják ezt a technikát, például ártalmatlan alkalmazások fegyverezésére vagy szoftverek feltörésére. Tehát mi az a DLL hooking, és hogyan működik valójában?
Mi az a DLL?
Minden alkalmazás futtatása az alapkódon kívüli fájloktól függ. Ezek a külső fájlok kódot és adatokat tartalmaznak, amelyekre egy programnak szüksége van a megfelelő működéshez. Ha ezen külső fájlok bármelyike eltűnik, előfordulhat, hogy a program stabilitási problémákat okoz, vagy egyenesen megtagadja a futtatást.
A Windows operációs rendszerben ezeket a külső fájlokat DLL-nek vagy dinamikus hivatkozási könyvtárnak nevezik. A dinamikus hivatkozási könyvtárak a Windows operációs rendszer alapvető összetevői, amelyek újrafelhasználható kódot és erőforrásokat biztosítanak, amelyek több alkalmazás között megoszthatók.
A Windows külső fájljai könyvtárakként ismertek. Kétféle könyvtár létezik: dinamikus és statikus. A dinamikus könyvtárak futási időben, a statikus könyvtárak pedig fordítási időben töltődnek be. A DLL egy dinamikus könyvtár.
Mi az a DLL Hooking?
A DLL hooking egy olyan technika, amely magában foglalja a programok vagy folyamatok függvényhívásainak elfogását és megváltoztatását egy DLL-hez. Lényegében a Man-in-The-Middle beállítás ott jön létre, ahol egy horog van a program és az általa meghívott DLL-ek között. Ezután minden vagy célzott függvényhívás nyomon követhető és módosul.
Íme egy példa egy DLL hooking támadás munkafolyamatára:
- A támadó elemzi a program által kezdeményezett függvényhívásokat és a DLL-fájlokat, amelyektől függ.
- A támadó egy hookot hoz létre a számos megvalósítási technika egyikével, mint például az IAT hooking, az inline hooking, a COM hooking stb.
- Önkényes kódvégrehajtás történik.
- Az eredeti függvényhívás végrehajtása megtörténhet, de előfordulhat, hogy nem.
- A támadó elfedi a nyomaikat a horog törlésével és az összes módosítás visszaállításával.
A DLL hooking egy kifinomult technika, amely egyaránt használható (például a program funkcionalitásának bővítésére, hibakeresésre és naplózás) vagy rossz (például biztonsági intézkedések megkerülése, érzékeny adatok ellopása, tetszőleges kód futtatása és videojáték írása hackek).
Hogyan működik a DLL Hooking?
Mielőtt belemerülne a DLL hooking megvalósításába, fontos tisztázni az alapokat. Tegyünk egy lépést hátra, és értsük meg, mi történik, ha egy program függvényhívást indít egy DLL-re.
Amikor egy program meghív egy függvényt egy DLL-ben, az operációs rendszer először megkeresi a függvény nevét a program importcímtáblázatát, és lekéri a függvény címét a DLL exportálási címéből Asztal.
Amint a függvény címe meg van oldva, a program a függvény címére ugorhat, hogy elérje és végrehajtsa azt. A DLL hooking a folyamat lehallgatása és a függvényhívás átirányítása egy másik függvényre. Számos módja van a DLL-akasztás megvalósításának. Nézzük meg a megvalósítás leggyakrabban használt technikáit.
Ez eléggé technikai tud lenni, így segíthet, ha erős Windows-felhasználók vagy más módon jól ismeri a Windows belső tulajdonságait.
IAT Hooking
Az IAT hooking egy hatékony technika, amelyet a rosszindulatú programok szerzői széles körben alkalmaznak a biztonsági intézkedések megkerülésére és az észlelés elkerülésére. Az Import Address Table (IAT) egy adatstruktúra, amely minden új folyamat létrehozásakor betöltődik a memóriába. Az IAT tartalmazza az összes importált függvényhívás nevét és azok memóriacímét.
Amikor egy program meghív egy függvényt a DLL-ben, először a függvény nevét keresi az IAT, és ha a az említett függvény memóriacíme nem található az IAT-ben, akkor a DLL exportcíméből jön létre Asztal.
Ez egy olyan adatstruktúra, amelyben a DLL által exportált összes funkció a memóriacímükre van leképezve. Az IAT hooking során az ellenfél módosíthatja egy folyamat IAT-jét, és lecserélheti a legitim függvényleképezéseket. rosszindulatúakkal, így megzavarják a tervezett műveletet, és önkényessé teszik a program végrehajtását kód.
Így néz ki az általános támadási folyamat az IAT hookingben:
- Egy program függvényhívást hajt végre.
- A függvény címe az IAT-ban található.
- Mióta az IAT kiakadt; a funkció címe megváltozott, és egy rosszindulatú funkció memóriahelye betöltődik.
- A program a rosszindulatú funkció helyére ugrik, és tetszőleges kódot hajt végre.
- Végül az eredeti függvényhívás végrehajtásra kerül.
Inline Hooking
Az inline hooking egy DLL-bekapcsolási technika, amely magában foglalja a célfüggvény forráskódjának módosítását, hogy a végrehajtását egy speciális függvényre irányítsa. Az Inline Hooking, szemben az IAT hooking-el, közvetlenül módosítja a célfüggvény kódját, így a támadó pontosabban szabályozhatja a célfüggvény viselkedését.
A fenti ábrán figyelje meg, hogyan manipulálták a jogos funkciót, hogy rosszindulatú funkcióra mutassanak. Amint a rosszindulatú függvény összes utasítása végrehajtásra került, egy ugrási utasítás kerül végrehajtásra, hogy visszatérjen a törvényes funkcióhoz, és befejezze a végrehajtást.
Az ellenfelek inline hooking-et alkalmaznak, hogy tartós változtatásokat hajtsanak végre a programon, például módosítsák a paramétereket vagy a függvény visszatérési értékét.
Microsoft elkerülő utak
A Microsoft Research kifejlesztett egy házon belüli DLL hooking csomagot, a Detours-t. Lehetővé teszi a programozók számára, hogy nyomon kövessék és módosítsák a program által kezdeményezett függvényhívásokat. A kitérők számos feladathoz használhatók, beleértve, de nem kizárólagosan: műszerezést, tesztelést és hibajavítást.
Az ellenfelek a Detours funkciót használják DLL-injekciós és hooking-támadások végrehajtására, a fejlesztők pedig gyakran használják alkalmazásaik funkcionalitásának bővítésére. A Detours csomagról többet megtudhat a hivatalos GitHub adattár.
Most már tudja, hogyan működik a DLL Hooking
A DLL hooking egy kifinomult technika, amely megfelelő okok miatt növelheti az alkalmazás képességeit, vagy segíthet a szoftverek hibakeresésében és optimalizálásában. Sajnos az akasztást gyakrabban használják ellenséges technikának, nem pedig fejlesztési módszernek. Ezért fontos, hogy elfogadja és betartsa a biztonsági bevált gyakorlatokat, amelyek biztosítják, hogy alkalmazásai biztonságban legyenek, és mentesek legyenek az olyan támadásoktól, mint a beakadás és a befecskendezés.