Piratage de DLL : définition et prévention

Découvrez comment l’authentification multifacteur (MFA) adaptative combat les brèches de données, la compromission des mots de passe faibles et les attaques de phishing.

Le piratage de DLL consiste à insérer du code malveillant dans une application pour infecter le chargement des DLL (Dynamic Link Library). L’un des plus grands piratages dans l’histoire des agences fédérales américaines ayant mis à mal plusieurs départements du gouvernement américain et sans doute lié à un groupe cybercriminel russe impliquait le piratage de DLL. Le piratage de DLL exploite les plates-formes Windows et peut compromettre l’ensemble du système avec un seul fichier infecté. Des pratiques de codage sécurisées peuvent permettre d’éviter ce type d’attaque. Il est également utile de savoir comment détecter et tester le piratage de DLL pour barrer la route aux menaces. Un réseau de sécurité robuste et des collaborateurs avertis permettent de tenir les cybercriminels à l’écart de votre système.

Qu’est-ce que le piratage de DLL ?

Lorsque les attaquants introduisent un fichier infecté sur votre ordinateur, ce fichier est exécuté au lancement de l’application vulnérable au piratage de DLL. Cette cyberattaque injecte un fichier infecté dans les paramètres de recherche d’une application. Un utilisateur qui tente ensuite de charger un fichier à partir de ce répertoire chargera le fichier DLL infecté. Ce fichier infecté exécute son code malveillant lors du chargement de l’application. Les fichiers DLL sont souvent préchargés sur un ordinateur. Comme de nombreuses applications utilisant des DLL se chargent automatiquement au démarrage, le piratage de DLL peut compromettre tout l’ordinateur et permettre au hacker d’accéder à ce dernier à chaque chargement du fichier contenant le code malveillant.

Que sont les fichiers DLL ?

Les fichiers DLL n’existent que sur les systèmes d’exploitation Windows et détiennent les ressources requises au bon fonctionnement d’une application. Comme l’explique Microsoft, la plupart des fonctionnalités d’un système d’exploitation Windows sont fournies par les DLL. Les fichiers DLL sont généralement ouverts au chargement d’une application. Ils servent à exécuter des programmes et utilisent efficacement l’espace du disque dur. Par ailleurs, les fichiers DLL permettent souvent d’exécuter plusieurs programmes. En d’autres termes, une seule cyberattaque impliquant le piratage de DLL peut potentiellement affecter et compromettre plusieurs programmes avec un seul fichier infecté.

Comment fonctionne le piratage de DLL

Les applications Windows utilisent des protocoles de recherche de DLL pour s’exécuter correctement. En plaçant une DLL contenant une charge utile malveillante dans le répertoire de l’application ciblée, celle-ci peut être amenée à charger le fichier infecté au lieu du fichier légitime. L’ordre de recherche des DLL des applications Microsoft est documenté, et donc connu et exploitable. Pour que le piratage de DLL soit efficace, l’attaquant doit faire en sorte que l’application ciblée recherche le fichier infecté avant le fichier DLL légitime, puisque l’application exécute le premier fichier qu’elle trouve au démarrage. Pour ce faire, plusieurs méthodes sont possibles :

  • Un fichier DLL cheval de Troie peut être injecté dans un répertoire qui sera parcouru avant celui de la DLL légitime.
  • Le préchargement de DLL injecte à l’endroit opportun dans le système une DLL infectée au nom identique à celui d’une DLL légitime. Si le chemin d’accès à cette dernière n’est pas configuré de manière suffisamment précise dans une application, c’est la DLL malveillante qui sera chargée en premier.
  • La redirection de DLL peut modifier directement l’ordre de recherche des DLL pour forcer le programme à exécuter la DLL malveillante au lieu de la DLL légitime.
  • Les fichiers DLL infectés peuvent être injectés via des attaques de la chaîne logistique, de phishing ou d’ingénierie sociale. Plus le fichier occupe une place élevée en termes de privilèges, plus le cybercriminel bénéficiera d’un accès étendu au système.

En l’absence d’un chemin complet spécifié pour les DLL associées, les applications Windows utilisent par défaut des protocoles de recherche de DLL spécifiques qui accéderont en premier au répertoire à partir duquel l’application est chargée. Lors d’un piratage de DLL, le cybercriminel dépose un fichier DLL infecté dans cet emplacement qui primera sur le répertoire système lors de la recherche. Cette technique est appelée piratage de l’ordre de recherche des DLL. Les fichiers DLL malveillants utilisent souvent une signature numérique qui imite l’application ciblée, pour attester de l’authenticité du fichier, empêcher la détection et permettre le transfert des fichiers DLL infectés, qui peuvent alors progresser au sein d’une chaîne logistique.

Comment identifier un piratage de DLL

Un programme Windows appelé Process Explorer peut identifier une tentative de piratage de DLL. À cette fin, il affiche en temps réel tous les fichiers système en cours de chargement. Avec les filtres adaptés, les utilisateurs peuvent identifier les fichiers DLL qui n’ont pas leur place dans le système. Procédez comme suit :

  1. Installez et chargez Process Explorer.
  2. Recherchez l’application ciblée par l’attaque présumée.
  3. Appuyez sur Ctrl + L et appliquez un filtre qui n’affiche que les fichiers actifs dont le chemin se termine par .dll en cliquant sur Add (Ajouter) puis sur Apply (Appliquer).
  4. Appuyez sur Ctrl + L et appliquez un filtre pour « Directory : Name Not Found » en définissant les conditions « Result : Name Not Found », puis cliquez sur Add et ensuite sur Apply pour afficher les fichiers qui sont chargés en dehors du répertoire système.
  5. Appuyez sur Ctrl + L pour appliquer un filtre supplémentaire qui n’affiche que les fichiers DLL présents dans le répertoire de l’application en définissant les conditions suivantes : « Path is [adresse du chemin d’accès] », puis cliquez sur Add et ensuite sur Apply.

Comment éviter un piratage de DLL

Pour empêcher le piratage de DLL, la meilleure méthode consiste, au développement de l’application, à spécifier l’emplacement exact de tous les fichiers DLL afin d’empêcher Windows d’utiliser le protocole de recherche de DLL par défaut. Il est également important d’avoir un logiciel antivirus à jour. Certes, les tentatives d’injection de DLL peuvent parfois échapper à la détection, mais un bon antivirus reste une ligne de défense essentielle qui peut au moins bloquer certaines tentatives de piratage. Soyez attentif à votre cybersécurité. Vérifiez et analysez régulièrement votre réseau et votre écosystème pour identifier les vulnérabilités. Un piratage de DLL Windows n’est possible que par l’introduction du fichier infecté dans l’écosystème, souvent due à l’intervention accidentelle d’un collaborateur qui active un malware. Sensibiliser les collaborateurs aux signes précurseurs d’une attaque de phishing ou de social engineering peut empêcher l’attaque de progresser. Il est important de respecter quelques bonnes pratiques de sécurité :

  • Établissez une politique de sécurité des informations et maintenez-la à jour.
  • Signalez tout e-mail suspect à l’équipe sécurité avant de l’ouvrir ou d’interagir avec le message.
  • Activez l’authentification multifacteur (MFA) pour les connexions.
  • Implémentez une solution de gestion des risques.

Exemples de procédure

Pour lancer une telle attaque, les cybercriminels recherchent des vulnérabilités DLL, par exemple des DLL manquantes au sein des applications. La recherche de DLL respecte généralement l’ordre suivant :

  1. Recherche du répertoire à partir duquel l’application est chargée.
  2. Recherche du répertoire actif.
  3. Recherche du répertoire système.
  4. Recherche du répertoire Windows.
  5. Recherche des répertoires situés dans l’environnement PATH.

Un piratage de DLL place ensuite le fichier malveillant dans l’un de ces répertoires, avant le fichier DLL légitime. Une autre méthode consiste à utiliser les DLL AppInit pour créer des DLL personnalisées qui peuvent être chargées pratiquement partout de la façon suivante :

  1. L’attaquant génère une DLL malveillante.
  2. Il définit le paramètre LoadAppInit_DLLs sur « true ».
  3. Il pointe la DLL malveillante vers AppInit.
  4. Il exécute le processus pour injecter la DLL.

Il est également possible de placer une DLL cheval de Troie à l’aide d’un transfert de DLL, au cours duquel la DLL infectée joue le rôle d’intermédiaire. La méthode ressemble à ceci :

  1. La DLL et ses fonctions sont analysées.
  2. Les fonctions à intercepter et modifier sont identifiées.
  3. Ces fonctions sont implémentées dans une DLL infectée.
  4. Les fonctions restantes sont transférées à la DLL d’origine.
  5. Cette dernière est renommée.
  6. Les importations sont transférées à la DLL renommée.
  7. La DLL d’origine est remplacée par la DLL infectée.
  8. La DLL infectée est renommée avec le nom de la DLL d’origine.
     

Exemples de piratage de DLL connus

Le piratage de DLL existe depuis de nombreuses années et continue de représenter une menace de cybersécurité pour les systèmes d’exploitation Windows. À titre d’exemple, citons les menaces suivantes :

  • APT41 : utilise le piratage de l’ordre de recherche
  • FinFisher : certaines variantes utilisent le piratage de l’ordre de recherche des DLL
  • Chaes : utilise le piratage de l’ordre de recherche pour charger des charges utiles de DLL malveillantes
  • Astaroth : utilise le piratage de l’ordre de recherche pour s’exécuter
  • BOOSTWRITE : exploite le chargement d’un fichier .dll légitime
  • BackdoorDipolomacy : utilise le piratage de l’ordre de recherche
  • HinKit : emploie le piratage de l’ordre de recherche avec un mécanisme de persistance
  • Crutch : maintient le piratage de l’ordre de recherche au moyen de moteurs de recherche
  • Downdelph : élève les privilèges au moyen du piratage de l’ordre de recherche de fichiers .exe
  • InvisiMole : le piratage de l’ordre de recherche lance la DLL infectée au démarrage
  • HTTPBrowser : interfère avec l’ordre de chargement des DLL
  • Ramsey : pirate les applications Windows obsolètes
  • menuPass : utilise le piratage de l’ordre de recherche des DLL
  • ThreatGroup-3390 : utilise le piratage de l’ordre de recherche pour distribuer une charge utile
  • Whitefly : utilise le piratage de l’ordre de recherche pour infecter des DLL
  • RTM : effectue un piratage de l’ordre de recherche pour interférer avec TeamViewer
  • Tonto team : interfère avec un fichier exécutable Microsoft légitime pour charger une DLL malveillante
  • Melcoz : utilise le piratage de DLL pour contourner les contrôles de sécurité

Atténuation des risques

Pour atténuer les risques posés par le piratage de DLL, il est possible de recourir aux méthodes suivantes :

  • Audit : des outils d’audit tels que PowerUp peuvent détecter et neutraliser les tentatives de piratage de l’ordre des DLL.
  • Restriction du chargement de DLL : interdisez le chargement des DLL distantes et activez le mode de recherche sécurisé des DLL, qui force le système à appliquer plus de restrictions pour rechercher des fichiers DLL.
  • Prévention de l’exécution : utilisez des solutions de contrôle des applications pour identifier et bloquer les logiciels potentiellement malveillants exécutés en piratant l’ordre de recherche des DLL.

Comment tester le système pour identifier un piratage de DLL

Les méthodes utilisées pour détecter le piratage de DLL sont similaires aux méthodes de détection à l’aide de programmes tels que Windows Process Explorer. Pour vérifier la présence de fichiers DLL piratés, appliquez un filtre pour isoler les fichiers .exe et .dll files entraînant l’affichage de « Name Not Found ». Cela indique généralement une tentative de piratage de DLL. Un autre produit appelé DLLSpy utilise trois méthodes de test différentes pour détecter le piratage de DLL : statique, dynamique et récursif. Un test statique localise tous les fichiers .dll ou avec un chemin .dll dans le processus d’exécution d’une application. Un test dynamique analyse tous les modules pour déterminer s’il existe une autorisation en écriture dans les emplacements des DLL et vérifier qu’elles n’ont pas été remplacées. Le moteur récursif analyse tous les processus DLL précédemment examinés pour éventuellement trouver d’autres DLL ayant été chargées et vérifier leurs vulnérabilités.

Références

Russian Hackers Broke Into Federal Agencies, U.S. Officials Suspect. Mai 2021. The New York Times.

What Is a DLL? Septembre 2021. Microsoft.

Process Explorer v16.43. Août 2021. Microsoft.

AppInit DLLs and Secure Boot. Janvier 2021. Microsoft.

PowerUp: A Usage Guide. Juin 2014. Harmj0y.

Cyberark/DLLSpy. 2021. GitHub, Inc.