Accueil Technologie

Qu’est-ce que le crochetage de DLL et comment fonctionne-t-il ?

Lorsque les développeurs ont besoin d’étendre les fonctionnalités d’un programme dont ils ne possèdent pas le code source, ils se tournent souvent vers l’accrochage de DLL. Il s’agit d’un moyen peu orthodoxe de faire faire à un programme quelque chose qu’il n’est pas censé faire.


Le problème, c’est que les pirates utilisent également cette technique pour de mauvaises raisons, comme l’armement d’applications inoffensives ou le piratage de logiciels. Qu’est-ce que le hooking de DLL et comment cela fonctionne-t-il ?

Qu’est-ce qu’une DLL ?

fichiers dll dans Windows

Chaque application dépend de certains fichiers en dehors de son code de base pour fonctionner. Ces fichiers externes contiennent le code et les données dont le programme a besoin pour fonctionner correctement. Lorsque l’un de ces fichiers externes vient à manquer, le programme peut connaître des problèmes de stabilité ou refuser carrément de s’exécuter.

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. Elles fournissent du code réutilisable et des ressources qui peuvent être partagées entre plusieurs applications.

Les fichiers externes sous Windows sont appelés bibliothèques. Il existe deux types de bibliothèques : les bibliothèques dynamiques et les bibliothèques 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. Une DLL est une bibliothèque dynamique.

Qu’est-ce que le crochetage de DLL ?

injection de dll malveillante

Le hooking de DLL est une technique qui consiste à intercepter et à modifier les appels de fonction que les programmes ou les processus adressent à une DLL. Il s’agit essentiellement d’une configuration de type « Man-in-The-Middle » dans laquelle un crochet s’intercale entre un programme et les DLL qu’il appelle. Tous les appels de fonction ou les appels de fonction ciblés sont alors tracés et modifiés.

Voici un exemple de flux de travail d’une attaque par crochetage de DLL :

  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 crochet en utilisant l’une des nombreuses techniques d’implémentation telles que le crochet IAT, le crochet inline, le crochet COM, etc.
  3. Une exécution de code arbitraire se produit.
  4. L’exécution de l’appel de fonction original peut ou non se produire.
  5. L’attaquant efface ses traces en supprimant le crochet et en annulant toutes les modifications effectuées.

Le hooking de 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 la journalisation) et pour le mal (comme le contournement des mesures de sécurité, le vol de données sensibles, l’exécution de code arbitraire et l’écriture de hacks de jeux vidéo).

Comment fonctionne le crochetage de DLL ?

Avant de plonger dans l’implémentation du hooking de DLL, il est important de clarifier les bases. Prenons un peu de recul 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 dans la table d’adresses d’exportation de la DLL.

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. Le crochetage de DLL consiste à intercepter ce processus et à rediriger l’appel de fonction vers une fonction différente. Il existe plusieurs façons de mettre en œuvre le crochetage de DLL. Examinons les techniques les plus couramment utilisées pour l’implémenter.

Cela peut devenir assez technique, donc il peut être utile que vous soyez un utilisateur expérimenté de Windows ou que vous ayez une bonne compréhension de la structure interne de Windows.

Accrochage de l’IAT

Diagramme d'accrochage de la TAI

Le crochetage de l’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 des 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éé. L’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 l’adresse mémoire de ladite fonction n’est pas trouvée dans l’IAT, elle est établie à partir de la table d’adresses d’exportation de la DLL.

Il s’agit d’une structure de données dans laquelle toutes les fonctions exportées par la DLL sont mises en correspondance avec leurs adresses mémoire. Dans le crochetage de l’IAT, un adversaire peut modifier l’IAT d’un processus et remplacer les mappages de fonctions légitimes par des mappages malveillants, ce qui perturbe le fonctionnement prévu et permet au programme d’exécuter un code arbitraire.

Voici à quoi ressemble le flux général d’une attaque par crochetage d’IAT :

  1. Un programme fait un appel de fonction.
  2. L’adresse de la fonction est située dans l’IAT.
  3. Depuis que l’IAT a été accrochée, 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 original est exécuté.

Accrochage en ligne

crochet en ligne diagramme-2

Le crochetage en ligne est une technique de crochetage de DLL qui consiste à modifier le code source d’une fonction cible afin de diriger son exécution vers une fonction spéciale. Le crochetage en ligne, par opposition au crochetage IAT, modifie directement le code de la fonction cible, ce qui donne à 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é altérée pour pointer vers une fonction malveillante. Une fois que toutes les instructions de la fonction malveillante ont été exécutées, une instruction de saut est exécutée pour revenir à la fonction légitime afin qu’elle termine son exécution.

Les adversaires utilisent le crochetage 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

code cpp implémentant la bibliothèque detours

Microsoft Research a développé un paquetage interne d’accrochage de DLL, Detours. Il permet aux programmeurs de suivre et de modifier les appels de fonction effectués par un programme. Detours peut être utilisé 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 de DLL et par crochetage, et les développeurs l’utilisent fréquemment pour étendre les fonctionnalités de leurs applications. Vous pouvez en savoir plus sur le paquet Detours sur le dépôt officiel GitHub.

Vous savez maintenant comment fonctionne le crochetage de DLL

Le hooking de DLL est une technique sophistiquée qui, lorsqu’elle est utilisée à bon escient, peut augmenter les capacités de votre application ou vous aider à déboguer et à optimiser votre logiciel. Malheureusement, le hooking est plus souvent utilisé comme une technique d’opposition que comme une technique de développement. Il est donc important que vous adoptiez et respectiez les meilleures pratiques en matière de sécurité afin de garantir que vos applications sont sûres et exemptes d’attaques telles que le hooking et l’injection.

Leave your vote

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires

Log In

Forgot password?

Don't have an account? Register

Forgot password?

Enter your account data and we will send you a link to reset your password.

Your password reset link appears to be invalid or expired.

Log in

Privacy Policy

Add to Collection

No Collections

Here you'll find all collections you've created before.

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x

Newsletter

inscrivez vous pour recevoir nos actualités

Actualités, astuces, bons plans et cadeaux !