Piratage de DLL : définition et prévention
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 :
- Installez et chargez Process Explorer.
- Recherchez lâapplication ciblée par lâattaque présumée.
- 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).
- 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.
- 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 :
- Recherche du répertoire à partir duquel lâapplication est chargée.
- Recherche du répertoire actif.
- Recherche du répertoire système.
- Recherche du répertoire Windows.
- 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 :
- Lâattaquant génère une DLL malveillante.
- Il définit le paramètre LoadAppInit_DLLs sur « true ».
- Il pointe la DLL malveillante vers AppInit.
- 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 :
- La DLL et ses fonctions sont analysées.
- Les fonctions à intercepter et modifier sont identifiées.
- Ces fonctions sont implémentées dans une DLL infectée.
- Les fonctions restantes sont transférées à la DLL dâorigine.
- Cette dernière est renommée.
- Les importations sont transférées à la DLL renommée.
- La DLL dâorigine est remplacée par la DLL infectée.
- 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.
Â