← Retour au blog

Alternate Data Streams : les attributs $DATA cachés de NTFS

· Lecture 2 min

NTFS autorise un fichier à posséder plus d'un attribut $DATA. Le premier n'a pas de nom et contient le contenu principal du fichier. Tout $DATA supplémentaire est nommé et agit comme un flux parallèle attaché au même fichier. Ces flux supplémentaires sont les Alternate Data Streams (ADS).

La syntaxe

On lit et écrit un ADS depuis PowerShell ou cmd :

echo texte cache > notes.txt:secret
type notes.txt:secret

notes.txt apparaît vide dans l'Explorateur et dans dir — son $DATA principal pèse zéro octet. Mais le flux nommé secret contient bel et bien votre texte. Du point de vue de l'utilisateur, le fichier se comporte normalement ; le flux alternatif voyage avec lui.

Utilisations légitimes

Windows utilise lui-même les ADS pour sa propre comptabilité. Le plus courant est Zone.Identifier, attaché à tout fichier téléchargé depuis Internet. Il contient un petit bloc de texte décrivant l'URL d'origine et la zone de sécurité. C'est ce qui déclenche l'avertissement « ce fichier vient d'un autre ordinateur ».

D'autres usages légitimes :

  • $KSP pour les fichiers de layout clavier
  • OECustomProperty pour les pièces jointes Outlook
  • Divers flux de miniatures et d'index de recherche

Pourquoi les attaquants aiment les ADS

Tout ce qui vit hors du flux principal a tendance à être invisible pour :

  • les vues de dossiers qui n'affichent que la taille du fichier (taille reportée du flux non nommé) ;
  • les antivirus qui ne scannent que le flux par défaut ;
  • une revue manuelle d'analyste qui n'a pas demandé explicitement les flux.

Un schéma classique consiste à déposer une charge utile dans document-legit.docx:payload.exe et à la lancer via WMI. Le fichier ressemble à un document Word et le reste tant qu'on ne pose pas les bonnes questions.

Comment les détecter

dir /R liste chaque flux de chaque fichier d'un répertoire. La sortie montre la taille du flux à côté du nom du flux :

1 234 567 document-legit.docx
   45 056 document-legit.docx:payload.exe:$DATA

L'équivalent PowerShell, plus lisible :

Get-Item document-legit.docx -Stream *

Pourquoi $MFT est la meilleure lunette

L'énumération fichier par fichier peut manquer des flux sur des fichiers auxquels on n'avait pas pensé. $MFT n'a pas ce problème : chaque attribut est dans l'enregistrement. Parcourir le MFT et lister les attributs $DATA de chaque entrée — nommés et non nommés — donne en une passe l'inventaire complet de tous les flux du volume.

En triage, c'est la différence entre « il faudra penser à vérifier les ADS » et « je les ai déjà tous vérifiés ».

Ressources externes