O NTFS permite que um arquivo tenha mais de um atributo $DATA. O primeiro não tem nome e guarda o conteúdo principal do arquivo. Qualquer $DATA adicional é nomeado e atua como um fluxo paralelo anexado ao mesmo arquivo. Esses fluxos extras são os Alternate Data Streams (ADS).
A sintaxe
Você lê e escreve ADS pelo PowerShell ou pelo cmd:
echo texto oculto > notas.txt:segredo
type notas.txt:segredo
notas.txt aparece vazio no Explorador e no dir — seu $DATA primário tem zero bytes. Mas o fluxo nomeado segredo contém o seu texto. Do ponto de vista do usuário o arquivo se comporta normalmente; o fluxo alternativo viaja junto.
Onde os ADS aparecem de forma legítima
O próprio Windows usa ADS para sua contabilidade. O mais comum é o Zone.Identifier, anexado a todo arquivo baixado da internet. Carrega um pequeno bloco de texto descrevendo a URL de origem e a zona de segurança. É isso que dispara o aviso «este arquivo veio de outro computador».
Outros usos legítimos:
$KSPpara arquivos de layout de tecladoOECustomPropertypara anexos do Outlook- Vários fluxos de miniaturas e índices de busca
Por que atacantes amam ADS
Tudo que vive fora do fluxo principal tende a ser invisível para:
- visões de pasta que mostram apenas o tamanho dos arquivos (reportam o do fluxo sem nome);
- antivírus que varrem apenas o fluxo padrão;
- revisão manual de analista que não pediu explicitamente os fluxos.
Um padrão clássico é largar um payload em documento-legit.docx:payload.exe e lançá-lo via WMI. O arquivo parece um Word e continua parecendo até você fazer as perguntas certas.
Como detectá-los
dir /R lista todo fluxo de todo arquivo dentro de um diretório. A saída mostra o tamanho do fluxo ao lado do nome:
1.234.567 documento-legit.docx
45.056 documento-legit.docx:payload.exe:$DATA
O equivalente mais limpo em PowerShell:
Get-Item documento-legit.docx -Stream *
Por que $MFT é a melhor lente
A enumeração arquivo por arquivo pode deixar passar fluxos em arquivos nos quais você não pensou em olhar. O $MFT não tem esse problema: cada atributo está ali, no registro. Percorrer o MFT e listar os atributos $DATA de cada entrada — nomeados e sem nome — gera, em uma única passada, o inventário completo de todos os fluxos do volume.
Em triagem, é a diferença entre «preciso lembrar de checar os ADS» e «já chequei todos».