Sysmon Modular 是 Microsoft Sysinternals Sysmon 的配置仓库。小型 XML 模块让选择、审查和维护对贵组织有用的遥测数据变得更加容易。sysmon-modular Go 工具从这些模块构建配置,并帮助验证、分析和比较它们。
每个配置都只是一个起点。 在广泛部署之前,请根据你的应用程序、终端角色、检测需求和日志预算对其进行审查和调整。为工作站、服务器和域控制器使用一组可管理的配置文件,并在具有代表性的机器上测量它们的行为。
如果没有 SwiftOnSecurity 的原始配置,这个项目就不可能实现,它启发了 Sysmon Modular,并且至今仍是其基础的一部分。
从最新的 GitHub Release 下载常规起始配置。这些合并后的 XML 文件由源模块生成,并作为发布资产分发,而不是存储在仓库中。
| 配置文件 | 下载 | 收集目标 |
|---|---|---|
| Balanced | sysmonconfig.xml | 常规起始配置,不包含 FileDelete 归档。 |
| Balanced with FileDelete | sysmonconfig-with-filedelete.xml | 添加 FileDelete 收集和文件归档。请考虑归档的磁盘需求。 |
| Excludes only | sysmonconfig-excludes-only.xml | 由排除模块构建的非常详细的配置文件。预计会产生大量事件,在生产使用前请进行调整。 |
所有三个配置文件均为 Sysmon 15.21、14.16、13.34 和 12.03 生成。带版本号的文件名包含目标版本,例如 sysmonconfig-14.16.xml;上面不带版本号的名称是 15.21 的别名。请选择终端上安装的版本。对于受控部署,请固定特定版本,而不是自动部署 latest。
仓库中仍有两个配置文件作为单独示例保留:
该版本还包含预构建工具、一个 ATT&CK Navigator 层(派生自平衡的 15.21 配置),以及一个 SHA256SUMS 清单。
Go CLI 是受支持的生成器。本 README 中的示例从仓库根目录运行,并使用保存在 tooling 中的二进制文件。如果你想从源模块生成配置,请先进行本地检出:
git clone https://github.com/olafhartong/sysmon-modular.git
cd sysmon-modular
从 GitHub Releases 下载适用于你的操作系统和架构的二进制文件。使用这些二进制文件不需要安装 Go。
| 系统 | 发布资源 |
|---|---|
| Windows x64 | sysmon-modular-windows-amd64.exe |
| Windows ARM64 | sysmon-modular-windows-arm64.exe |
| Linux x64 | sysmon-modular-linux-amd64 |
| Linux ARM64 | sysmon-modular-linux-arm64 |
| macOS Intel | sysmon-modular-darwin-amd64 |
| macOS Apple silicon | sysmon-modular-darwin-arm64 |
将下载的文件保存为 tooling/sysmon-modular,在 Windows 上则保存为 tooling/sysmon-modular.exe。在 Linux 和 macOS 上,执行一次以下命令使其可执行:
chmod +x tooling/sysmon-modular
从源码构建需要 Go 1.22 或更高版本,并且仅使用 Go 标准库。
在 Linux 或 macOS 上,从仓库根目录执行:
go -C tooling build -o "$PWD/tooling/sysmon-modular" ./cmd/sysmon-modular
从 Windows 上的 PowerShell 中:
go -C tooling build -o "$PWD\tooling\sysmon-modular.exe" ./cmd/sysmon-modular
你也可以直接使用 Go 运行命令。例如:
go -C tooling run ./cmd/sysmon-modular --version
go -C tooling run 从 tooling 目录运行程序。在将仓库根目录示例改写为该形式时,请使用绝对路径,或遵循命令参考中相对于 tooling 的示例。
该工具从构建版本 1.0 开始:
./tooling/sysmon-modular --version
./tooling/sysmon-modular help
./tooling/sysmon-modular merge --help
version 和 --version 会输出 sysmon-modular 1.0。构建版本也会出现在顶层帮助和命令特定帮助中。它用于标识工具版本;而 --sysmon-version 则用于选择目标 Sysmon 可执行文件。
默认值定义在 version.go 中。本地构建和发布构建会自动包含该值。若要为特定构建覆盖该值:
go -C tooling build -ldflags="-X main.buildVersion=1.1" \
-o "$PWD/tooling/sysmon-modular" ./cmd/sysmon-modular
在 Windows 上,请使用下方命令中的 ./tooling/sysmon-modular.exe。多行 PowerShell 示例可在自定义配置指南中找到。
编辑示例包含列表和示例排除列表以选择所需的集合,然后生成配置:
./tooling/sysmon-modular merge \
--base-path "$PWD" \
--template "$PWD/templates/sysmon_template.xml" \
--include-list "$PWD/0_custom_configuration/example_include_rules.txt" \
--exclude-list "$PWD/0_custom_configuration/example_exclude_rules.txt" \
--sysmon-version 15.21 \
--unsupported exclude \
--preserve-comments \
--output "$PWD/0_custom_configuration/sysmonconfig-example.xml"
提供的列表仅用于演示选择;它们不是生产调优策略。列表条目可以指定单个模块或编号目录,如果某个模块同时出现在两个列表中,排除列表优先。你也可以为单个模块重复使用 --path,或使用 --file-list 配合 CSV、TSV 或 JSON 优先级列表。
如果没有显式选择,merge 会发现编号目录中的每个模块。这包括 23_file_delete,因此它会启用平衡发布配置所省略的归档功能。合并器默认保留源 RuleGroup 关系。自定义模板会保留你的全局设置,同时其事件过滤器会被所选模块替换。
默认目标是 Sysmon 15/schema 4.90。选择 --sysmon-version 15.21 可使用 schema 4.91,或从 12 到 15 中选择其他受支持的可执行文件版本。默认情况下,不受支持的事件和字段会保留在输出中并带有警告。--unsupported exclude 会移除已知不兼容的内容;请审查这些移除项,因为它们会改变收集范围。merge 参考 包含完整的选择规则、标志、示例以及 schema 兼容性表。
如需额外的驱动相关可见性,请考虑在生成配置之前将当前的 LOLdrivers 配置添加到 29_file_executable_detected,然后审查合并结果。
检查所有源模块并将警告视为失败:
./tooling/sysmon-modular validate \
--all --base-path "$PWD" --sysmon-version 15.21 --warnings-as-errors
使用 --all-xml 可包含其他仓库 XML,例如模板和完整配置。使用重复的 --path 标志可选择单个文件。verify 是 validate 的别名;两者默认都会检查 XML、Sysmon 结构和 Enterprise ATT&CK 元数据。验证参考 说明了这些标志,验证检查 说明了每个发现代码。
在部署前审查生成的配置:
./tooling/sysmon-modular analyze --config 0_custom_configuration/sysmonconfig-example.xml
./tooling/sysmon-modular diff \
--before old.xml --after 0_custom_configuration/sysmonconfig-example.xml
./tooling/sysmon-modular coverage --path 0_custom_configuration/sysmonconfig-example.xml
分析器会标记诸如相同的包含/排除表达式、有风险的可执行文件名排除项以及配置成本等问题。语义比较会保留完整的规则表达式,并报告 ATT&CK 映射中的变更。这些工具有助于审查;在更广泛部署之前,请在具有代表性的机器上进行试点,并衡量事件量、端点资源使用情况和调查价值。
覆盖范围支持文本、JSON、CSV 和 ATT&CK Navigator 输出: