DLL Sideloading : définition
Le DLL Sideloading est une technique offensive employée pour des attaques sophistiquées comme pour du cybercrime. Elle consiste à exploiter un programme ou binaire légitime pour le forcer à charger une bibliothèque malveillante.
En effet, les attaquants peuvent forcer un binaire à charger une bibliothèque malveillante au lieu de la version légitime, généralement en plaçant cette bibliothèque malveillante dans le même dossier que le binaire visé.
Ce binaire étant très souvent signé numériquement ou reconnu comme sûr, les attaquants s'appuient ainsi sur un programme de confiance qui exécute du code malveillant, une technique efficace pour contourner les solutions de sécurité.
Aussi, pour détecter les tentatives de piratage des DLL, il faut pouvoir parer à un nombre extrêmement élevé d’éventualités puisqu’il existe une quantité colossale de combinaisons possibles entre les exécutables vulnérables et les bibliothèques auxquelles ils font appel, et les attaquants en cherchent continuellement de nouvelles.
Nous verrons un peu plus loin comment l’analyse des comportements permet de répondre à cet enjeu.
Mais commençons par détailler davantage les différents types d’attaque impliquant des DLL.
Les attaques par DLL hijacking en pratique
Parmi les techniques recensées par MITRE, les attaques par piratage de DLL sont listées sous la dénomination “Hijack Execution Flow”.
Les DLL peuvent être utilisées simultanément par plusieurs programmes et ne sont pas intrinsèquement malveillantes. En revanche, elles peuvent être utilisées par des pirates à des fins de persistance, d’élévation des privilèges, ou encore de contournement des défenses.
En résumé, les attaquants peuvent utiliser des bibliothèques pour mettre en œuvre les techniques suivantes :
- DLL Sideloading
- DLL Search Order Hijacking
- DLL Redirection
- Phantom DLL Hijacking
- DLL Substitution
Pour éviter d’être repéré par les antivirus ou autres solutions de cybersécurité avancées telles que les EDR, le code malveillant peut être inclus dans une DLL compressée ou chiffrée, ou même placé dans un autre fichier chiffré qui est ensuite déchiffré dynamiquement par la DLL malveillante. Le code est alors plus difficile à détecter.
Pour mener une attaque par DLL Sideloading, un pirate suit généralement ces étapes :
- Accès initial (via une vulnérabilité, des accès compromis, une campagne de phishing, un trojan, un tiers...),
- Dépôt d'un exécutable vulnérable dans un dossier, et dépôt dans le même dossier d'une DLL malveillante que cet exécutable va charger,
- Lancement de l'exécutable vulnérable qui va charger la DLL malveillante,
- Exécution de la charge utile présente dans la DLL.
Comme nous l’avons évoqué un peu plus tôt, prévoir toutes les combinaisons programme-.dll ainsi que la création et la maintenance des règles de blocage pour faire face à toutes ces combinaisons n’est pas réaliste. Pour se prémunir contre les attaques par DLL Sideloading, la réponse se trouve du côté de l’analyse des comportements.
DLL Sideloading : bloquer automatiquement les comportements malveillants
Les activités précédant le chargement d’une bibliothèque sont une mine d’information pour détecter les attaques : écriture, signature, auteur, localisation et contenu des dossiers... sont autant d’éléments qui permettent d’anticiper les menaces qui visent un système d’information.
Par ailleurs, les attaques par DLL Sideloading suivent souvent le même mode opératoire, ce qui rend la détection et la catégorisation des comportements plus facile pour un EDR qui est capable d’associer l’enchaînement des étapes à ce type de menace pour générer des alertes.
A cette fin, le moteur Sidewatch d’HarfangLab analyse les nombreux événements qui précèdent le chargement d’une DLL :
- Fichiers présents dans un dossier lié à un programme et leurs signatures,
- Emplacement,
- Date depuis laquelle ils sont présents sur le disque,
- Qui exécute ces programmes...
Dès l’instant où une DLL non signée est chargée, toutes ces données peuvent être corrélées pour définir le caractère malveillant de la DLL chargée, et signaler une tentative d’attaque le cas échéant. Le moteur est même capable de donner des précisions sur le mode opératoire de l'attaquant en catégorisant le type d'attaque.
Dans ce cas, l’EDR génère un “Security Event”, bloque le processus en question et place la DLL en quarantaine.
Cas pratique avec une attaque d’APT29 par DLL Sideloading
Prenons l’exemple d’une attaque réalisée par le groupe Cozy Bear :
- Les attaquants conçoivent une campagne de phishing qui vise à cibler des destinataires avec un fichier ISO se faisant passer pour contenant un fichier PDF.
- En réalité, le PDF est un fichier LNK (raccourci) qui lance un exécutable vulnérable placé à côté d’une DLL à “sideloader” dans le même dossier.
- L’exécutable se lance, une fausse page affiche un faux PDF pour l’utilisateur et la DLL est chargée par le processus lancé.
Dans ce cas, Sidewatch est capable d’identifier le caractère suspect des actions :
- Des fichiers écrits sur disque dans une image ISO et avec un binaire signé,
- Et une DLL non signée dans le même dossier.
La corrélation des informations permet de générer un événement de sécurité
et de catégoriser l’action comme étant un DLL Sideloading packagé en ISO
Pour plus d’infos sur Sidewatch, notre moteur de détection
des attaques par DLL Sideloading :