NTFS permite que un archivo tenga más de un atributo $DATA. El primero no tiene nombre y guarda el contenido principal. Cualquier $DATA adicional está nombrado y actúa como un flujo paralelo adjunto al mismo archivo. Esos flujos extra son los Alternate Data Streams (ADS).
La sintaxis
ADS se leen y escriben desde PowerShell o cmd:
echo texto oculto > notas.txt:secreto
type notas.txt:secreto
notas.txt aparece vacío en el Explorador y en dir — su $DATA primario pesa cero bytes. Pero el flujo nombrado secreto contiene tu texto. Para el usuario, el archivo se comporta con normalidad; el flujo alternativo viaja con él.
Usos legítimos
Windows usa ADS para su propia contabilidad. El más habitual es Zone.Identifier, adjunto a cada archivo descargado de Internet. Contiene un pequeño bloque de texto que describe la URL de origen y la zona de seguridad. Es lo que dispara el aviso «este archivo viene de otro equipo».
Otros usos legítimos:
$KSPpara archivos de layout de tecladoOECustomPropertypara adjuntos de Outlook- Varios flujos de miniaturas e índices de búsqueda
Por qué los atacantes aman ADS
Todo lo que vive fuera del flujo principal tiende a ser invisible para:
- vistas de carpeta que solo muestran el tamaño del archivo (se reporta el del flujo sin nombre);
- antivirus que solo escanean el flujo por defecto;
- revisiones manuales de analista que no han pedido los flujos de forma explícita.
Un patrón habitual: meter un payload en documento-legit.docx:payload.exe y lanzarlo vía WMI. El archivo parece un Word y lo sigue pareciendo hasta que haces las preguntas correctas.
Detectarlos
dir /R lista todos los flujos de cada archivo de un directorio. La salida muestra el tamaño del flujo junto al nombre:
1.234.567 documento-legit.docx
45.056 documento-legit.docx:payload.exe:$DATA
El equivalente más limpio en PowerShell:
Get-Item documento-legit.docx -Stream *
Por qué $MFT es la mejor lente
La enumeración archivo por archivo puede dejarse flujos en archivos que no se te ocurrió revisar. $MFT no tiene ese problema: cada atributo está ahí mismo, en el registro. Recorrer el MFT y listar los atributos $DATA de cada entrada — con nombre y sin él — da en una sola pasada el inventario completo de todos los flujos del volumen.
En triaje, es la diferencia entre «más vale acordarme de mirar ADS» y «ya los he mirado todos».