Flux de données alternatifs en NTFS ou comment masquer un bloc-notes. Que sont les données alternatives et comment les utiliser

Les systèmes d'exploitation Windows sont dotés de deux fonctionnalités de masquage de données peu connues : les flux de données NTFS (également appelés flux de données alternatifs) et l'énumération des ressources par énumération basée sur l'accès (ABE). Les flux de données alternatifs offrent la possibilité d'ajouter des informations cachées à un fichier, telles que des informations sur le fichier. Vous n'aurez probablement pas besoin d'utiliser des flux de données cachés, mais les attaquants pourraient utiliser cette technologie contre vous, vous devez donc en être conscient et savoir comment elle pourrait fonctionner.

Quant à la méthode ABE, elle peut s’ajouter à votre arsenal. Cette méthode vous permet de rendre les dossiers et fichiers de ressources partagés invisibles pour les utilisateurs qui ne sont pas autorisés à y accéder.

Voici ce que vous devez savoir sur ces fonds.

Des rivières alimentant la mer de données

Les flux de données alternatifs sont une fonctionnalité du système de fichiers NTFS. Ils étaient autrefois inclus dans Windows NT 3.1 pour permettre aux utilisateurs NT et Macintosh de partager des fichiers.

Un fichier NTFS est constitué de flux de données. Il s'agit du flux de données $DATA standard, et éventuellement d'un ou plusieurs flux de données alternatifs. Tout utilisateur disposant des autorisations nécessaires sur le fichier peut voir le flux de données $DATA existant, l'ouvrir et lire et écrire des données dans le flux.

Un flux de données alternatif est constitué d'informations ou de fichiers supplémentaires qu'un utilisateur ou une application peut joindre à un fichier NTFS. Seul l'utilisateur qui l'a créé connaît l'existence d'un flux de données alternatif. Les utilisateurs ne savent généralement pas si un autre flux de données est joint à un fichier ; Le fait est que ni le contenu de ce flux ni son nom ne sont visibles. De plus, il n'y a aucun moyen de voir le changement de taille du fichier.

Il existe de nombreuses façons d'utiliser des flux de données alternatifs. Sous Windows, ces flux sont utilisés pour stocker les données récapitulatives des documents créés par des applications non incluses dans Microsoft Office, telles que les fichiers de texte brut (.txt). Vous pouvez saisir des informations récapitulatives, telles que des informations sur le titre, le sujet et l'auteur, dans l'onglet Résumé de la boîte de dialogue Propriétés du fichier. Ces données récapitulatives sont stockées dans un autre flux de données, SummaryInformation.

Les applications Windows telles que Encrypting File System (EFS) et l'Explorateur Windows utilisent des flux de données alternatifs pour ajouter des données spécifiques aux fichiers stockés sur des lecteurs au format NTFS. EFS ajoute des informations de codage et de décodage aux fichiers cryptés à l'aide de flux de données alternatifs, permettant un cryptage et un décryptage décentralisés par EFS.

Dans Windows XP Service Pack 2 (SP2), Microsoft Internet Explorer (IE) utilise le flux de données alternatif Security.Zone pour fournir une classification de zone de sécurité des fichiers stockés sur un volume NTFS. En conséquence, IE a la capacité de bloquer les attaques d'escalade d'utilisateurs qui peuvent survenir dans des situations où un utilisateur télécharge du code malveillant à partir d'une zone non sécurisée d'Internet et stocke le code sur le disque dur local. IE classe le contenu stocké localement dans la zone de sécurité de la machine locale, qui fournit plus de droits que la zone de sécurité Internet. XP SP2 vérifie toujours le flux de données Security.Zone avant d'autoriser le code chargé à entreprendre une action sur le système local.

Canal d'introduction de code malveillant

Ce qui rend les flux de données alternatifs remarquables et dangereux, c'est que leurs noms et contenus ne sont pas affichés dans l'Explorateur Windows. Par conséquent, les organisateurs de divers types d'attaques considèrent ces flux comme un moyen pratique de masquer les données ou les codes malveillants entrés dans le système. Un exemple d'utilisation de ces threads est le ver VBS.Potok@mm. Les pirates ont utilisé un flux de données alternatif pour attacher plusieurs scripts Visual Basic (VB) à un fichier ODBC .ini existant.

Lorsqu'il est activé, le ver crée un compte avec des droits d'administrateur et s'envoie aux adresses qu'il détecte dans le carnet d'adresses de Microsoft Outlook.

Un autre danger est que l'espace disque alloué aux flux de données alternatifs n'est pas reflété dans la taille (fichier) de l'Explorateur Windows et dans les données d'espace disque non alloué. Un pirate informatique peut utiliser des flux de données alternatifs pour remplir l'espace disque du serveur de fichiers, laissant l'administrateur se gratter la tête en essayant d'aller au fond du problème. De plus, il convient de noter que l'utilitaire de ligne de commande Dir ne prend pas en compte les flux de données alternatifs lors du calcul des données de taille (fichiers et dossiers). Actuellement, il n'existe qu'un seul outil Microsoft capable de prendre en compte des flux de données alternatifs lors du calcul des tailles : l'utilitaire Chkdsk.

Ajout d'un nouveau fil de discussion

Toute personne disposant d'un accès en écriture à un fichier NTFS peut utiliser les commandes normales du système d'exploitation pour ajouter un autre flux de données au fichier. Par exemple, la commande suivante crée un autre flux de données mystream, ajoute mystream à un fichier nommé file.txt et stocke l'expression « top secret » dans mystream.

echo top secret > fichier.txt : monstream

Vous pouvez visualiser le contenu du mystream en utilisant la commande

Comme indiqué ci-dessus, des fichiers exécutables peuvent être ajoutés à des flux de données alternatifs. Ainsi, il est possible d'ajouter une copie cachée de la calculatrice Windows (calc.exe) au fichier file.txt. Pour ce faire, il vous suffit de saisir la commande

tapez calc.exe > fichier.txt : calc.exe

Pour lancer une calculatrice cachée, entrez la commande

démarrez .file.txt: calc.exe

Vous pouvez vérifier par vous-même que les flux de données alternatifs et leur contenu ne sont pas affichés dans les outils Microsoft. Ouvrez l'Explorateur Windows et affichez les propriétés de file.txt. La taille réelle du fichier est de 112 Ko (c'est l'espace occupé par le calc.exe intégré) - mais le programme affichera la taille du fichier à 0 Ko : il n'y a aucune information sur le fichier intégré dans le flux de données $DATA, et Windows L'Explorateur n'a pas la capacité de lire les informations d'un flux de données alternatif.

Il est clair qu'il existe de nombreuses menaces associées aux flux de données alternatifs, en particulier dans les réseaux où le travail de délivrance d'autorisations d'accès aux ressources NTFS n'est pas accordé l'attention voulue et où un contrôle d'accès strict aux serveurs Windows n'est pas établi. Il existe un mécanisme de sécurité simple qui peut empêcher les pirates informatiques d'essayer de profiter de flux de données alternatifs : le système de contrôle d'accès NTFS. Si les attaquants ne sont pas autorisés à écrire des données dans un fichier, ils ne pourront pas créer d'autres flux de données et les ajouter au fichier.

Détection des changements

Si vous pensez que des pirates ont contourné vos autorisations, utilisez l'un des outils alternatifs de découverte de contenu de flux de données développés à ce jour. Les vérificateurs d'intégrité du système, tels que Tripwire Enterprise et Tripwire for Servers, peuvent détecter toutes les modifications apportées au système de fichiers NTFS survenues sur un système Windows, y compris les ajouts ou les modifications apportées au contenu du flux de données.

Le programme Streams de Sysinternal est un utilitaire de ligne de commande gratuit qui détermine les noms des flux de données alternatifs attachés aux fichiers. La figure 1 montre comment utiliser l'utilitaire Streams pour afficher le nom du flux de données calc.exe que nous avons précédemment ajouté au fichier file.txt. Cet utilitaire peut être téléchargé à partir de http://www.sysinternals.com/utilities/streams.html.

Un autre moyen simple de détecter un flux de données alternatif consiste à utiliser l'Explorateur Windows pour copier le fichier suspect sur un lecteur doté d'un système de fichiers autre que NTFS (par exemple, un lecteur FAT). Les autres systèmes de fichiers ne sont pas équipés pour gérer des flux de données alternatifs. Ainsi, si vous essayez de copier un fichier NTFS avec d'autres flux de données attachés pour le placer sur un système de fichiers différent, NTFS émettra un avertissement similaire à celui illustré dans la figure 2. Mais sachez que si vous copiez ce fichier dans l'invite de commande fenêtre à l'aide de la commande Copier, Windows le copiera sur un système de fichiers non NTFS et supprimera le flux de données sans avertissement.

Masquer les ressources partagées à l'aide d'ABE

ABE est une fonctionnalité facultative de couche de partage de fichiers que Microsoft a implémentée pour la première fois dans Windows Server 2003 SP1. Il peut être utilisé dans n'importe quel répertoire partagé Windows, quel que soit le système de fichiers sur lequel les données partagées sont stockées. ABE permet aux administrateurs de masquer les dossiers et fichiers stockés sur des ressources partagées aux utilisateurs qui ne disposent pas des autorisations appropriées pour y accéder au niveau NTFS. En d’autres termes, nous parlons d’assurer la sécurité au niveau du dossier.

Dans les cas où ABE n'est pas utilisé, les utilisateurs se connectant à un répertoire partagé verront tous les fichiers et dossiers situés sur le partage, y compris ceux pour lesquels ils ne disposent pas des autorisations de lecture et ceux auxquels ils ne peuvent pas accéder. Lorsqu'un utilisateur tente d'ouvrir un fichier ou un dossier auquel il n'est pas autorisé à accéder, le système affiche un message d'erreur expliquant que l'accès est refusé. Ces messages d'erreur peuvent prêter à confusion pour les utilisateurs. L'activation d'ABE peut donc contribuer à réduire la charge de travail de support.

Cependant, l’utilisation de l’ABE présente également des inconvénients. Avant de renvoyer une liste d'objets dans un dossier à un client connecté à un partage, le serveur doit vérifier toutes les ACL sur ces objets afin de pouvoir déterminer les données à renvoyer. Par conséquent, vous pouvez constater une diminution significative des performances du système, en particulier lors de l'accès à des ressources partagées contenant de nombreux objets.

Il est conseillé d'utiliser les outils ABE, par exemple, pour configurer les ressources publiques dans les répertoires personnels des utilisateurs. Au lieu de créer un partage masqué pour le répertoire personnel de chaque utilisateur, vous pouvez créer un partage contenant les répertoires personnels de tous les utilisateurs sous le dossier du répertoire personnel racine. Les utilisateurs se connecteront à ce répertoire racine et vous pourrez utiliser les autorisations ABE ainsi que NTFS pour contrôler la visibilité des répertoires personnels de tous les utilisateurs.

Activation de la fonction ABE

Cette fonction utilise le nouvel indicateur de niveau de ressource publique SHI1005_FLAGS_ENFORCE_NAMESPACE_ACCESS ; au moment où ces lignes sont écrites, il n'est implémenté que dans Windows 2003 SP1 et Release 2 (R2). Cet indicateur signifie que vous appliquez la fonction ABE à l'un des dossiers.

Vous pouvez utiliser les extensions de propriétés du dossier de l'Explorateur Windows ou l'outil de ligne de commande abecmd.exe pour définir l'indicateur. Microsoft distribue l'extension ABE Explorer et abecmd.exe dans le package d'installation ABE, qui est un module complémentaire pour la plate-forme Windows Server 2003 SP1. Le package d'installation peut être téléchargé depuis Microsoft à l'adresse http://www.microsoft.com/downloads/details.aspx?FamilyId=04A563D 9-78D9-4342-A485-B030AC442084. ABE étant une extension côté serveur, elle peut être utilisée quelle que soit la version de Windows installée sur le client.

Après avoir installé les outils ABE sur le serveur, vous pouvez définir cet indicateur pour un dossier particulier. Cliquez avec le bouton droit sur le dossier, sélectionnez Propriétés, accédez à l'onglet Énumération basée sur l'accès et définissez l'indicateur Activer l'énumération basée sur l'accès sur ce dossier partagé, comme le montre la figure 3. Pour appliquer la fonction ABE à toutes les ressources partagées du système, définissez le paramètre Appliquer l'indicateur de ce dossier sur tous les dossiers partagés existants sur cet ordinateur.

La deuxième méthode consiste à utiliser l'outil de ligne de commande abecmd.exe. Pour appliquer la fonction ABE à la ressource publique shareddocs, entrez la commande suivante :

abecmd / activer les documents partagés

Vous pouvez utiliser l'option /all pour activer ABE sur toutes les ressources disponibles, ou utiliser l'option /disable pour désactiver ABE.

Contrôle d'accès

ABE est un outil simple qui vous permet de limiter les autorisations des utilisateurs aux seuls fichiers dont ils ont besoin pour faire leur travail. Les utilisateurs peuvent facilement trouver les fichiers dont ils ont besoin car ils n'ont pas besoin de parcourir des dossiers non liés, et ils n'ont pas à déranger l'équipe d'assistance avec des questions sur les raisons pour lesquelles les fichiers qu'ils n'ont pas l'autorisation d'ouvrir ne s'ouvriront pas.

Pour se protéger contre les pirates de flux de données alternatifs, les administrateurs doivent surveiller leurs paramètres de contrôle d'accès public et utiliser l'un des utilitaires que j'ai décrits pour identifier les flux de données alternatifs cachés ainsi que les modifications apportées au système NTFS.

Jean De Clercq(declercq @hp.com) - employé du bureau de sécurité de Hewlett-Packard. Responsable de la gestion de l'identité et de la sécurité des produits Microsoft. Auteur de Windows Server 2003 Security Infrastructures (Digital Press). La prise en charge d'AltDS (Alternate Data Stream) a été ajoutée à NTFS pour assurer la compatibilité avec le système de fichiers Macintosh HFS, qui utilisait un flux de ressources pour stocker des icônes et d'autres informations sur les fichiers. L'utilisation d'AltDS est cachée à l'utilisateur et n'est pas accessible par les moyens normaux. L'Explorateur et d'autres applications fonctionnent avec le flux standard et ne peuvent pas lire les données du flux alternatif. Avec AltDS, vous pouvez facilement masquer les données qui ne peuvent pas être détectées par les vérifications système standard. Cet article donnera des informations de base sur le fonctionnement et la définition d'AltDS.

Création d'AltDS

Créer un AltDS est très simple. Pour ce faire, nous utiliserons la ligne de commande. Tout d'abord, créons un fichier de base auquel nous attacherons nos flux.
C:\>echo Juste un fichier texte de plan>sample.txt

C:\>tapez sample.txt
Juste un fichier texte de plan


Ensuite, nous utiliserons les deux-points comme opérateur pour indiquer que nous utiliserons AltDS :
C:\\>echo Vous ne pouvez pas me voir>sample.txt:secret.txt

Vous pouvez utiliser les commandes suivantes pour afficher le contenu :
C:\plus< sample.txt:secret.txt

ou
C:\notepad sample.txt:secret.txt

Si tout fonctionne bien, vous verrez le texte : Vous ne pouvez pas me voir, mais lorsqu'il est ouvert depuis l'Explorateur, ce texte ne sera pas visible. Vous pouvez également joindre AltDS non seulement à un fichier, mais également à un dossier. ceci, créez un dossier et joignez une sorte de texte :
C:\>trucs md
C:\>trucs cd
C:\stuff>echo Masquer les éléments dans stuff>:hide.txt
C:\stuff>rép
Le volume du lecteur C n'a pas d'étiquette.
Le numéro de série du volume est 40CC-B506Répertoire de C:\stuff
28/09/2004 10h19 .
28/09/2004 10h19

0 Fichier(s) 0 octets2 Répertoire(s) 12 253 208 576 octets libres
C:\stuff>notepad:hide.txt

Vous savez maintenant comment afficher et modifier un AltDS joint à l'aide du Bloc-notes, ainsi que comment le joindre à des fichiers et des dossiers.

Masquer et lancer des applications

Masquer des applications à l’aide d’AltDS est aussi simple que masquer des fichiers de test. Tout d’abord, créons à nouveau le fichier de base :

Ensuite, plaçons notre application dans un flux, par exemple j'ai utilisé notepad.exe :
C:\WINDOWS>tapez notepad.exe>test.txt:note.exe

Assurons-nous maintenant que notre fichier contient le même texte :
C:\WINDOWS>tapez test.txt
Test

Et maintenant la partie amusante, lançons notre application cachée :
C:\WINDOWS>démarrer .\test.txt:note.exe
C:\WINDOWS>

Étant donné que cet article n’est pas une traduction complète de l’article pris, il est formaté comme un simple sujet. Des techniques supplémentaires peuvent être trouvées sur le lien fourni.

MISE À JOUR :

Utilitaires pour travailler avec AltDS (liste tirée de l'article lié ci-dessus) :

LADS - Liste des flux de données alternatifs par Frank Heyne
www.heysoft.de/Frames/f_sw_la_en.htm

Streams.exe de SysInternals.

L'article a été écrit pour le magazine Hacker en 2004. Il a été publié dans le numéro 09/04 (69) sous le titre « Courants destructeurs ».

Lorsque vous prenez le contrôle d’un autre système NT et y installez votre propre logiciel espion maison, vous devez résoudre le problème du stockage des informations collectées sur l’ordinateur de la victime. Habituellement, le journal est écrit dans un simple fichier dans un répertoire contenant un grand nombre de fichiers, par exemple dans system32.

Fonctionnalités NTFS

Il s'agit d'un moyen courant, mais loin d'être le meilleur, de masquer des informations sur votre ordinateur local. Il est possible que l'utilisateur remarque un fichier supplémentaire constamment mis à jour qui apparaît soudainement dans son répertoire système. Ajouter un journal à un fichier déjà existant ? Vous devez d’abord trouver un fichier auquel l’ajout d’informations ne gâchera pas son contenu. Qu'en est-il de la sauvegarde des informations dans un endroit qui ne sera visible ni depuis l'Explorateur, ni depuis la ligne de commande, ni depuis aucun gestionnaire de fichiers ? Le système de fichiers NTFS nous offre cette opportunité. Vous le voyez rarement sur un PC domestique classique, car la plupart des utilisateurs préfèrent toujours FAT32, même ceux qui utilisent XP. Mais sur le réseau local d'une entreprise exécutant Win2k/XP, NTFS est presque certainement utilisé, car ce système de fichiers offre des fonctionnalités telles que l'attribution de droits d'accès aux utilisateurs, le cryptage et la compression de fichiers. De plus, NTFS est beaucoup plus sécurisé que FAT32. La méthode de dissimulation de données que je vais décrire est donc idéale pour l’espionnage industriel. Avec l'avènement de Longhorn, NTFS a une chance de trouver sa place sur les disques des ordinateurs personnels, car le prochain système de fichiers WinFS, basé sur NTFS, promet des capacités d'organisation des informations et de recherche supplémentaires qui devraient attirer les utilisateurs ordinaires.

Joindre toutes les données au fichier

La méthode consiste à enregistrer les données non pas dans un fichier, comme d'habitude, mais dans un flux de fichiers NTFS. Le flux peut être attaché à un autre fichier (dans ce cas, sa taille ne change pas et les données restent intactes, ce qui signifie que les utilitaires qui vérifient les sommes de contrôle des fichiers ne remarqueront pas les modifications), à un répertoire ou à un disque. Les flux de fichiers alternatifs NTFS sont l'une des fonctionnalités de NTFS présentes depuis les premières versions de Windows NT. Cela réside dans le fait qu'un fichier peut avoir plusieurs threads contenant des données, et seul le thread principal dans lequel le contenu du fichier est stocké est disponible pour l'utilisateur. Il existe quelque chose de similaire dans le système de fichiers HFS sur Macintosh. Là-bas, les flux sont appelés fourches. Jusqu'à récemment, ils étaient utilisés comme stockage de ressources de fichiers ou contenaient des informations sur le type de fichier. Avec l'avènement de MacOS X, Apple a recommandé de placer les ressources dans des fichiers séparés et d'identifier les types de fichiers par extensions. Mais le support de branchement demeure. Sous Windows, les flux sont généralement utilisés pour stocker des informations supplémentaires sur un fichier. Par exemple, un flux peut contenir un résumé d'un document. Si le système se trouve sur un disque NTFS, le fichier explorer.exe contient probablement un résumé. En fonction du contenu du résumé, des flux nommés SummaryInformation, DocumentSummaryInformation et plusieurs autres peuvent être joints au fichier. Sur mon ordinateur, j'ai trouvé un fil nommé $MountMgrRemoteDatabase attaché au lecteur C.

L'utilisateur ne peut connaître les flux attachés à un fichier que dans certains cas, par exemple lors de la copie d'un fichier avec un flux attaché sur un disque avec FAT/FAT32. Ces systèmes de fichiers ne les prennent pas en charge, le système vous demandera donc de confirmer la perte d'informations dans les flux, en indiquant leurs noms. Bien entendu, cette situation ne se produira jamais si le flux est attaché à un disque ou à un dossier système. Il n’est pas nécessaire d’utiliser des threads à des fins d’espionnage. Si vous êtes un développeur de programmes shareware, vous pouvez facilement utiliser des flux pour stocker des informations sur l'enregistrement, le nombre de jours jusqu'à la date d'expiration, en un mot, tout ce qui doit être caché à l'utilisateur de votre programme.

Travailler avec des fils de discussion

Il existe à la fois des similitudes et des différences dans le travail avec des fichiers et des flux. Il n’y a pas grand-chose de pareil. Les fichiers et leurs flux sont créés et supprimés par les mêmes fonctions WinAPI CreateFile et DeleteFile. La lecture et l'écriture sont implémentées respectivement par les fonctions ReadFile et WriteFile. C’est là que s’arrêtent les similitudes, seules les différences suivent. Les noms de flux peuvent contenir des caractères spéciaux qui ne peuvent pas faire partie d'un nom de fichier normal : tels que "*", "?", "<”, “>" , « | » et un caractère guillemet. En général, tout nom de flux est enregistré au format Unicode. Les caractères de service compris entre 0x01 et 0x20 peuvent également être utilisés. Il n'existe pas de fonction standard pour copier et déplacer un flux : MoveFile et CopyFile ne fonctionnent pas avec les flux. Mais personne ne vous dérange pour écrire vos propres fonctions. Les flux n'ont pas leurs propres attributs, ni dates de création ou d'accès. Ils sont hérités du fichier auquel ils sont joints. Si le fichier lui-même contient des données, il peut également être représenté sous forme de flux. Les noms de flux sont affichés sous la forme « nom de fichier : nom de flux : attribut ». L'attribut standard du flux dans lequel résident les données est appelé $Data. Il existe de nombreux autres attributs dont les noms commencent également par le signe « $ ». Le contenu du fichier se trouve dans un flux sans nom (filename::$DATA). Cette propriété du système de fichiers de représenter le contenu d'un fichier sous forme de flux était associée à un bug dans les anciennes versions de Microsoft IIS, lorsqu'un pirate informatique souhaitant connaître le texte d'un script sur un serveur vulnérable ajoutait simplement « : $DATA » à son nom, et le serveur, pour exécuter le script, a donné son code source. Travailler avec des flux est similaire à travailler avec des fichiers. Jetez un œil au listing 1. Il s'agit d'un exemple simple de programme qui crée un fichier de flux et y écrit des informations. Après avoir exécuté le programme, un fichier « testfile » vide apparaîtra dans son répertoire. Vous pouvez voir le contenu du flux joint en tapant « plus » dans la ligne de commande< testfile:stream». Как видишь, имя потока указывается после имени файла, отделенное от него знаком двоеточия. Самое трудное при работе с потоками – это получить их список для конкретного файла. Стандартной функции нет, и поэтому придется писать ее самому. Напишем небольшую консольную программу, которая бы возвращала список потоков по имени файла. Такая прога есть у ребят из Sysinternals, с открытым кодом, и она работает, но мне не понравился их способ. Они используют вызовы Native API, и поэтому их код большой и трудный для понимания. Мы же напишем свою прогу, которая будет работать из командной строки, с алгоритмом попроще и со стандартными API функциями.

Obtenir une liste de discussions

L'algorithme est basé sur l'utilisation de la fonction BackupRead. Il est conçu pour sauvegarder des fichiers. Lorsque vous sauvegardez un fichier, il est important de sauvegarder autant de données que possible, y compris les flux de fichiers. Les informations sont extraites de la structure WIN32_STREAM_ID. De là, vous pouvez obtenir le nom du flux, son type et sa taille. Nous n'aurons besoin que de flux de type BACKUP_ALTERNATE_DATA. Toutes les fonctions et structures sont décrites dans le fichier d'en-tête winnt.h. Vous devez d’abord ouvrir le fichier pour le lire à l’aide de CreateFile. Dans le paramètre dwFlagsAndAttributes, vous devez spécifier l'indicateur FILE_FLAG_BACKUP_SEMANTICS, qui vous permettra d'ouvrir non seulement des fichiers, mais également des répertoires. Ensuite, nous exécutons une boucle while qui lit les informations sur le fichier dans la structure sid, à partir de laquelle nous obtiendrons des informations sur chaque thread. Avant le prochain passage de la boucle, nous effaçons la structure et déplaçons le pointeur de fichier vers le flux suivant à l'aide de la fonction BackupSeek. Une fois tous les threads trouvés, nous effaçons le lpContext contenant les informations de service et fermons le fichier. Le code source du programme est présenté dans le listing 2. Vous pouvez récupérer le programme déjà compilé depuis notre disque. Pour travailler avec des flux, il n'est pas nécessaire d'écrire des programmes spéciaux. Certaines choses que vous pouvez faire directement à partir de la ligne de commande. Quelques exemples sont présentés dans l’encadré.

Détection

Une fois qu’un flux d’informations est attaché à quelque chose, son contenu est difficilement accessible sans connaître son nom. Si un flux est attaché à un volume logique, Windows ne dispose d'aucun outil standard pour le détecter. Étant donné que le nom du flux peut contenir des caractères qui ne sont pas autorisés dans les noms de fichiers normaux, cela crée des difficultés supplémentaires lorsque vous essayez de connaître le contenu du flux à l'aide de la ligne de commande. Le contenu récapitulatif du document est généralement stocké dans un flux dont le nom contient le code de caractère 0x05. Ce caractère peut être saisi dans la console (Ctrl+E), mais s'il s'agissait du caractère 0x10 ou 0x13 (retour chariot et saut de ligne), alors il serait impossible de les saisir. Théoriquement, vous pouvez découvrir les fils de discussion joints par hasard, à l'aide d'un logiciel susceptible de se trouver sur votre ordinateur. WinRAR a une option, et si elle est activée, vous remarquerez peut-être que la taille d'un petit fichier placé dans l'archive non seulement ne diminue pas, mais augmente même (en raison du fait que les données dans les flux sont également placées dans les archives). Cela peut éveiller des soupçons. Un programme de surveillance de l'accès au système de fichiers - FileMonitor du même Sysinternals - ne fait pas de distinction entre l'accès aux fichiers ou aux flux. Ainsi, une étude minutieuse du journal d'accès au disque d'un programme suspect (votre keylogger) révélera à la fois le nom du flux dans lequel le journal est écrit et le nom du fichier auquel il est joint.

Virus

En septembre 2000, est apparu le premier virus utilisant des flux de fichiers alternatifs pour se propager. W2k.Stream a été le premier représentant d'un nouveau type de virus - le compagnon de flux. Il recherche les fichiers .exe dans son répertoire et s’il les trouve, il lance le processus d’infection. Un flux supplémentaire est joint au fichier, dans lequel le virus transfère le contenu du fichier d'origine, puis le corps du virus est copié dans le flux principal du fichier. Après avoir exécuté le fichier infecté, le virus tente à nouveau d'infecter les fichiers de son répertoire, puis lance le programme à partir d'un thread supplémentaire. En effet, grâce à la fonction CreateProcess vous pouvez démarrer un processus depuis un thread. De plus, le fichier contenant le flux peut être supprimé en toute sécurité, mais le processus restera. Juste un conte de fées pour les Troyens ! Bien que près de quatre ans se soient écoulés depuis l'apparition de W2K.Stream, tous les antivirus ne sont pas encore capables de détecter les codes malveillants dans les flux de fichiers. Par conséquent, l’émergence de nouveaux vers et virus qui les utilisent peut constituer un grave danger.

Autres virus utilisant des flux

En plus de W2K.Stream, les flux ont trouvé des applications dans d'autres virus et vers. Le premier ver à utiliser des flux de fichiers était I-Worm.Potok. Cette petite bête attache plusieurs threads au fichier odbc.ini dans le répertoire Windows et y stocke des scripts pour s'envoyer par mail. Un autre virus est W2k.Team. Des descriptions de ces virus et d'autres virus similaires peuvent être trouvées sur le site Web http://www.viruslist.com/

Travailler avec des flux depuis la console

Création d'un fichier avec un flux :
tapez nul > somefile.txt:Stream

Écrivez pour diffuser :
echo "Quelque chose" >> somefile.txt:Stream

Lecture à partir d'un flux :
plus< somefile:Stream

Copier le contenu d'un fichier existant dans un flux :
tapez file1.txt >> somefile.txt:Stream

Copier le contenu d'un flux dans un fichier :
plus< somefile.txt:Stream >> fichier2.txt

Supprimer des fils de discussion

Il existe une opinion selon laquelle un flux ne peut être supprimé qu'avec le fichier auquel il est joint. C'est faux. Si vous connaissez le nom du flux, vous pouvez toujours le supprimer avec la fonction standard DeleteFile.

Listing 1. Exemple de création d'un fil de discussion.

#inclure int main() ( DWORD dwRet; HANDLE hStream = CreateFile("testfile:stream", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, NULL, NULL); WriteFile(hFile, "Ceci est un flux", 17, &dwRet, NULL); CloseHandle(hStream); renvoie 0 ;

Listing 2. X-Stream : Programme affichant une liste de flux

#inclure #inclure #inclure #inclure int _tmain(int argc, _TCHAR *argv) ( WIN32_STREAM_ID sid; ZeroMemory(&sid, sizeof(WIN32_STREAM_ID)); DWORD dw1,dw2,dwRead; INT numofstreams = 0; //Tampon pour le nom du flux au format Unicode WCHAR wszStreamName; LPVOID lpContext = NULL; /* * Ouvrez le fichier en lecture avec le paramètre * FILE_FLAG_BACKUP_SEMANTICS, qui nous permet d'ouvrir non seulement les fichiers, mais aussi les répertoires avec les disques */ HANDLE hFile = CreateFile(argv,GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_EXISTING. ,FILE_FLAG_BACKUP_SEMANTICS,NULL ); if (hFile == INVALID_HANDLE_VALUE) (printf("\nErreur : impossible d'ouvrir le fichier, le répertoire ou le disque %s\n",argv); exit(0); ) DWORD dwStreamHeaderSize = (LPBYTE) &sid.cStreamName - (LPBYTE)&sid + sid.dwStreamNameSize; printf("\nInformations sur les flux pour %s:\n",argv); while (BackupRead(hFile, (LPBYTE) &sid, dwStreamHeaderSize, &dwRead, FALSE, TRUE, &lpContext )) ( / /Si le type de flux est incorrect, alors nous interrompons la boucle if (sid.dwStreamId == BACKUP_INVALID) break; ZeroMemory(&wszStreamName,sizeof(wszStreamName)); //Obtenir le nom du flux if (!BackupRead(hFile, (LPBYTE) wszStreamName, sid.dwStreamNameSize, &dwRead, FALSE, TRUE, &lpContext)) break; if (sid.dwStreamId == BACKUP_DATA || sid.dwStreamId == BACKUP_ALTERNATE_DATA) ( numofstreams++; printf("\n\nStream\t\t#%u",numofstreams); switch (sid.dwStreamId) ( case BACKUP_DATA: printf ("\nNom:\t\t::$DATA"); cas BACKUP_ALTERNATE_DATA: printf("\nNom:\t\t%S",wszStreamName ) printf("\nTaille:\t\ t%u\ n",sid.Size); ) //Passer au flux suivant BackupSeek(hFile, sid.Size.LowPart, sid.Size.HighPart, &dw1, &dw2, &lpContext); //Effacer la structure avant le prochain passage de la boucle ZeroMemory(&sid,sizeof(sid)); ) //Effacez le lpContext contenant les informations de service //pour que la fonction BackupRead fonctionne BackupRead(hFile, NULL, NULL, &dwRead, TRUE, FALSE, &lpContext); //Ferme le fichier CloseHandle(hFile); renvoie 0 ; )

Il existe également ce qui suit sur le thème des flux de fichiers :

  • NTFS Stream Explorer 2.00 Un programme pour travailler avec NTFS et

    La plupart des utilisateurs de systèmes d'exploitation modernes de la famille Windows ont rencontré une situation dans laquelle le fichier d'aide au format CHM (Compiled Help Module) ne s'ouvre que partiellement - vous ne pouvez afficher que la table des matières sans le contenu de ses éléments :

De plus, si vous essayez d'ouvrir un fichier CHM contenu sur un partage réseau à l'aide d'un chemin UNC (Universal Naming Convention) tel que \\server\h\help.chm, ses sections ne s'affichent pas. En d’autres termes, vous ne pouvez normalement visualiser les fichiers .chm que s’ils n’ont pas été reçus sur le réseau.

Une image similaire se produit lorsque vous essayez d'ouvrir un fichier exécutable téléchargé depuis le réseau. Vous verrez un avertissement de sécurité :

De plus, le même fichier, extrait d'une archive également téléchargée sur Internet, peut être ouvert sur cet ordinateur sans aucun problème. En fait, la seule différence est que le fichier en cours d'ouverture a été créé localement, lors du processus de décompression, et non téléchargé sur le réseau. En d'autres termes, Windows a la capacité de déterminer l'origine réseau d'un fichier et d'y répondre en utilisant certains paramètres de sécurité.

Un mécanisme pour déterminer l’origine réseau des fichiers.

Dans le système de fichiers NTFS, chaque fichier (ou répertoire) est représenté comme une collection d'éléments individuels appelés les attributs. Des éléments tels que le nom du fichier, les paramètres de sécurité et même les données sont tous des attributs de fichier. Chaque attribut est identifié par un code de type d'attribut et, facultativement, par un nom d'attribut. Ainsi, par exemple, le nom du fichier est contenu dans l'attribut Nom de fichier, contenu - dans l'attribut DONNÉES, les informations sur le propriétaire et les droits d'accès se trouvent dans l'attribut Descripteur de sécurité etc. Le contenu de chaque fichier ($attribut DATA) est un ensemble ruisseaux, dans lequel les données sont stockées. Pour chaque fichier ou répertoire NTFS, il existe au moins un thread principal dans lequel les données sont réellement stockées. Cependant, en plus du thread principal, un fichier ou un répertoire peut également être associé à alternative (UN alterner Dà S stream - ADS), qui peut également contenir des données qui n'ont aucun rapport avec les données du flux principal. Le flux principal du fichier n'a pas de nom et est désigné comme $DONNÉES :"". Les flux alternatifs doivent avoir un nom, par exemple - $DONNÉES : "Données de flux"- flux alternatif avec nom Flux de données

Lorsque les fonctions d'écriture de données dans un fichier sont exécutées, elles sont placées dans le flux de données principal. Lorsque nous ouvrons, par exemple, un fichier texte avec le Bloc-notes, nous avons accès aux données du thread principal. Les données des flux alternatifs, lors de l'utilisation d'un accès standard, ne sont pas affichées et il n'y a même aucun signe de leur présence. Cependant, les données de flux alternatives associées à un fichier ou un répertoire spécifique sont accessibles à l'aide de programmes spéciaux ou en utilisant une syntaxe spéciale sur la ligne de commande Windows.

Par exemple, écrire du texte dans le fichier test.txt avec la commande écho:

echo Données du flux principal > test.txt- écrire le texte « Main stream Data » dans un fichier test.txt, ce qui signifie écrire dans le flux principal sans nom.

Mais vous pouvez modifier la commande :

echo Données de flux alternatif > test.txt:stream1- écrivez le texte « Alternate stream Data » dans un flux alternatif portant le nom flux1 déposer test.txt

Vous pouvez désormais ouvrir, par exemple, chacun des flux avec le Bloc-notes :

bloc-notes test.txt- le contenu du flux principal s'ouvrira avec le texte « Données du flux principal »

bloc-notes test.txt : stream1- le contenu du flux alternatif s'ouvrira avec le texte « Données du flux alternatif »

Les flux alternatifs, invisibles pour les outils standard permettant de travailler avec des objets du système de fichiers, sont néanmoins très souvent utilisés pour stocker des informations supplémentaires sur les fichiers et d'autres informations de service. Ainsi, par exemple, lors du téléchargement de fichiers depuis Internet, les navigateurs ajoutent un flux alternatif appelé Zone.Identifiant, qui peut être ouvert avec le bloc-notes, comme dans l'exemple ci-dessus

bloc-notes %USERPROFILE%\Downloads\ChromeSetup.exe:Zone.Identifier- ouvrir un flux alternatif avec le nom dans le bloc-notes Zone.Identifiant ChromeSetup.exe Vous n'avez pas besoin de spécifier le chemin d'accès au fichier en exécutant d'abord la commande pour accéder au répertoire des fichiers téléchargés de l'utilisateur actuel (avec l'emplacement standard des dossiers de service utilisateur) :

cd %USERPROFILE%\Téléchargements- allez dans le répertoire des fichiers téléchargés.

bloc-notes ChromeSetup.exe:Zone.Identifier- ouvrir un flux alternatif avec le nom Zone.Identifiant pour le fichier d'installation du navigateur Google Chrome nommé ChromeSetup.exe dans le répertoire courant.

Comme vous pouvez le voir, le contenu du flux alternatif contient les lignes :

- panneau de section avec une description de la zone de transmission de données
ID de zone = 3- identifiant de zone.

Ces informations permettent de déterminer l'origine du fichier par numéro d'identification ID de zone:

0 - ordinateur local (Local).
1 - réseau local local (Intranet)
2 - Des sites de confiance
3 - L'Internet
4 - sites dangereux (Sites restreints)

Cette définition de zones correspond par exemple aux paramètres de sécurité d'Internet Explorer :

Dans ce cas, vous pouvez déterminer que le fichier ChromeSetup.exe a été obtenu sur Internet (ID de zone = 3). Lors de l'exécution d'un tel fichier, un avertissement de sécurité concernant une source non fiable sera émis. Les fonctionnalités de sécurité des applications Microsoft Office fonctionnent de la même manière lorsqu'elles avertissent du danger lié à l'ouverture de fichiers téléchargés depuis Internet. Pour la même raison, le contenu des fichiers d'aide au format CHM ne s'ouvre pas - le contenu du flux alternatif permet de les classer comme dangereux, quel que soit le danger réel ou inexistant.

Essayez de changer le même bloc-notes, la valeur ZoneId en 0 , qui correspondra à l'origine locale du fichier, et l'avertissement de sécurité disparaîtra, tout comme les problèmes d'ouverture de documents bureautiques ou de rubriques d'aide dans les fichiers .chm.

Un comportement similaire des systèmes de sécurité se produira dans les cas où le contenu du flux alternatif est supprimé (le rend vide) ou si le flux alternatif lui-même est complètement supprimé.

À partir de Windows 7, vous pouvez utiliser la commande pour obtenir une liste de flux de fichiers alternatifs DIR avec paramètre /R:

rép /r %UserpRofile%\Downloads- afficher une liste de fichiers et de flux alternatifs dans un répertoire Téléchargements utilisateur actuel.

Pour travailler avec des flux alternatifs dans n'importe quelle version du système d'exploitation Windows, vous pouvez utiliser l'utilitaire streams.exeà partir du progiciel Microsoft Sysinternals Suite. Le package contient de nombreux petits programmes de diagnostic, d'optimisation et d'administration, y compris un utilitaire qui vous permet de combler les lacunes liées au travail avec des flux alternatifs.

Format de ligne de commande :

streams.exe [-s] [-d]fichier ou répertoire

Options de ligne de commande :

-s- traiter les sous-répertoires.
-d- supprimer les flux alternatifs.
-pas de bannière- ne pas afficher la bannière de démarrage et les informations de copyright.

Exemples d'utilisation :

streams.exe /?- afficher l'aide sur l'utilisation du programme.

flux monfichier.txt- afficher des informations sur les flux de fichiers monfichier.txt

streams –d monfichier.txt- supprimer les flux de fichiers alternatifs monfichier.txt

streams -d -s D:\Téléchargements\*.*- supprimer les flux alternatifs de tous les fichiers et sous-répertoires d'un répertoire D:\Téléchargements\

Sur les systèmes d'exploitation Windows 8 et versions ultérieures, PowerShell vous permet également de travailler avec des threads alternatifs :

Get-Item -Path -Chemin C:\FirefoxSetup.exe -Stream *- afficher des informations sur les threads dans le fichier C:\FirefoxSetup.exe.

Get-Content -Chemin C:\FirefoxSetup.exe -Stream Zone.Identifier- afficher le contenu d'un flux alternatif Zone.Identifiant déposer C:\FirefoxSetup.exe

Remove-Item -Chemin C:\FirefoxSetup.exe -Stream *- supprimer tous les flux alternatifs associés au fichier C:\FirefoxSetup.exe

Remove-Item -Chemin C:\FirefoxSetup.exe -Stream Zone.Identifier- supprimer le flux alternatif Zone de flux.Identifiant associé au fichier C:\FirefoxSetup.exe.

Les informations sur les zones de sécurité sont largement utilisées dans les stratégies de groupe, et en particulier par le gestionnaire de pièces jointes Windows, qui exécute des fonctions de protection contre les logiciels malveillants pouvant être contenus dans les pièces jointes d'e-mails ou dans les fichiers téléchargés sur Internet. Le site Web de Microsoft contient un article détaillé sur la façon de configurer le gestionnaire de pièces jointes et de résoudre les problèmes qui y sont associés :
Description du fonctionnement du gestionnaire de pièces jointes, inclus dans le système Microsoft Windows.

En conclusion, j'ajouterai que les flux alternatifs sont une propriété du système de fichiers NTFS et, par exemple, ne sont pas pris en charge dans FAT32. Par conséquent, lors de la copie de fichiers de NTFS vers tout autre système de fichiers, les flux alternatifs sont supprimés.