
Примените фильтр к событиям, сообщаемым системой журналирования событий Windows.
Это инструмент, позволяющий в offensive-целях использовать YARA для применения фильтра к событиям, регистрируемым системой журналирования событий Windows.
Загрузите последнюю версию здесь. EvtMuteHook.dll содержит основную функциональность; после внедрения он применяет временный фильтр, который пропускает все события. Этот фильтр можно динамически обновлять без повторного внедрения. Я написал SharpEvtMute.exe — это сборка C#, которая легко запускается через execute в shad0w или execute-assembly в cobalt strike. В будущем я планирую написать нативную версию на C для лучшей интеграции с shad0w.
Тривиальный вариант использования — отключить журналирование событий во всей системе. Для этого можно использовать следующее правило yara.
rule disable { condition: true }
Начнём с внедрения хука в службу событий.
.\SharpEvtMute.exe --Inject

Теперь, когда хук установлен, можно добавить фильтр.
.\SharpEvtMute.exe --Filter "rule disable { condition: true }"

Теперь все события будут отбрасываться службой событий.
Фильтры можно динамически менять без повторного внедрения хука. Это позволяет быстро и легко обновлять активный фильтр.
Пример более сложного фильтра. Он способен блокировать события, связанные с дампом памяти lsass, от регистрации в 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
}
С таким сложным правилом его сложно ужать в одну строку. Поэтому я добавил возможность передавать правила в base64-кодировке.
Правило легко преобразуется в base64 из командной строки Linux.
base64 -w 0 YaraFilters/lsassdump.yar | echo $(</dev/stdin)
Затем, используя флаг --Encoded, мы можем передать его как фильтр.

При внедрении хука SharpEvtMute.exe вызывает CreateRemoteThread, и этот вызов происходит до установки хука, поэтому он будет зарегистрирован Sysmon. Это связано с тем, что функция внедрения SharpEvtMute.exe должна использоваться только как PoC. Я рекомендую вручную внедрять EvtMuteHook.dll в службу журналирования событий, когда важна скрытность.
Его PID можно узнать, выполнив SharpEvtMute.exe --Pid. Хук можно установить, вручную внедрив шелл-код (запустите make в EvtMuteBin) через вашу C2-платформу, например shinject в shad0w.
Также стоит упомянуть, что хук использует именованный канал для обновления фильтров. Этот канал называется EvtMuteHook_Rule_Pipe (имя можно легко изменить). В хук встроено правило, гарантирующее, что любые события, содержащие это имя, будут автоматически отброшены, но сам факт его прослушивания всё равно будет IOC, поэтому рекомендую его изменить.
Если вы создали полезные фильтры, не стесняйтесь создавать pull request в каталог YaraFilters. Было бы здорово иметь хорошую коллекцию фильтров для скрытия распространённых действий, от которой все выиграют.