# Alternate Data Streams

Los Flujos Alternativos de Datos, Alternate Data Streams o ADS son una característica del sistema de archivos NTFS que permite almacenar metainformación con un fichero, sin necesidad de usar un fichero separado para almacenarla.

## Implementación

En 1993, Microsoft lanzó la primera versión del sistema operativo Windows NT que introdujo el sistema de archivos NTFS con soporte de ADS que fueron creados para soportar los forks nativos de los sistemas Macintosh, el sistema de archivos extended file attributes y para guardar información de permisos estilo Unix para programas POSIX. Estos usos aún continúan vigentes.

## Usos

El uso de metadatos asociados a un fichero es imprescindible en sistemas operativos de esas características, permite saber de donde proviene un archivo, donde más se ha usado y muchas otras características asociadas con el fichero. Por ejemplo: a partir de Windows XP, cuando se descarga un fichero ejecutable desde Internet se crea un ADS llamado Zone.Identifier que contiene el identificador de la zona de Internet desde donde se ha descargado el fichero. Esta información es utilizada luego por Windows Explorer para decidir si muestra o no una advertencia al tratar de ejecutar el programa.
Otro ejemplo es el del software antivirus kaspersky que utiliza o utilizaba la tecnología iStreams para guardar en cada archivo escaneado un ADS con los resultados y de esa forma saber en un escaneo futuro cual era la situación de ese fichero

## Limitaciones

Un administrador puede añadir esta característica a casi todos los ficheros del sistema mientras que un usuario normal se limitará solo a los ficheros y directorios en donde tenga acceso de escritura. Por defecto los ADS solo sirven en volúmenes NTFS, a través de una red de área local es posible enviar ficheros con ADS, mientras que los volúmenes intermedios tengan el sistema de archivos NTFS.
Resulta imposible mandar un fichero con su metadato asociado ya que Internet solo envía el flujo de datos únicamente y se pierden los metadatos asociados en el sistema de archivos original.

## Uso práctico

La forma más común de usar los ADS es mediante la shell de Windows.
Crear un archivo de texto normal:
Crear un ADS de archivo.txt:
La forma normal de ver un archivo de texto por consola es usando el comando type de esta manera:
Sin embargo, no sirve con los ADS
Para poder ver el flujo alternativo de datos es necesario utilizar el comando more de esta manera:
También es posible editar el flujo alternativo de datos mediante un editor de texto gráfico como en Bloc de notas de Windows, solo que hay que abrirlo por consola de esta manera:
También es posible que un fichero posea más de un ADS sin que modifiquen el tamaño del fichero contenedor y que este sea de otro formato (no solo archivos de texto).

## Uso de ADS en GNU/Linux

Esto es posible mediante NTFS-3G, un software para leer particiones NTFS desde GNU/Linux, por defecto NTFS-3G solo lee y escribe los flujos de datos sin nombre, para acceder los flujos secundarios se debe montar el sistema de archivos con la opción:

## Defectos de los ADS

Básicamente los ADS funcionan de manera correcta y constan de buena documentación oficial, el único problema es que son totalmente ocultos y es una característica que un usuario malintencionado puede usar en contra de la seguridad del sistema, ya que un archivo de 1 byte puede tener mucha información asociada consigo mismo.

## Seguridad de los ADS

Los ADS son una característica que no modifican la seguridad del sistema, sin embargo el desconocimientos de estos por parte del usuario sí atenta contra el sistema, ya que al no saber que un pequeño archivo de cualquier extensión puede tener asociados muchos archivos de cualquier extensión incluyendo los ejecutables puede llevar a ejecutar cosas que no se pretenden ejecutar. Además los directorios (incluyendo el raíz, generalmente llamado C:) también pueden contener ADS y sin un software especial es imposible eliminarlos, a menos que se mueva el archivo a otro sistema de archivos y luego se regrese al NTFS (si es que el archivo se puede mover), agregado a la dificultad de encontrarlos se vuelven una buena alternativa para un atacante.
Los tipos de ataques que se podrían efectuar utilizando los ADS son dos:
* Esconder un archivo malicioso en un archivo cualquiera.
* Crear varios ADS distribuidos por todo el sistema para ocupar espacio en el disco e intentar lograr un ataque DOS
Otro problema de los ADS es la utilización maliciosa de la sintaxis archivo:flujo:$DATA, especialmente el uso de fichero::$DATA para acceder al flujo principal de datos de un fichero. Esta sintaxis puede engañar a sistemas que gestionan ficheros basados en su extensión, ya que agregando ::$DATA al final del nombre del fichero hace que su extensión ya no se vea como antes, y si la aplicación no es consciente de la existencia de los ADS, seguramente se "confundirá".

## Herramientas

A partir de Windows Vista y Windows Server 2008, el comando dir cuenta con el flag /r para listar los ADS dentro de un fichero. Pero para los usuarios de sistemas operativos anteriores es bastante más difícil saber siquiera, si un fichero contiene ADS o no.
Existen algunas herramientas que sirven para tratar con los ADS, las hay en modo texto como LADS y otras gráficas como ADS Explorer y adsspy