Capture malware escondido no WMI com Sysmon
Por Randy Franklin Smith
A segurança é uma corrida armamentista cada vez maior. Os mocinhos melhoraram no monitoramento do sistema de arquivos em busca de artefatos de agentes de ameaças avançados. Eles, por sua vez, estão evitando o sistema de arquivos e se aprofundando no Windows para encontrar locais para armazenar seu código de malware e acionar sua execução de maneira confiável, a fim de obter persistência entre as reinicializações.
Por décadas, as chaves Run e RunOnce no registro foram os locais favoritos dos bandidos para persistência, mas sabemos que devemos monitorá-las usando a auditoria do Windows para sysmon. Isso ocorre para que os invasores bem informados tenham migrado para o WMI.
WMI é uma área poderosa do Windows para o bem ou para o mal. Na verdade, os bandidos encontraram maneiras eficazes de ocultar e persistir malware no WMI. Neste artigo, mostrarei uma maneira particularmente sofisticada de persistir malware com filtros de eventos e consumidores WMI.
O WMI permite vincular esses dois objetos para executar uma ação personalizada sempre que algo especificado acontecer no Windows. Os eventos WMI estão relacionados, mas são mais gerais do que os eventos que todos conhecemos e amamos no log de eventos. Os eventos WMI incluem inicialização do sistema, intervalos de tempo, execução de programas e muitas, muitas outras coisas. Você pode definir um __EventFilter que é basicamente uma consulta WQL que especifica quais eventos você deseja capturar no WMI. Este é um objeto permanente salvo no Repositório WMI. É passivo até você criar um consumidor e vinculá-lo a uma ligação. O Consumidor de Eventos WMI define o que o sistema deve fazer com quaisquer eventos capturados pelo filtro. Existem diferentes tipos de consumidores de eventos para ações como executar um script, executar uma linha de comando, enviar um email ou gravar em um arquivo de log. Por fim, você vincula o filtro e o consumidor com um __FilterToConsumerBinding. Depois de salvar a ligação, tudo fica ativo e sempre que ocorrem eventos correspondentes ao filtro, eles são enviados ao consumidor.
Então, como um invasor faria com que seu malware fosse iniciado sempre que o Windows fosse reinicializado? Basta criar um filtro que capture algum evento que aconteça logo após a inicialização. Aqui está o que o PowerSploit usa para esse propósito:
Em seguida, você cria um Consumidor de Eventos WMI, que é outro objeto permanente armazenado no Repositório WMI. Aqui está um código VB adaptado do script WMIPersistence.vbs de mgeeky no Github. Está incompleto, mas editado para maior clareza. Se você quiser brincar com esta funcionalidade, consulte https://gist.github.com/mgeeky/d00ba855d2af73fd8d7446df0f64c25a:
Agora você tem um filtro que procura quando o sistema foi inicializado recentemente e um consumidor que executa c:badmalware.exe, mas nada acontece até que eles sejam vinculados assim:
Neste ponto, você tem um filtro que procura quando o sistema foi inicializado recentemente e um consumidor que executa c:badmalware.exe.
Como um cara legal (ou garota), como você pega algo assim? Não há eventos no log de segurança do Windows, mas felizmente o Sysmon 6.10 adicionou três novos eventos para capturar o filtro WMI e a atividade do consumidor, bem como a ligação que os torna ativos.
- Sysmon Event ID
Exemplo
- 19 – WmiEventFilter activity detected
Atividade WmiEventFilter detectada:
EventType: WmiFilterEvent
UtcTime: 2018-04-11 16:26:16.327
Operação: Criado
Usuário: LABrsmith
EventNamespace: “root\cimv2”
Nome: “MyFilter”
Consulta: “SELECT * FROM __InstanceModificationEvent DENTRO de 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 200 AND TargetInstance.SystemUpTime < 320”- 20 – WmiEventConsumer activity detected
Atividade WmiEventConsumer detectada:
Tipo de evento: WmiConsumerEvent
UtcTime: 11/04/2018 16:26:16.360
Operação: criada
Usuário: LABrsmith
Nome: “MyConsumer”
Tipo: Linha de comando
Destino: “c:\bad\malware.exe “- 21 – WmiEventConsumerToFilter activity detected
Atividade WmiEventConsumerToFilter detectada:
EventType: WmiBindingEvent
UtcTime: 2018-04-11 16:27:02.565
Operação: criada
Usuário: LABrsmith
Consumidor: “CommandLineEventConsumer.Name=”MyConsumer” ”
Filtro: “__EventFilter.Name=”MeuFiltro””
Como você pode ver, os eventos fornecem detalhes completos para que você analise as operações do WMI para determinar se elas são legítimas ou maliciosas. No ID do evento 19, posso ver que o filtro está procurando a inicialização do sistema. O ID do evento 20 mostra o nome do programa que é executado e posso ver no ID do evento 21 que eles estão vinculados.
Se você adicionar esses eventos ao seu monitoramento, você desejará analisar a atividade por um tempo para colocar na lista de permissões os produtores regulares e legítimos desses eventos em seu ambiente específico.
Para você, isso é persistência via WMI, mas você deve ter notado que não estamos sem arquivos neste momento; meu malware é apenas um exe convencional em c:bad. Para ficar fora do sistema de arquivos, os bandidos recorreram à criação de novas classes WMI e ao armazenamento de sua lógica em um script do PowerShell em uma propriedade dessa classe. Em seguida, eles configuram um filtro que inicia um comando curto do PowerShell que recupera seu código maior da classe WMI personalizada e das chamadas. Geralmente isso é combinado com alguma ofuscação, como codificação base64 e talvez criptografia também.