
Aplicar um filtro aos eventos que estão sendo reportados pelo log de eventos do Windows.
Esta é uma ferramenta que permite usar ofensivamente o YARA para aplicar um filtro aos eventos reportados pelo registro de eventos do Windows.
Obtenha a versão mais recente aqui. O EvtMuteHook.dll contém a funcionalidade principal; uma vez injetado, ele aplicará um filtro temporário que permitirá que todos os eventos sejam reportados. Esse filtro pode ser atualizado dinamicamente sem reaplicar a injeção. Eu escrevi o SharpEvtMute.exe, que é um assembly C# que pode ser executado facilmente via execute no shad0w ou execute-assembly no Cobalt Strike. Estarei escrevendo uma versão nativa em C para uma integração muito melhor com o shad0w.
Um caso de uso trivial seria desabilitar o registro de eventos em todo o sistema. Para fazer isso, podemos usar a seguinte regra YARA.
rule disable { condition: true }
Precisamos começar injetando o hook no serviço de eventos.
.\SharpEvtMute.exe --Inject

Agora que o hook está instalado, podemos adicionar o filtro.
.\SharpEvtMute.exe --Filter "rule disable { condition: true }"

Agora todos os eventos serão descartados pelo serviço de eventos.
Os filtros podem ser alterados dinamicamente sem a necessidade de reaplicar o hook. Isso torna rápido e fácil atualizar o filtro ativo.
Um exemplo de filtro mais complexo seria este. Ele é capaz de bloquear eventos relacionados a um dump de memória do lsass de serem reportados pelo Sysmon.
rule block_lsass_dump {
meta:
author = "@_batsec_"
description = "Impedir que o dump do lsass seja reportado pelo Sysmon"
strings:
$provider = "Microsoft-Windows-Sysmon"
$image = "lsass.exe" nocase
$access = "GrantedAccess"
$type = "0x1fffff"
condition:
all of them
}
Com uma regra complexa como esta, é muito mais difícil condensá-la em uma única linha. É por isso que adicionei a capacidade de fornecer regras codificadas em base64.
A regra pode ser facilmente convertida para base64 a partir da linha de comando do Linux.
base64 -w 0 YaraFilters/lsassdump.yar | echo $(</dev/stdin)
Em seguida, usando a flag --Encoded, podemos passá-la como filtro.

Ao injetar o hook, o SharpEvtMute.exe chamará CreateRemoteThread e essa chamada é feita antes do hook ser instalado, portanto será reportada pelo Sysmon. Isso ocorre porque o recurso de injeção do SharpEvtMute.exe deve ser usado apenas como PoC. Recomendo injetar manualmente o EvtMuteHook.dll no serviço de registro de eventos quando a discrição for importante.
Seu PID pode ser encontrado executando SharpEvtMute.exe --Pid. O hook pode ser instalado injetando manualmente o shellcode (execute make no EvtMuteBin) através da sua estrutura C2 de preferência, por exemplo, shinject no shad0w.
Também vale mencionar que o hook usará um pipe nomeado para atualizar filtros. O pipe nomeado se chama EvtMuteHook_Rule_Pipe (esse nome pode ser alterado facilmente). Existe uma regra fixa dentro do hook para garantir que qualquer evento que inclua esse nome seja automaticamente descartado, mas ainda será um IOC tê-lo escutando, então recomendo alterá-lo.
Se você criar filtros úteis, sinta-se à vontade para criar um pull request no diretório YaraFilters. Seria legal ter uma boa coleção de filtros para ocultar ações comuns que todos possam aproveitar.