Er is ruimte om code te injecteren tussen een applicatie en zijn externe bibliotheken. Dit doen is niet inherent slecht, maar het is een geweldige manier om kwaad te doen.
Wanneer ontwikkelaars de functionaliteit van een programma moeten uitbreiden waarvoor ze de broncode niet hebben, wenden ze zich vaak tot DLL-hooking. Dit is een onorthodoxe manier om een programma iets te laten doen waarvoor het niet bedoeld is.
Het punt is dat hackers deze techniek ook gebruiken om de verkeerde redenen, zoals het bewapenen van onschadelijke applicaties of het kraken van software. Dus wat is DLL-hooking en hoe werkt het eigenlijk?
Wat is een DLL?
Elke toepassing is afhankelijk van enkele bestanden buiten de basiscode om te worden uitgevoerd. Deze externe bestanden bevatten code en gegevens die een programma nodig heeft om goed te kunnen functioneren. Wanneer een van deze externe bestanden ontbreekt, kan het programma stabiliteitsproblemen hebben of ronduit weigeren te worden uitgevoerd.
In het Windows-besturingssysteem worden deze externe bestanden DLL of Dynamic Link-bibliotheken genoemd. Dynamic Link-bibliotheken zijn essentiële componenten van het Windows-besturingssysteem en bieden herbruikbare code en bronnen die door meerdere toepassingen kunnen worden gedeeld.
Externe bestanden op Windows staan bekend als bibliotheken. Er zijn twee soorten bibliotheken: dynamisch en statisch. Dynamische bibliotheken worden tijdens runtime geladen en statische bibliotheken worden tijdens het compileren geladen. DLL is een dynamische bibliotheek.
Wat is DLL-hooking?
DLL-hooking is een techniek die het onderscheppen en wijzigen van functieaanroepen omvat die programma's of processen naar een DLL doen. Eigenlijk een Man-in-The-Middle-opstelling wordt tot stand gebracht waar een haak zit tussen een programma en de DLL's die het aanroept. Alle of gerichte functieaanroepen worden vervolgens getraceerd en gewijzigd.
Hier is een voorbeeld van een DLL hooking-aanvalsworkflow:
- De aanvaller analyseert de functieaanroepen van het programma en de DLL-bestanden waarvan het afhankelijk is.
- De aanvaller maakt een hook met behulp van een van de vele implementatietechnieken zoals IAT hooking, inline hooking, COM hooking, etc.
- Er vindt willekeurige code-uitvoering plaats.
- De uitvoering van de oorspronkelijke functieaanroep kan al dan niet plaatsvinden.
- De aanvaller wist zijn sporen uit door de hook te verwijderen en alle aangebrachte wijzigingen ongedaan te maken.
DLL-hooking is een geavanceerde techniek die kan worden gebruikt voor zowel goede doelen (zoals het uitbreiden van programmafunctionaliteit, foutopsporing en logging) of ten kwade (zoals het omzeilen van beveiligingsmaatregelen, het stelen van gevoelige gegevens, het uitvoeren van willekeurige code en het schrijven van videogames hacken).
Hoe werkt DLL-hooking?
Voordat u begint met het implementeren van DLL-hooking, is het belangrijk om de basis op te helderen. Laten we een stap terug doen en begrijpen wat er gebeurt wanneer een functieaanroep door een programma naar een DLL wordt gedaan.
Wanneer een programma een functie in een DLL aanroept, zoekt het besturingssysteem eerst de naam van de functie op in de importadrestabel van het programma en haalt het adres van de functie uit het exportadres van de DLL Tafel.
Zodra het adres van de functie is opgelost, kan het programma naar het adres van de functie springen om deze te openen en uit te voeren. DLL hooking draait om het onderscheppen van dit proces en het omleiden van de functieaanroep naar een andere functie. Er zijn verschillende manieren om DLL-hooking te implementeren. Laten we eens kijken naar de meest gebruikte technieken om het te implementeren.
Dit kan behoorlijk technisch worden, dus het kan helpen als je een krachtige Windows-gebruiker bent of anderszins een goed begrip hebben van Windows-internals.
IAT-haken
IAT-hooking is een effectieve techniek die veel wordt gebruikt door auteurs van malware om beveiligingsmaatregelen te omzeilen en detectie te omzeilen. De Import Address Table (IAT) is een gegevensstructuur die in het geheugen wordt geladen wanneer een nieuw proces wordt gemaakt. IAT bevat de namen van alle geïmporteerde functieaanroepen en hun geheugenadressen.
Wanneer een programma een functie aanroept in de DLL, wordt eerst naar de functienaam gezocht in de IAT en als de het geheugenadres van de genoemde functie wordt niet gevonden in de IAT en wordt vervolgens vastgesteld op basis van het exportadres van de DLL Tafel.
Het is een gegevensstructuur waarin alle functies die door de DLL worden geëxporteerd, worden toegewezen aan hun geheugenadressen. Bij IAT-hooking kan een tegenstander de IAT van een proces wijzigen en legitieme functietoewijzingen vervangen met kwaadwillenden, waardoor de beoogde werking wordt verstoord en het programma willekeurig wordt uitgevoerd code.
Dit is hoe de algemene aanvalsstroom bij IAT-hooking eruit ziet:
- Een programma doet een functieaanroep.
- Het functieadres bevindt zich in de IAT.
- Sinds de IAT verslaafd is; het functieadres is gewijzigd en de geheugenlocatie van een schadelijke functie is geladen.
- Het programma springt naar de locatie van de kwaadaardige functie en willekeurige code wordt uitgevoerd.
- Ten slotte wordt de oorspronkelijke functieaanroep uitgevoerd.
Inline haken
Inline hooking is een DLL hooking-techniek waarbij de broncode van een doelfunctie wordt gewijzigd om de uitvoering ervan naar een speciale functie te leiden. Inline Hooking, in tegenstelling tot IAT hooking, verandert de code van de doelfunctie direct, waardoor de aanvaller nauwkeurigere controle krijgt over hoe de doelfunctie zich gedraagt.
Bekijk in het bovenstaande diagram hoe er met de legitieme functie is geknoeid om naar een schadelijke functie te verwijzen. Zodra alle instructies in de schadelijke functie zijn uitgevoerd, wordt er een spronginstructie gemaakt om terug te keren naar de legitieme functie om de uitvoering te voltooien.
Kwaadwillenden gebruiken inline hooking om blijvende wijzigingen in een programma aan te brengen, zoals het wijzigen van de parameters of de retourwaarde van een functie.
Microsoft omwegen
Microsoft Research heeft een intern DLL-haakpakket ontwikkeld, Detours. Hiermee kunnen programmeurs functieaanroepen van een programma volgen en wijzigen. Omwegen kunnen voor verschillende taken worden gebruikt, inclusief maar niet beperkt tot: instrumentatie, testen en het oplossen van bugs.
Kwaadwillenden gebruiken Detours om DLL-injectie- en hooking-aanvallen uit te voeren, en ontwikkelaars gebruiken het vaak om de functionaliteit van hun apps uit te breiden. Meer informatie over het Omleidingen-pakket vindt u op de officiële GitHub-repository.
Nu weet je hoe DLL Hooking werkt
DLL-hooking is een geavanceerde techniek die, wanneer gebruikt om de juiste redenen, de mogelijkheden van uw applicatie kan vergroten of u kan helpen bij het debuggen en optimaliseren van software. Helaas wordt hooking vaker gezien als een vijandige techniek dan als een ontwikkelingstechniek. Het is dus belangrijk dat u de beste beveiligingspraktijken toepast en naleeft, zodat uw toepassingen veilig zijn en vrij van aanvallen zoals hooking en injectie.