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 fonctionne-t-il ?
Qu’est-ce qu’une DLL ?
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 avoir 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, fournissant 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 ?
Le crochetage 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 :
- L’attaquant analyse les appels de fonction effectués par le programme et les fichiers DLL dont il dépend.
- L’attaquant crée un crochet en utilisant l’une des nombreuses techniques de mise en œuvre telles que le crochet IAT, le crochet inline, le crochet COM, etc.
- L’exécution de code arbitraire se produit.
- L’exécution de l’appel de fonction original peut ou non se produire.
- 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) ou 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 la mise en œuvre du crochetage de DLL, il est important de clarifier les principes de base. 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 que l’adresse de la fonction est 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.
Cela peut devenir assez technique, il peut donc ê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
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 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éé. 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 déroulement général d’une attaque par crochetage d’IAT :
- Un programme fait un appel de fonction.
- L’adresse de la fonction est située dans l’IAT.
- 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é.
- Le programme saute à l’emplacement de la fonction malveillante et un code arbitraire est exécuté.
- Enfin, l’appel de fonction original est exécuté.
Accrochage en ligne
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 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 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
Microsoft Research a mis au point un logiciel 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. Pour en savoir plus sur le paquet Detours, consultez la page 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 pour les bonnes raisons, 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.
S’abonner à notre lettre d’information
Comment fonctionne l’accrochage de DLL ?
L’application chargée (le formateur) accroche l’application cible et écoute les frappes associées à la fonctionnalité des touches de raccourci. En général, elle injecte en même temps une DLL dans l’application avec son API de porte dérobée.
Qu’est-ce qu’une DLL hook ?
Le hooking est une technique permettant de modifier le comportement d’un système d’exploitation ou d’une application en interceptant les appels de fonction de l’API. Le code qui gère ces interceptions est appelé procédure d’accrochage. Une procédure de crochet peut agir sur chaque événement qu’elle reçoit, puis modifier ou rejeter l’événement.
Comment fonctionne une DLL ?
Une DLL est une bibliothèque qui contient du code et des données pouvant être utilisés par plusieurs programmes en même temps. Par exemple, dans les systèmes d’exploitation Windows, la DLL Comdlg32 exécute des fonctions communes liées aux boîtes de dialogue. Chaque programme peut utiliser la fonctionnalité contenue dans cette DLL pour mettre en œuvre une boîte de dialogue Ouvrir.
Comment fonctionne le détournement de DLL ?
Le détournement de DLL est une cyberattaque qui permet à un attaquant d’exécuter un code malveillant en remplaçant des fichiers DLL légitimes par des fichiers malveillants. Cette attaque est difficile à détecter et à prévenir car elle implique souvent l’utilisation de fichiers et de processus légitimes.