L’attaque GhostTree utilisait des jonctions récursives Windows pour dissimuler des programmes malveillants

L'attaque GhostTree utilisait des jonctions récursives Windows pour dissimuler des programmes malveillants

Les jonctions NTFS et les liens symboliques sont souvent perçus comme des fonctions marginales du système de fichiers. Elles autorisent un répertoire à en désigner un autre, comme un raccourci que le système d’exploitation considère comme réel. Leur existence répond à des besoins de compatibilité descendante ou de gestion de stockage, des sujets qui préoccupent peu les centres d’opérations de sécurité. Elles possèdent pourtant une caractéristique qui les rend intéressantes pour un attaquant : n’importe quel utilisateur peut les créer.

Aucun privilège d’administrateur n’est requis, seule une permission d’écriture sur le dossier cible est nécessaire.

Nous avons découvert qu’en orientant une jonction vers son propre répertoire parent, un attaquant peut générer des boucles récursives qui produisent un nombre virtuellement infini de chemins de fichiers. Les outils qui tentent d’analyser le répertoire de manière récursive, y compris les produits EDR, peuvent suivre cette boucle et ne jamais terminer leur travail.

Les fichiers malveillants présents dans le même dossier échappent alors à l’examen, ce qui constitue une technique que nous avons nommée GhostTree.

Fonctionnement des jonctions NTFS

Les chemins de fichiers sous Windows sont une composante fondamentale du système d’exploitation, mais ils présentent des complexités. Alors que la majorité des utilisateurs interagissent avec des structures de dossiers simples, le système de fichiers NTFS intègre des capacités avancées comme les jonctions et les liens symboliques.

Ces fonctionnalités remplissent des objectifs légitimes, comme la redirection de répertoires, le maintien de la compatibilité avec des applications anciennes qui exigent des fichiers à des emplacements spécifiques, ou la réorganisation de fichiers sans les déplacer physiquement.

Une jonction est un type de point de réanalyse NTFS qui redirige un répertoire vers un autre. Sa création exige seulement des permissions d’écriture et une simple commande dans l’invite de commandes :

mklink /J C:LienVersDossier C:DossierCible

Cela crée une jonction nommée « LienVersDossier » qui pointe de manière transparente vers « DossierCible ». Toute application qui accède aux fichiers via la jonction visualise le contenu du répertoire cible comme s’il était local.

Une contrainte est ici importante. Les systèmes Windows classiques imposent une longueur maximale de chemin de 260 caractères, une limite héritée de logiciels anciens et de la conception du système de fichiers.

Il est techniquement possible d’étendre cette limite jusqu’à 32 767 caractères via une clé de registre, mais de nombreuses applications et utilitaires ne sont pas conçus pour gérer des chemins au-delà de 260 caractères.

Même si NTFS prend en charge des chemins plus longs, l’usage pratique reste restreint par les logiciels existants. Cette limite détermine la profondeur que peuvent atteindre les boucles récursives et le nombre de chemins uniques que GhostTree peut produire.

GhostBranch

GhostBranch est la plus simple des deux techniques. Tout utilisateur peut créer une jonction de dossier, en définissant à la fois son nom et sa destination. Considérez cette structure de dossiers :

C:Parentprogram.exe

Exécutez la commande :

mklink /J C:ParentEnfant C:Parent

Cela crée une boucle logique en pointant un dossier enfant vers son dossier parent. Le répertoire enfant contient désormais tout ce que contient le parent, y compris lui-même. Le résultat est un nombre illimité de chemins valides vers le même fichier :

C:ParentEnfantProgram.exe
C:ParentEnfantEnfantProgram.exe
C:ParentEnfantEnfantEnfantEnfantProgram.exe

A cause de la boucle, vous pouvez ajouter de multiples dossiers « Enfant » au chemin, et il reste valide. Chacun de ces chemins conduit au même exécutable.

Arbre Fantôme

GhostTree

GhostTree s’appuie sur le concept de GhostBranch en créant plusieurs dossiers enfants au lieu d’un seul. Par exemple, vous pouvez créer deux dossiers enfants :

mklink /J C:ParentEnfant1 C:Parent
mklink /J C:ParentEnfant2 C:Parent

Désormais, chaque niveau dans le chemin peut passer par Enfant1 ou Enfant2, et les deux bouclent vers le parent. Cela autorise divers chemins :

C:ParentEnfant1Program.exe
C:ParentEnfant2Program.exe
C:ParentEnfant1Enfant1Program.exe
C:ParentEnfant1Enfant2Program.exe

Calculs de chemins

Calculs de chemins

GhostBranch et GhostTree produisent tous deux des chemins qui peuvent s’étendre jusqu’à la longueur maximale autorisée par Windows. La différence réside dans la diversité des chemins, un domaine où le dossier enfant supplémentaire de GhostTree change considérablement la donne.

GhostBranch

Sous Windows, la longueur de chemin traditionnelle maximale est de 260 caractères. Pour maximiser le nombre de répertoires, on peut créer des dossiers à une seule lettre (par exemple, « P ») directement sous le lecteur C: et utiliser un exécutable nommé 1.exe.

Les exemples de chemins incluent :

C:P1.exe
C:PP1.exe
C:PPP...1.exe

Cette configuration permet environ 126 structures de répertoires uniques à cause des limitations de longueur de chemin.

GhostTree

La méthode GhostTree introduit deux dossiers parents, « P » et « B », contrairement à la structure à dossier unique utilisée précédemment. Les exemples incluent :

C:B1.exe
C:PB1.exe
C:PBPB...1.exe

Alors que la profondeur maximale reste d’environ 126 dossiers, chaque niveau peut être nommé « P » ou « B », ce qui crée effectivement une structure semblable à un arbre binaire. Avec cette configuration, chaque nœud représente un chemin distinct, et le nombre total de nœuds possibles est calculé ainsi :

2^126 ≈ 8,5 × 10^37

Cette valeur dépasse largement le nombre de grains de sable sur Terre (8,5 × 10^18) ou même le nombre d’atomes dans le corps humain (10^27).

Implications pour la défense

En utilisant seulement deux lignes de code, un utilisateur peut générer une infinité de chemins valides, ce qui rend impossible l’analyse récursive des répertoires parents avec la commande dir. La même logique s’applique aux produits EDR qui scrutent les dossiers à la recherche de fichiers malveillants. Un attaquant place un logiciel malveillant dans le répertoire parent, met en place la structure GhostTree, et le dossier qui le contient devient pratiquement impossible à analyser. Le scan se bloque. Les fichiers malveillants ne sont pas examinés.

Nous avons testé cette technique contre Windows Defender et confirmé qu’elle pouvait être utilisée pour contourner les analyses de dossiers.

Youtube video

Nous avons signalé le problème à Microsoft. Le ticket a été clôturé avec l’explication que « le contournement de Defender ne franchit pas une limite de sécurité ». Le problème a néanmoins été corrigé par la suite.

Des techniques comme GhostTree rappellent que l’analyse des terminaux n’est qu’une couche de défense. La surveillance de l’activité du système de fichiers au niveau des données détecte ce que les scanners manquent, y compris la création anormale de jonctions et les structures de répertoires récursives qui ne devraient pas exister dans des opérations normales.