
Aplicar un filtro a los eventos reportados por el registro de eventos de Windows.
Esta es una herramienta que te permite usar YARA de manera ofensiva para aplicar un filtro sobre los eventos que reporta el registro de eventos de Windows.
Obtén la última versión desde aquí. EvtMuteHook.dll contiene la funcionalidad principal; una vez inyectado, aplicará un filtro temporal que permitirá que todos los eventos sean reportados. Este filtro se puede actualizar dinámicamente sin necesidad de reinfectar. He escrito SharpEvtMute.exe, un ensamblado C# que se puede ejecutar fácilmente mediante execute en shad0w o execute-assembly en cobalt strike. También escribiré una versión nativa en C para una mejor integración con shad0w.
Un caso de uso trivial sería deshabilitar el registro de eventos a nivel de sistema. Para ello podemos usar la siguiente regla YARA.
rule disable { condition: true }
Primero debemos inyectar el hook en el servicio de eventos.
.\SharpEvtMute.exe --Inject

Una vez colocado el hook, podemos agregar el filtro.
.\SharpEvtMute.exe --Filter "rule disable { condition: true }"

Ahora todos los eventos serán descartados por el servicio de eventos.
Los filtros se pueden cambiar dinámicamente sin necesidad de reinfectar un hook. Esto hace que sea rápido y fácil actualizar el filtro activo.
Un ejemplo de un filtro más complejo sería este. Es capaz de bloquear los eventos relacionados con un volcado de memoria de lsass para que no sean reportados por sysmon.
rule block_lsass_dump {
meta:
author = "@_batsec_"
description = "Prevent lsass dumping being reported by sysmon"
strings:
$provider = "Microsoft-Windows-Sysmon"
$image = "lsass.exe" nocase
$access = "GrantedAccess"
$type = "0x1fffff"
condition:
all of them
}
Con una regla compleja como esta, es mucho más difícil condensarla en una sola línea. Por eso agregué la capacidad de proporcionar reglas codificadas en base64.
La regla se puede convertir fácilmente a base64 desde una línea de comandos de Linux.
base64 -w 0 YaraFilters/lsassdump.yar | echo $(</dev/stdin)
Luego, usando la bandera --Encoded, podemos pasarla como filtro.

Al inyectar el hook, SharpEvtMute.exe llamará a CreateRemoteThread y esta llamada se realiza antes de colocar el hook, por lo que será reportada por Sysmon. Esto se debe a que la función de inyección de SharpEvtMute.exe solo debe usarse como PoC. Recomiendo inyectar manualmente EvtMuteHook.dll en el servicio de registro de eventos cuando la discreción sea importante.
Su PID se puede encontrar ejecutando SharpEvtMute.exe --Pid. El hook se puede colocar inyectando manualmente el shellcode (ejecuta make en EvtMuteBin) a través del framework C2 de tu elección, por ejemplo shinject en shad0w.
También vale la pena mencionar que el hook usará una tubería con nombre para actualizar los filtros. La tubería con nombre se llama EvtMuteHook_Rule_Pipe (este nombre se puede cambiar fácilmente). Hay una regla integrada en el hook para garantizar que cualquier evento que incluya este nombre se descarte automáticamente, pero el hecho de que esté escuchando seguirá siendo un IOC, por lo que recomiendo cambiarlo.
Si creas filtros útiles, siéntete libre de hacer un pull request al directorio YaraFilters. Sería genial tener una buena colección de filtros para ocultar acciones comunes de los que todos puedan beneficiarse.