Mezi aplikací a jejími externími knihovnami je prostor pro vložení kódu. Dělat to není ze své podstaty špatné, ale je to skvělý způsob, jak ublížit.
Když vývojáři potřebují rozšířit funkčnost programu, pro který nemají zdrojový kód, často se obrátí na DLL hooking. Toto je neortodoxní způsob, jak přimět program, aby dělal něco, k čemu není určen.
Věc je, že hackeři také používají tuto techniku ze všech špatných důvodů, jako je zbrojení neškodných aplikací nebo crackování softwaru. Co je tedy DLL hákování a jak to vlastně funguje?
Co je DLL?
Každá aplikace závisí na spuštění některých souborů mimo její základní kód. Tyto externí soubory obsahují kód a data, která program potřebuje ke správnému fungování. Když některý z těchto externích souborů zmizí, program může mít problémy se stabilitou nebo může přímo odmítnout spuštění.
V operačním systému Windows se tyto externí soubory nazývají DLL nebo dynamické knihovny. Knihovny dynamických odkazů jsou základními součástmi operačního systému Windows, poskytují opakovaně použitelný kód a prostředky, které lze sdílet mezi více aplikacemi.
Externí soubory ve Windows jsou známé jako knihovny. Existují dva typy knihoven: dynamické a statické. Dynamické knihovny se načítají za běhu a statické knihovny se načítají při kompilaci. DLL je dynamická knihovna.
Co je DLL hákování?
DLL zavěšení je technika, která zahrnuje zachycení a změnu volání funkcí, které programy nebo procesy provádějí do knihovny DLL. V podstatě nastavení Man-in-The-Middle je vytvořen tam, kde je háček umístěn mezi programem a knihovnami DLL, které volá. Všechna nebo cílená volání funkcí jsou pak sledována a změněna.
Zde je příklad pracovního postupu při útoku na DLL:
- Útočník analyzuje volání funkcí prováděná programem a soubory DLL, na kterých závisí.
- Útočník vytvoří hák pomocí jedné z mnoha implementačních technik, jako je hákování IAT, hákování inline, hákování COM atd.
- Dochází ke spuštění libovolného kódu.
- Provedení původního volání funkce se může, ale nemusí stát.
- Útočník zakryje jejich stopy odstraněním háku a vrácením všech provedených změn.
DLL hooking je důmyslná technika, kterou lze použít jak pro dobro (jako je rozšíření funkčnosti programu, ladění a protokolování) nebo za špatné (jako je obcházení bezpečnostních opatření, krádež citlivých dat, spouštění libovolného kódu a psaní videoher hacky).
Jak funguje DLL hákování?
Než se pustíte do implementace hákování DLL, je důležité si ujasnit základy. Vraťme se o krok zpět a pochopme, co se stane, když program zavolá funkci DLL.
Když program zavolá funkci v knihovně DLL, operační systém nejprve vyhledá název funkce importovat tabulku adres programu a získá adresu funkce z exportní adresy DLL Stůl.
Jakmile je adresa funkce vyřešena, program může skočit na adresu funkce, aby k ní přistoupil a provedl ji. DLL zavěšení se točí kolem zachycení tohoto procesu a přesměrování volání funkce na jinou funkci. Existuje několik způsobů, jak implementovat hákování DLL. Podívejme se na nejčastěji používané techniky pro jeho realizaci.
To může být docela technické, takže vám to může pomoci jste zkušeným uživatelem Windows nebo jinak dobře rozumíte vnitřním prvkům systému Windows.
IAT hákování
IAT hooking je účinná technika široce používaná autory malwaru k obcházení bezpečnostních opatření a vyhýbání se detekci. Importní tabulka adres (IAT) je datová struktura, která se načte do paměti vždy, když je vytvořen nový proces. IAT obsahuje názvy všech importovaných volání funkcí a jejich paměťové adresy.
Když program volá funkci v DLL, název funkce je nejprve hledán v IAT a pokud je paměťová adresa uvedené funkce není nalezena v IAT, pak je stanovena z exportní adresy DLL Stůl.
Jedná se o datovou strukturu, kde jsou všechny funkce exportované DLL mapovány na jejich paměťové adresy. Při hákování IAT může protivník upravit IAT procesu a nahradit legitimní mapování funkcí se škodlivými, čímž naruší zamýšlenou operaci a způsobí, že se program spustí svévolně kód.
Zde je návod, jak vypadá obecný tok útoku v hákování IAT:
- Program zavolá funkci.
- Adresa funkce se nachází v IAT.
- Vzhledem k tomu, že IAT byl závislý; adresa funkce byla změněna a je načteno umístění paměti škodlivé funkce.
- Program skočí na umístění škodlivé funkce a spustí se libovolný kód.
- Nakonec se provede původní volání funkce.
Inline hákování
Inline hákování je technika hákování DLL, která zahrnuje změnu zdrojového kódu cílové funkce za účelem nasměrování jejího provádění na speciální funkci. Inline Hooking, na rozdíl od hákování IAT, mění přímo kód cílové funkce a dává útočníkovi přesnější kontrolu nad tím, jak se cílová funkce chová.
Ve výše uvedeném diagramu sledujte, jak byla legitimní funkce zmanipulována, aby ukazovala na škodlivou funkci. Jakmile jsou provedeny všechny instrukce ve škodlivé funkci, provede se instrukce skoku, aby se vrátila do legitimní funkce a dokončila její provádění.
Protivníci využívají inline hákování k provádění trvalých změn v programu, jako je změna parametrů nebo návratové hodnoty funkce.
Microsoft Objížďky
Microsoft Research vyvinul vlastní balíček DLL hákování, Detours. Umožňuje programátorům sledovat a měnit volání funkcí prováděná programem. Objížďky lze použít pro různé úkoly, včetně, ale bez omezení na: přístrojové vybavení, testování a oprava chyb.
Protivníci využívají Detours k provádění DLL injekcí a hákování útoků a vývojáři je často používají k rozšíření funkčnosti svých aplikací. Více o balíčku Objížďky se můžete dozvědět na oficiální úložiště GitHub.
Nyní víte, jak funguje DLL hákování
DLL hooking je sofistikovaná technika, která, pokud je použita ze správných důvodů, může zvýšit možnosti vaší aplikace nebo vám pomoci ladit a optimalizovat software. Bohužel je hákování častěji vnímáno jako kontradiktorní technika spíše než vývojová. Je tedy důležité, abyste přijali a dodržovali osvědčené bezpečnostní postupy, které zajistí, že vaše aplikace budou bezpečné a bez útoků, jako je hákování a injekce.