Il y a de la place pour injecter du code entre une application et ses bibliothèques externes. Ce n'est pas mauvais en soi, mais c'est une excellente façon de faire du mal.

Lorsque les développeurs ont besoin d'étendre les fonctionnalités d'un programme dont ils n'ont pas le code source, ils se tournent souvent vers le hooking DLL. C'est une façon peu orthodoxe de faire faire à un programme quelque chose qu'il n'est pas censé faire.

Le fait est que les pirates utilisent également cette technique pour toutes les mauvaises raisons, comme la militarisation d'applications inoffensives ou le piratage de logiciels. Alors, qu'est-ce que l'accrochage DLL et comment cela fonctionne-t-il réellement ?

Qu'est-ce qu'une DLL?

Chaque application dépend de certains fichiers en dehors de son code de base pour s'exécuter. Ces fichiers externes contiennent du code et des données dont un programme a besoin pour fonctionner correctement. Lorsque l'un de ces fichiers externes disparaît, le programme peut avoir des problèmes de stabilité ou refuser carrément de s'exécuter.

instagram viewer

Dans le système d'exploitation Windows, ces fichiers externes sont appelés DLL ou bibliothèques de liens dynamiques. Les bibliothèques de liens dynamiques sont des composants essentiels du système d'exploitation Windows, fournissant un code et des ressources réutilisables qui peuvent être partagés entre plusieurs applications.

Les fichiers externes sous Windows sont appelés bibliothèques. Il existe deux types de bibliothèques: dynamiques et statiques. Les bibliothèques dynamiques sont chargées au moment de l'exécution et les bibliothèques statiques sont chargées au moment de la compilation. DLL est une bibliothèque dynamique.

Qu'est-ce que l'accrochage DLL?

L'accrochage DLL est une technique qui comprend l'interception et la modification des appels de fonction que les programmes ou les processus effectuent vers une DLL. Essentiellement une configuration Man-in-The-Middle est établi là où un crochet se trouve entre un programme et les DLL qu'il appelle. Tous les appels de fonction ciblés sont ensuite tracés et modifiés.

Voici un exemple de workflow d'attaque DLL hooking :

  1. L'attaquant analyse les appels de fonction effectués par le programme et les fichiers DLL dont il dépend.
  2. L'attaquant crée un hook en utilisant l'une des nombreuses techniques d'implémentation telles que le hook IAT, le hook inline, le hook COM, etc.
  3. L'exécution de code arbitraire se produit.
  4. L'exécution de l'appel de fonction d'origine peut ou non se produire.
  5. L'attaquant dissimule ses traces en supprimant le crochet et en annulant toutes les modifications apportées.

L'accrochage DLL est une technique sophistiquée qui peut être utilisée à la fois pour le bien (comme l'extension des fonctionnalités du programme, le débogage et journalisation) ou pour de mauvais (tels que le contournement des mesures de sécurité, le vol de données sensibles, l'exécution de code arbitraire et l'écriture de jeux vidéo hacks).

Comment fonctionne l'accrochage DLL?

Avant de plonger dans l'implémentation de l'accrochage DLL, il est important de clarifier les bases. Revenons un peu en arrière et comprenons ce qui se passe lorsqu'un appel de fonction est fait à une DLL par un programme.

Lorsqu'un programme appelle une fonction dans une DLL, le système d'exploitation recherche d'abord le nom de la fonction dans la table d'adresses d'importation du programme et obtient l'adresse de la fonction à partir de l'adresse d'exportation de la DLL Tableau.

Une fois l'adresse de la fonction résolue, le programme peut sauter à l'adresse de la fonction pour y accéder et l'exécuter. L'accrochage DLL consiste à intercepter ce processus et à rediriger l'appel de fonction vers une autre fonction. Il existe plusieurs façons d'implémenter le raccordement DLL. Examinons les techniques les plus couramment utilisées pour l'implémenter.

Cela peut devenir assez technique, donc cela peut aider si vous êtes un utilisateur expérimenté de Windows ou avoir une bonne compréhension des composants internes de Windows.

Accrochage IAT

L'accrochage IAT est une technique efficace largement utilisée par les auteurs de logiciels malveillants pour contourner les mesures de sécurité et échapper à la détection. La table d'adresses d'importation (IAT) est une structure de données qui est chargée dans la mémoire chaque fois qu'un nouveau processus est créé. IAT contient les noms de tous les appels de fonction importés et leurs adresses mémoire.

Lorsqu'un programme appelle une fonction dans la DLL, le nom de la fonction est d'abord recherché dans l'IAT et si le l'adresse mémoire de ladite fonction n'est pas trouvée dans l'IAT alors elle est établie à partir de l'adresse d'exportation de la DLL Tableau.

C'est une structure de données où toutes les fonctions exportées par la DLL sont mappées à leurs adresses mémoire. Dans l'accrochage IAT, un adversaire peut modifier l'IAT d'un processus et remplacer les mappages de fonctions légitimes avec des malveillants perturbant ainsi l'opération prévue et faisant exécuter le programme arbitrairement code.

Voici à quoi ressemble le flux d'attaque général dans le hook IAT :

  1. Un programme effectue un appel de fonction.
  2. L'adresse de la fonction se trouve dans l'IAT.
  3. Depuis que l'IAT a été accroché; l'adresse de la fonction a été modifiée et l'emplacement mémoire d'une fonction malveillante est chargé.
  4. Le programme saute à l'emplacement de la fonction malveillante et un code arbitraire est exécuté.
  5. Enfin, l'appel de fonction d'origine est exécuté.

Crochet en ligne

Le raccordement en ligne est une technique de raccordement de DLL qui consiste à modifier le code source d'une fonction cible afin de diriger son exécution vers une fonction spéciale. Inline Hooking, par opposition à IAT hooking, modifie directement le code de la fonction cible, donnant à l'attaquant un contrôle plus précis sur le comportement de la fonction cible.

Dans le diagramme ci-dessus, observez comment la fonction légitime a été falsifiée pour pointer vers une fonction malveillante. Une fois que toutes les instructions de la fonction malveillante sont exécutées, une instruction de saut est effectuée pour revenir à la fonction légitime afin qu'elle termine son exécution.

Les adversaires utilisent l'accrochage en ligne pour apporter des modifications durables à un programme, telles que la modification des paramètres ou de la valeur de retour d'une fonction.

Détours Microsoft

Microsoft Research a développé un package de connexion DLL interne, Detours. Il permet aux programmeurs de suivre et de modifier les appels de fonction effectués par un programme. Les détours peuvent être utilisés pour une variété de tâches, y compris, mais sans s'y limiter: l'instrumentation, les tests et la correction de bogues.

Les adversaires utilisent Detours pour mener des attaques par injection et accrochage DLL, et les développeurs l'utilisent fréquemment pour étendre les fonctionnalités de leurs applications. Vous pouvez en savoir plus sur le forfait Détours sur le dépôt officiel GitHub.

Vous savez maintenant comment fonctionne le hook DLL

L'accrochage DLL est une technique sophistiquée qui, lorsqu'elle est utilisée pour les bonnes raisons, peut augmenter les capacités de votre application ou vous aider à déboguer et optimiser le logiciel. Malheureusement, l'accrochage est plus souvent utilisé comme une technique de confrontation plutôt que comme une technique de développement. Il est donc important que vous adoptiez et respectiez les meilleures pratiques de sécurité garantissant que vos applications sont sûres et exemptes d'attaques telles que le hooking et l'injection.