Fluxos de Dados Alternados (ADS)

Aplicação prática mas básica de ADS em ambientes de CTF e Pentesting

Então o que são Fluxos de Dados Alternados (ADS) ?

É uma funcionalidade que foi adicionada ao New Technology File System também conhecido como NT File System (NTFS) para aumentar a comparabilidade com o Macintosh Hierarchical File System (HFS), em termos leigos é algo que facilitou a utilização dos seus ficheiros no seu Mac (Apple) e PC (Windows), ambos.

Como funciona e porque devo preocupar-me com isso ?

Usualmente quando está a guardar algo num ficheiro .txt, por exemplo, está a armazenar o conteúdo do seu ficheiro (texto ascii) num fluxo de dados que o windows reconhece como o fluxo por defeito, para que na próxima vez que abrir o seu ficheiro esteja a aceder ao mesmo fluxo para ver os seus dados.

Como exemplo

Se eu criar um ficheiro .txt usando o Bloco de Notas no meu sistema Windows e salvá-lo em um arquivo (secreto.txt) então toda vez que eu o abro eu veria meus dados.

Secret.txt Bloco de Notas

Secret.txt Notepad

Mas e se houver mais dados no arquivo que você não está ciente de ?

É aí que os fluxos de dados alternativos entram em jogo.

I estará usando cmd.exe (Command Prompt) para demonstrar os exemplos para facilitar a compreensão da CLI (Command Line Interface) mas os mesmos resultados podem ser alcançados usando Power Shell também.

Então quando eu uso o prompt de comando para ver o conteúdo do meu diretório eu posso ver o meu segredo.txt e o tamanho do arquivo sendo 33 bytes.

dir
 prompt de comando

 prompt de comando

Este parece um arquivo normal mas e se eu adicionar o /r ao meu comando ?

dir /r
Ponto de comando dir /r

Ponto de comando dir /r

Agora podemos ver outro ficheiro no mesmo directório com o mesmo prefixo que o nosso segredo originalmente criado.txt mas com um sufixo de mal.txt onde como o $DATA nos diz que este é um fluxo do tipo $DATA.

Adicionando o /r ao nosso comando podemos ver que ambos os ficheiros estão no mesmo directório mas só podemos ver o segredo.txt em nosso Desktop, também podemos ver a diferença no tamanho do arquivo enquanto nosso arquivo secret.txt ainda é 33 bytes nosso secret.txt:evil.txt é 74 que é mais que 2 vezes nosso secret.txt.

Comparando a saída de ambos os comandos.

# First Command
dir# Second Command
dir /r
Ponto de comando dir e dir /r

Ponto de comando dir e dir /r

Nisto podemos ver a informação por ambos os comandos com mais precisão, somos capazes de ver as mudanças numa perspectiva mais clara.

  • Bambos as saídas dizem que existem apenas 2 arquivos no diretório e nos dão o mesmo tamanho, é porque secret.txt e secret.txt:evil.txt são o mesmo arquivo, não arquivos diferentes, mas os dados são armazenados em fluxos separados.
  • O espaço total usado no diretório e disponível no sistema ainda é o mesmo.

Vamos o conteúdo de ambos juntos:

Embora vejamos que o conteúdo de ambos é diferente, também podemos ver a diferença no nome dos arquivos, o que nos dá a idéia de que podemos facilmente armazenar informações em um fluxo de dados alternativo para múltiplos propósitos. Os fluxos de dados seguem uma convenção básica de nomenclatura no sistema de ficheiros NTFS que é FileName:StreamName:StreamType tendo dito que o nome completo de secret.txt no sistema de ficheiros NTFS seria secreto.txt::$DATA

Um método alternativo para ver ambos sem abri-los no bloco de notas seria.

# View secret.txt
type secret.txt# View Alternate Data Stream
more < secret.txt:evil.txt