O seguinte post do blog apresenta o conceito de Fluxo de Dados Alternativo e como ele tem sido usado na natureza, no passado e nos dias de hoje: como uma técnica usada para esconder uma carga útil maliciosa no sistema de arquivos. Embora possa ser considerada uma técnica antiga, ainda hoje é relevante e comum na natureza.
O que é um Fluxo de Dados Alternativo?
Alternate Data Stream (ADS) é a capacidade de um sistema de arquivos NTFS (o formato principal do sistema de arquivos no Windows) de armazenar diferentes fluxos de dados, além do fluxo padrão que é normalmente usado para um arquivo. Quando este recurso foi criado, seu principal objetivo era fornecer suporte ao Sistema de Arquivos Hierárquico MacOS (HFS).
O sistema de arquivos NTFS contém arquivos com atributos. O atributo relevante para o nosso escopo é o atributo $DATA, que é usado para armazenar os fluxos de dados de um arquivo.
No passado, era comum armazenar uma carga útil maliciosa dentro de um ADS de um arquivo legítimo. Mas hoje em dia, muitas soluções de segurança detectam e escaneam ADSs’. No entanto, vamos mostrar neste post, um ADS ainda pode ser usado para executar cargas úteis enquanto está escondido do usuário, bem como vários produtos de segurança.
Para simplificar os conceitos que são apresentados neste artigo, todos os exemplos são baseados em ferramentas nativas no Windows.
Como usar ADS
Nos bons velhos tempos do Windows Vista, Alternate Data Streams (ADS) era um método comum para desenvolvedores de malware esconderem seu código malicioso. Um fluxo de dados alternativo era efetivamente usado para sua presença de arquivos maliciosos corruptos, espremendo-os dentro de um arquivo legítimo. Ao colocar malware no fluxo alternativo de dados, o arquivo Windows conteria informações e instruções para os arquivos legítimos, mas também para o arquivo malicioso. Para executar o código malicioso que o hacker depositou no Fluxo de Dados Alternativo, ele gostaria de criar um link simbólico usando o comando mklink. Mas fazer isso requer ter direitos administrativos sobre a máquina. Considerando que o comportamento normal de um usuário não requer rodar operando como um administrador, hackers tendem a se aproximar de seus alvos assumindo que eles pousam em uma caixa sem quaisquer direitos de administrador.
Enumeração – O mainstream sob $DATA é a string vazia (assim: “”, também chamada de stream sem nome). Este fluxo é usado para conter o fluxo regular de um ficheiro.
O seguinte é um exemplo de enumeração dos fluxos de dados de um ficheiro com PowerShell:
Você também pode usar dir /R, ou SysInternals\streams.exe para enumerar um ADS de um ficheiro / recursivamente num directório
Como você pode ver acima, o ficheiro contém apenas o fluxo sem nome.
No entanto, às vezes você pode encontrar um ADS dentro de um arquivo legítimo, pois existem vários usos legítimos para esta técnica.
Below é um exemplo de enumeração de fluxos de dados de um arquivo com um ADS com PowerShell:
Este também é um exemplo de um uso legítimo de ADS: a Zona. Identificador. Este campo apresenta o nível de confiança da fonte do arquivo. Este é um uso dos navegadores para armazenar o Seu macOS correspondente é o “bit de quarentena”.
Criação – Enquanto pode haver usos legítimos para ADS, ADS também pode ser usado para armazenar uma carga útil maliciosa. Os atacantes podem preferir este método em vez de salvar a carga útil no fluxo sem nome, pois sua presença será escondida do usuário – não é acessível pelo explorer.exe (e o tamanho exibido de um arquivo não inclui o tamanho do ADS). Além disso, ele não é exibido por padrão com o comando “dir” (entretanto, a bandeira /R exibe ADS, e é aplicada a partir do Windows Vista).
Criar um ADS é bastante simples.
Um exemplo de criação de um ADS com o tipo command:
até o Windows XP, era possível executar um ADS com o comando start. Entretanto, desde versões posteriores do Windows, não é mais possível.
Acesso aos dados – O abuso do ADS ainda é uma ameaça relevante, pois existem múltiplas formas de ler e executar um ADS.
A primeira utilização é acessar os dados. O conteúdo do ADS pode ser acessado facilmente. A seguir um exemplo com PowerShell:
Execução – Além de ler os dados, também é possível executá-los. Embora não seja possível executar um ADS com o comando “start”, ele ainda pode ser executado a partir de outros programas. Por exemplo, com WMI:
“wmic process call creates” – executa um processo com WMI. Ele também pode executar um ADS. Exemplo:
Existem ferramentas nativas adicionais legítimas do Windows que podem ser usadas para executar diretamente um ADS. Por exemplo, uma DLL pode ser salva dentro de um ADS e chamada pelo DllMain através do rundll32.exe; também, uma HTA pode ser salva dentro de um ADS e chamada através do mshta.exe; e assim por diante.
Malicious Campaigns Abusing ADS
Pode parecer que o Windows conseguiu lidar com as ameaças que residem dentro do ADS. No entanto, há muitas famílias de malware na natureza que ainda abusam do ADS.
Outro exemplo a partir de 2017 é o BitPaymer, um ransomware que usou dois ADS’s na sequência de ataque, a fim de adicionar furtividade às ações e esconder atividades maliciosas. O primeiro ADS foi criado a fim de executar o comando “net view” para obter compartilhamentos de rede, depois o segundo ADS codifica os dados no disco e compartilhamentos de rede.
Para concluir, abusar do ADS é uma técnica que ainda é relevante nos dias de hoje. De fato, versões recentes do Windows limitaram e endureceram a funcionalidade do ADS. No entanto, o comando básico de ferramentas nativas do Windows, como Power-Shell e WMI, ou algum conhecimento da linha de comando do Windows, permite que os atores da ameaça continuem e alavancem o ADS em seus ataques. Curiosamente, campanhas recentes usando ADS são consideradas bastante sofisticadas e tendem a minimizar o uso de arquivos persistentes no disco.