martes, 13 de diciembre de 2011

NTFS y Alternate Data Streams. El peligro está oculto

El sistema de ficheros NTFS tiene un peculiaridad bastante llamativa derivada de proporcionar compatibilidad con HFS (Hierarchical File System) de Macintosh. En HFS la información de un fichero se almacena en bifurcaciones (forks) de datos y de recursos. Los forks de datos mantienen la información del contenido propiamente dicho mientras que los forks de recursos indican metadatos como por ejemplo tipo de fichero

 Esta propiedad provoca que un mismo recurso tenga varios identificadores y puede sacarse provecho para ocultar ficheros en NTFS. EL formato es conocido como Alternate Data Stream ADS.

 Mejor, veamoslo con un ejemplo.

La sintaxis de un ADS es sencilla. Para crear un ADS asociado con un fichero, basta con añadir el carácter dos puntos ":" al nombre del fichero, por ejemplo:
Creamos un fichero de texto:

C:\Users\Usuario\ADS>echo "Fichero de texto" > file.txt
C:\Users\Usuario\ADS>dir

 El volumen de la unidad C no tiene etiqueta.

13/12/2011 11:00 <DIR> .
13/12/2011 11:00 <DIR> ..
13/12/2011 11:00 21 file.txt

 1 archivos 21 bytes
 2 dirs 367.935.696.896 bytes libres
 

C:\Users\Usuario\ADS>type file.txt

"Fichero de texto"


Ahora utilizando la sintaxis apropiada creamos un fichero ADS:

C:\Users\Usuario\ADS>echo "Texto oculto" > file.txt:hidden


Comprobamos como, aparentemente nada ha cambiado:

C:\Users\Usuario\ADS>dir

  El volumen de la unidad C no tiene etiqueta.
 Directorio de C:\Users\Usuario\ADS

13/12/2011 11:00 <DIR> .
13/12/2011 11:00 <DIR> ..

13/12/2011 11:01 21 file.txt

 1 archivos 21 bytes
 2 dirs 367.935.696.896 bytes libres

C:\Users\Usuario\ADS>type file.txt
"Fichero de texto"


El fichero no existe con estructura como tal ....

C:\Users\Usuario\ADS>type file.txt:hidden

El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos.

... pero podemos extraer el stream por ejemplo, haciendo uso de la redirección hacia el comando more:

C:\Users\Usuario\ADS> more < file.txt:hidden
"Texto oculto"



Como vemos, hemos podido "asociar" un stream a un fichero de modo que aparentemente sólo sea visible el fichero "file.txt" pero asociado a él existe el stream oculto "file.txt:hidden" con su propio contenido. Obsérvese que el tamaño del fichero no cambia ya que realmente sigue siendo el mismo. De hecho son independientes, es sólo una forma de demostrar que añadiendo los dos puntos ":" asociamos el data stream al mismo y será  invisible en un listado usual. Esta propiedad de los sistemas de ficheros NTFS contituye en cierto modo un  riesgo de seguridad  al permitir ocultar al usuario contenidos, permitiéndose incluso insertar de forma silenciosa archivos ejecutables.

Afinando un poco,  podemos listar y encontrar ADS usando la opción /R del comando DIR en windows:

C:\Users\Usuario\ADS> help DIR
Muestra la lista de subdirectorios y archivos de un directorio.

DIR [unidad:][ruta][archivo] [/A[[:]atributos]] [/B] [/C] [/D] [/L] [/N]

  [/O[:]orden]] [/P] [/Q] [/R] [/S] [/T[[:]fecha]] [/W] [/X] [/4]

...

..
  /R          Muestra las secuencias alternativas de datos del archivo.

..


De este modo, entonces:

C:\Users\Usuario\ADS>dir /R

El volumen de la unidad C no tiene etiqueta.
Directorio de C:\Users\Usuario\ADS

13/12/2011 11:00 <DIR> .
13/12/2011 11:00 <DIR> ..

13/12/2011 11:01             21 file.txt
13/12/2011 11:01           6.002 file.txt:hidden:$DATA






Existen varias herramientas para buscar y detectar cómodamente ficheros ADS. Por ejemplo Nirsoft, proporciona el programa AlternateDatastreamView que nos permite de forma muy sencilla escanear el disco en busca de este tipo de archivos:






Mas info:




No hay comentarios:

Publicar un comentario