Flux de données alternatifs (ADS)

Application pratique mais basique des ADS dans les environnements CTF et Pentesting

So what are Alternate Data Streams (ADS) ?

C’est une fonctionnalité qui a été ajoutée au système de fichiers de nouvelle technologie également connu sous le nom de système de fichiers NT (NTFS) pour augmenter la comparabilité avec le système de fichiers hiérarchique (HFS) du Macintosh, en termes simples, c’est quelque chose qui a facilité l’utilisation de vos fichiers sur votre Mac (Apple) et votre PC (Windows) à la fois.

Comment cela fonctionne et pourquoi devrais-je m’en préoccuper ?

En général, lorsque vous enregistrez quelque chose dans un fichier un fichier .txt par exemple, vous stockez le contenu de votre fichier(texte ascii) dans un flux de données que windows reconnaît comme le flux par défaut, de sorte que la prochaine fois que vous ouvrez votre fichier, vous accéderez au même flux pour visualiser vos données.

A titre d’exemple

Si je crée un fichier .txt en utilisant Notepad sur mon système Windows et que je l’enregistre dans un fichier (secret.txt) alors chaque fois que je l’ouvrirais, je verrais mes données.

Secret.txt Notepad

Secret.txt Notepad

Mais que faire s’il y a plus de données dans le fichier dont vous n’êtes pas conscient ?

C’est là que les flux de données alternatifs entrent en jeu.

Je vais utiliser cmd.exe (Command Prompt) pour démontrer les exemples afin de faciliter la compréhension de la CLI (Command Line Interface) mais les mêmes résultats peuvent être obtenus en utilisant Power Shell aussi.

Donc, lorsque j’utilise command prompt pour voir le contenu de mon répertoire, je peux voir mon secret.txt et la taille du fichier étant de 33 octets.

dir
instant de commande

instant de commande

Cela ressemble à un fichier normal mais que faire si j’ajoute le /r à ma commande ?

dir /r
Command prompt dir /r

Command prompt dir /r

Nous pouvons maintenant voir un autre fichier dans le même répertoire avec le même préfixe que notre secret créé à l’origine.txt mais avec un suffixe de evil.txt alors que le $DATA nous indique qu’il s’agit d’un flux de type $DATA.

En ajoutant le /r à notre commande, nous pouvons voir que les deux fichiers sont dans le même répertoire mais nous ne pouvons voir que le secret.txt sur notre bureau, nous pouvons également voir la différence de taille de fichier alors que notre fichier secret.txt est toujours de 33 octets notre secret.txt:evil.txt est de 74 ce qui est plus de 2 fois notre secret.txt.

Comparant la sortie des deux commandes.

# First Command
dir# Second Command
dir /r
Commande Prompt dir et dir /r

Commande Prompt dir et dir /r

En cela nous pouvons voir les informations par les deux commandes plus précisément nous sommes capables de voir les changements dans une perspective plus claire.

  • Les deux sorties disent qu’il y a seulement 2 fichiers dans le répertoire et nous donnent la même taille, c’est parce que secret.txt et secret.txt:evil.txt sont le même fichier pas des fichiers différents mais les données sont stockées dans des flux séparés.
  • L’espace total utilisé dans le répertoire et disponible sur le système sont toujours les mêmes.

Voyons le contenu des deux ensemble:

En les voyant tous les deux, nous pouvons voir que le contenu est différent, nous pouvons également voir la différence dans le nom des fichiers, ce qui nous donne l’idée que nous pouvons facilement stocker des informations dans un flux de données alternatif pour des objectifs multiples. Les flux de données suivent une convention d’appellation de base dans le système de fichiers NTFS, qui est FileName:StreamName:StreamType. Cela dit, le nom complet de secret.txt dans le système de fichiers NTFS serait secret.txt::$DATA

Une méthode alternative pour visualiser les deux sans les ouvrir dans le bloc-notes serait.

# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt

.