Exploitation des flux de données alternatifs
Bon je préviens, ne vous fiez pas au titre. Ce post n’a rien de sorcier. Le flux de données alternatifs, malgré son nom barbare, est une chose vraiment simple.
Tout d’abord qu’est qu’un “flux de donnés alternatif” ? (ou ADS = alternative data stream pour les anglophones)
Très en gros, ce terme évoque la possibilité d’attacher des données à n’importe quel fichier (les données attachées constituent le stream ou flux en français). On peut par exemple attacher des données à un txt, mais comme vous le savez peut-être, tout étant fichier, aussi à des exe et des dossiers. Il faut savoir que ce concept a été introduit avec le système de fichiers NTFS ((amis) windowsiens, prenez garde!). C’est donc relativement récent, et bien que les applications soient potentiellement importantes, les malwares utilisant les ADS sont peu répandus. Bien mais dans la pratique, comment faire?
Sous Windows, un ADS est défini comme suit C:\nomDuChemin\fichier:nomDuStream
Par exemple, on va éditer un stream avec notre bon vieux bloc notes. Créons ensemble un petit fichier txt de test à la racine du disque. Ici on l’appellera test.txt
C:\test.txt Ce fichier est vide. Donc il fait 0 octets (vérifiez grâce au bouton droit ==> propriétés)
Bien, maintenant, attachons-y des données. Pour ce faire:
Demarrer ==> Executer
On exécutera la ligne suivante:
notepad.exe C:\test.txt:StreamName.txt
Voulez vous créer le fichier? Oui
On vien de créer notre premier fichier de flux de données. Remplissons-le avec n’importe quoi. Par exemple “Ceci est une jolie tortue <3″ Puis on sauvegarde et on ferme le bloc notes.
Observons notre test.txt. Il fait toujours… 0 octets. par contre la date de modification a changé. Et si on essaye de l’ouvrir le fichier est toujours vide. En fait, notre phrase se trouve dans StreamName.txt qui est invisible à l’utilisateur et qui n’est pas pris en compte dans le calcul de l’espace disque de test.txt. Normal, ce n’est pas le même fichier.
Donc notre “J’aime les tortues <3″ rangée dans StreamName.txt est invisible, mais rassurez vous, rien n’a disparu. Refaites un exécuter et retapez la ligne précédente:
notepad.exe C:\test.txt:StreamName.txt
Et oh miracle, nous retrouvons notre superbe flux de données “J’aime les tortues <3″
C’est bien joli tout-ça me direz vous, mais quel intérêt?
1 - Pour l’utilisateur non averti, l’ADS est totalement invisible. (donc on peut y cacher n’importe quoi)
2 - On peut y cacher une très grosse quantité de données et ce de façon totalement transparente. (par exemple des fichiers sensibles que l’on stoke ou le log d’un keylogger ou un binaire ou quoi que ce soit d’autre) En effet, ni l’explorateur ni la commande dir n’afficheront quoi que ce soit.
3 - C’est très facile à faire, et en plus c’est sympa.
4 - Si on transfert le fichier d’origine sur un FAT, on perd l’ADS. Donc on peut y cacher des fichiers sensibles pour éviter une copie.
5 - On peut exécuter un flux de données alternatif via des méthodes variées.
6 - On peut attacher autant d’ADS que l’on veut à un fichier
7 - Pour les vicieux, on peut attacher un ADS à un dossier ou à un fichier ET un dossier.
Alors je vous avait bien dit que c’était pas compliqué.
Utilisations malveillantes de l’ADS
Comme un flux de données peut contenir n’importe quoi, on pourrait très bien imaginer par exemple un virus qui remplace un exe original par un exe viral et qui attache l’original à l’ADS. Puis l’exe viral est renommé comme l’original. Résultat: quand l’utilisateur croît lancer son programme original, il lance le virus qui à son tour balance l’exe original. Le pauvre utilisateur est berné. Ou alors on peut aussi imaginer un virus (ou une portion de son code) qui se cacherait dans l’ADS etc.
Pour illustrer les possibilités de l’ADS, on va faire un petit script.
Que diriez-vous si on remplaçait notepad.exe par un autre exécutable? Par exemple, aller, soyons fou, par paint !
Pour ce faire on va utiliser un .batch qui va modifier le registre (pour ceux qui ne savent pas ce qu’est le registre ==> Google)
(Faites une sauvegarde de votre registre avant d’exécuter ce .bat)
Code: | |
echo “Ceci est un script trivial qui montre comment utiliser les ADS” Type %SystemRoot%\system32\mspaint.exe>C:\test.txt:mspaint.exe echo “On attache mspaint.exe a notre ADS” Type %SystemRoot%\system32\notepad.exe>C:\test.txt:notepad.exe echo “On fait de même pour notepad.exe” reg delete HKCR\txtfile\shell\open\command /f echo “on efface la clé correspondant au programme par défaut a utiliser pour les fichiers textes a savoir le notepad.exe” reg add HKCR\txtfile\shell\open\command /ve /t REG_EXPAND_SZ /d c:\test.txt:mspaint.exe echo “On utilisera a présent l’exe dans le stream pour ouvrir les fichiers textes.” echo “Voila la bidouille est terminée. Ouvrez un fichier texte et paint s’exécutera. Appuyez sur une touche pour restaurer le registre.” |
Je vous l’accorde, ce script est débile et les manipulations de registres sont détectées par n’importe quel antivirus. Mais je vous ai montré qu’il était possible d’exécuter un binaire quelconque et de le cacher facilement avec 4 pauvres lignes de batch…
En gros comme on peut cacher n’importe quoi, toutes les possibilités sont envisageables.
La solution pour lutter contre ce genre de menaces? Scanner les fichiers un à un en utilisant des programmes spécialisés.
Voici un aperçu très bref des possibilités qu’offrent les ADS. J’espère ne pas avoir été trop compliqué. A plus pour de nouvelles aventures!
La tortue.
Tags: données, exploitation, flux