Zwischen einer Anwendung und ihren externen Bibliotheken ist Platz zum Einfügen von Code. Das ist nicht grundsätzlich schlecht, aber es ist eine großartige Möglichkeit, Schaden anzurichten.

Wenn Entwickler die Funktionalität eines Programms erweitern müssen, für das sie keinen Quellcode haben, wenden sie sich häufig dem DLL-Hooking zu. Dies ist eine unorthodoxe Art, ein Programm dazu zu bringen, etwas zu tun, was es nicht tun soll.

Die Sache ist die, dass Hacker diese Technik auch aus den falschen Gründen verwenden, wie zum Beispiel die Bewaffnung harmloser Anwendungen oder das Knacken von Software. Was ist DLL-Hooking und wie funktioniert es eigentlich?

Was ist eine DLL?

Jede Anwendung hängt von einigen Dateien außerhalb ihres Basiscodes ab, um ausgeführt zu werden. Diese externen Dateien enthalten Code und Daten, die ein Programm benötigt, um richtig zu funktionieren. Wenn eine dieser externen Dateien verloren geht, kann das Programm Stabilitätsprobleme haben oder sich schlichtweg weigern, ausgeführt zu werden.

instagram viewer

Im Windows-Betriebssystem werden diese externen Dateien als DLL oder Dynamic Link Libraries bezeichnet. Dynamic Link Libraries sind wesentliche Komponenten des Windows-Betriebssystems und bieten wiederverwendbaren Code und Ressourcen, die von mehreren Anwendungen gemeinsam genutzt werden können.

Externe Dateien werden unter Windows als Bibliotheken bezeichnet. Es gibt zwei Arten von Bibliotheken: dynamisch und statisch. Dynamische Bibliotheken werden zur Laufzeit geladen und statische Bibliotheken werden zur Kompilierzeit geladen. DLL ist eine dynamische Bibliothek.

Was ist DLL-Hooking?

DLL-Hooking ist eine Technik, die das Abfangen und Ändern von Funktionsaufrufen umfasst, die Programme oder Prozesse an eine DLL senden. Im Wesentlichen ein Man-in-the-Middle-Setup wird eingerichtet, wo ein Hook zwischen einem Programm und den DLLs sitzt, die es aufruft. Alle oder gezielte Funktionsaufrufe werden dann verfolgt und verändert.

Hier ist ein Beispiel für einen DLL-Hooking-Angriffs-Workflow:

  1. Der Angreifer analysiert die Funktionsaufrufe des Programms und die DLL-Dateien, von denen es abhängt.
  2. Der Angreifer erstellt einen Hook mit einer der vielen Implementierungstechniken wie IAT-Hooking, Inline-Hooking, COM-Hooking usw.
  3. Es kommt zur Ausführung willkürlichen Codes.
  4. Die Ausführung des ursprünglichen Funktionsaufrufs kann erfolgen oder auch nicht.
  5. Der Angreifer verwischt seine Spuren, indem er den Haken löscht und alle vorgenommenen Änderungen rückgängig macht.

DLL-Hooking ist eine ausgeklügelte Technik, die für beide Zwecke eingesetzt werden kann (z. B. Erweiterung der Programmfunktionalität, Debugging und Protokollierung) oder für schlechte Zwecke (wie das Umgehen von Sicherheitsmaßnahmen, das Stehlen sensibler Daten, das Ausführen von willkürlichem Code und das Schreiben von Videospielen Hacken).

Wie funktioniert DLL-Hooking?

Bevor Sie in die Implementierung von DLL-Hooking eintauchen, ist es wichtig, die Grundlagen zu klären. Lassen Sie uns einen Schritt zurücktreten und verstehen, was passiert, wenn ein Programm einen Funktionsaufruf an eine DLL sendet.

Wenn ein Programm eine Funktion in einer DLL aufruft, sucht das Betriebssystem zunächst nach dem Namen der Funktion in die Importadresstabelle des Programms und erhält die Adresse der Funktion aus der Exportadresse der DLL Tisch.

Sobald die Adresse der Funktion aufgelöst ist, kann das Programm zur Adresse der Funktion springen, um darauf zuzugreifen und sie auszuführen. Beim DLL-Hooking geht es darum, diesen Prozess abzufangen und den Funktionsaufruf an eine andere Funktion umzuleiten. Es gibt mehrere Möglichkeiten, DLL-Hooking zu implementieren. Schauen wir uns die am häufigsten verwendeten Techniken für die Implementierung an.

Dies kann ziemlich technisch werden, daher kann es hilfreich sein, wenn Sie sind ein Windows-Hauptbenutzer oder anderweitig über ein starkes Verständnis der Windows-Interna verfügen.

IAT-Hooking

IAT-Hooking ist eine effektive Technik, die von Malware-Autoren häufig eingesetzt wird, um Sicherheitsmaßnahmen zu umgehen und der Entdeckung zu entgehen. Die Importadressentabelle (IAT) ist eine Datenstruktur, die immer dann in den Speicher geladen wird, wenn ein neuer Prozess erstellt wird. IAT enthält die Namen aller importierten Funktionsaufrufe und ihre Speicheradressen.

Wenn ein Programm eine Funktion in der DLL aufruft, wird zunächst der Funktionsname in der IAT gesucht und ggf Speicheradresse der besagten Funktion nicht im IAT gefunden wird, dann wird sie aus der Exportadresse der DLL ermittelt Tisch.

Es ist eine Datenstruktur, in der alle von der DLL exportierten Funktionen auf ihre Speicheradressen abgebildet werden. Beim IAT-Hooking kann ein Angreifer die IAT eines Prozesses ändern und legitime Funktionszuordnungen ersetzen mit böswilligen, wodurch der beabsichtigte Betrieb gestört und das Programm willkürlich ausgeführt wird Code.

So sieht der allgemeine Angriffsablauf beim IAT-Hooking aus:

  1. Ein Programm führt einen Funktionsaufruf durch.
  2. Die Funktionsadresse befindet sich im IAT.
  3. Da ist der IAT süchtig geworden; die Funktionsadresse wurde geändert und der Speicherort einer Schadfunktion geladen.
  4. Das Programm springt an die Stelle der Schadfunktion und beliebiger Code wird ausgeführt.
  5. Abschließend wird der ursprüngliche Funktionsaufruf ausgeführt.

Inline-Hooking

Inline-Hooking ist eine DLL-Hooking-Technik, bei der der Quellcode einer Zielfunktion geändert wird, um seine Ausführung an eine spezielle Funktion zu richten. Im Gegensatz zum IAT-Hooking ändert Inline-Hooking den Code der Zielfunktion direkt und gibt dem Angreifer eine genauere Kontrolle darüber, wie sich die Zielfunktion verhält.

Beobachten Sie im obigen Diagramm, wie die legitime Funktion manipuliert wurde, um auf eine bösartige Funktion hinzuweisen. Sobald alle Anweisungen in der bösartigen Funktion ausgeführt sind, wird eine Sprunganweisung ausgeführt, um zu der legitimen Funktion zurückzukehren, damit diese die Ausführung beendet.

Angreifer verwenden Inline-Hooking, um dauerhafte Änderungen an einem Programm vorzunehmen, z. B. um die Parameter oder den Rückgabewert einer Funktion zu ändern.

Microsoft-Umwege

Microsoft Research hat ein internes DLL-Hooking-Paket namens Detours entwickelt. Es ermöglicht Programmierern, Funktionsaufrufe eines Programms zu verfolgen und zu ändern. Umwege können für eine Vielzahl von Aufgaben verwendet werden, einschließlich, aber nicht beschränkt auf: Instrumentierung, Tests und Fehlerbehebung.

Angreifer verwenden Detours, um DLL-Injection- und Hooking-Angriffe durchzuführen, und Entwickler verwenden es häufig, um die Funktionalität ihrer Apps zu erweitern. Mehr über das Detours-Paket erfahren Sie auf der offizielles GitHub-Repository.

Jetzt wissen Sie, wie DLL-Hooking funktioniert

DLL-Hooking ist eine ausgeklügelte Technik, die, wenn sie aus den richtigen Gründen eingesetzt wird, die Fähigkeiten Ihrer Anwendung steigern oder Ihnen beim Debuggen und Optimieren von Software helfen kann. Leider wird Hooking eher als kontradiktorische Technik als als Entwicklungstechnik angesehen. Daher ist es wichtig, dass Sie die Best Practices für die Sicherheit übernehmen und einhalten, um sicherzustellen, dass Ihre Anwendungen sicher und frei von Angriffen wie Hooking und Injection sind.