martes, 21 de enero de 2014

Alternate Data Streams (ADS) - Introducción


Los Alternate Data Streams son flujos alternativos de datos, o ficheros dentro de otros ficheros.

Cuando hablamos de un fichero, normalmente pensamos que son una secuencia de bytes ordenados y accesibles, pero en el sistema de archivos NTFS esto no es así, ya que puede albergar flujos de datos alternativos junto al fichero principal, con tan solo especificar un nombre interno para los mismos.

La sintaxis para referenciar flujos (streams) en ficheros NTFS es la siguiente:

fichero[:flujo[:tipo]]

Para los ADS, uno de los varios tipos de flujos que puede haber dentro de un fichero en NTFS es "$DATA".

Si solamente se especifíca "fichero", se obtendrá el flujo principal de datos, que és el que conocemos todos.

Según la política de Microsoft con respecto a los ADS, es que los mismos no necesitan o no deberían ser accedidos por el usuario final, sino sólo por aquellas aplicaciones que los utilicen.

Debemos tener presente que ésta es una característica del sistema de archivos NTFS, por lo que si quisiesemos copiar un fichero con ADS a un pendrive con formato FAT32 sólo se copiará el flujo principal de datos y los demás flujos se perderán.

Otro punto a tener en cuenta, es que el tamaño de los flujos alternativos no se ve reflejado en los listados de directorios ni en Windows Explorer, por lo que si creamos un fichero llamado prueba.txt de 30bytes y le agregamos un flujo de por ejemplo 50Kb, sólo veríamos que el fichero pesa 30bytes.

Para poder ejecutar un flujo debemos utilizar el comando START, pero siempre hay que especificar el path completo al fichero, ya que al utilizar como separador ":" entre el nombre de fichero y el nombre de flujo puede "confundir" al comando.
Pongamos un ejemplo en el que creamos un fichero llamado H con un flujo "prueba.txt".
El comando START no podrá saber si al ejecutar H:prueba.txt se trata de un fichero en la unidad de disco H: o de un flujo dentro del fichero "H" en el directorio actual. Así que, para evitar esta confusión deberemos escribir la ruta completa para que diferencie entre la unidad de disco y el flujo dentro del fichero (C:\MiCarpeta\H:prueba.txt).

¿Esto afecta a los directorios?
La respuesta es SI. Con los directorios pasa exactamente lo mismo, podemos crear un flujo dentro de una carpeta.




Como podemos comprobar, aunque no nos muestre el explorador de archivos el fichero, sí que está ahí.

Pero no nos quedamos aquí, ya que también podemos crear flujos en el directorio raíz de un disco con formato NTFS.



Como diría el señor Burns...


En el próximo post sobre los flujos de datos alternativos (Alternate Data Streams) veremos algún ejemplo de cómo ocultar/ejecutar malware mediante los flujos de datos alternativos y cómo podemos librarnos si descubrimos un fichero malware utilizando esta técnica en nuestro sistema.

Espero que les haya gustado.

Saludos.



Referencias: 
http://www.flu-project.com/2011/05/ads-alternate-data-streams-ntfs_19.html
http://es.wikipedia.org/wiki/Alternate_Data_Streams


**No me hago responsable del mal uso que se de a la información presentada. Esta información es de carácter didáctico.**

1 comentario:

  1. *O* esta genial esta informacion... muchas gracias ya espero el proximo post lml !

    ResponderEliminar