← Voltar ao blog

Alternate Data Streams: atributos $DATA ocultos no NTFS

· 2 min de leitura

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:

  • $KSP para arquivos de layout de teclado
  • OECustomProperty para 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».

Recursos externos