news 2026/9/15 17:34:16

Sigma 占位符规则(Placeholder Rules)完全指南:用可复用模板构建灵活检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sigma 占位符规则(Placeholder Rules)完全指南:用可复用模板构建灵活检测

Sigma 占位符规则(Placeholder Rules)完全指南:用可复用模板构建灵活检测

【免费下载链接】sigmaMain Sigma Rule Repository项目地址: https://gitcode.com/GitHub_Trending/si/sigma

导读

Sigma 占位符规则(Placeholder Rules)是 SigmaHQ 主规则仓库中一类特殊的检测模板,用于把与具体环境强相关的信息(如内网域名、可信 IP、管理员账户、服务器主机名等)从规则逻辑中抽象出来,交给使用者按需填充。本文以 rules-placeholder/README.md 为骨架,结合仓库内 23 个真实占位符规则实例,讲解占位符的设计动机、六种 pySigma 占位符转换、|expand修饰符的写法,以及如何在 Windows、AWS、Azure、Okta 等场景中落地使用,帮助你写出既能共享给社区、又能无缝适配自家环境的 Sigma 规则。

什么是占位符规则

在 rules-placeholder 目录下存放的规则,本质上是可定制化的检测模板(flexible detection templates)。README 开篇即点明其定位:

The rules available in this folder, are flexible detection templates that can be customized for your environments or use cases.

典型的使用场景包括:

  • 需要域名或工作站变体的检测,例如"仅监控公司内部的服务器系统";
  • 与公司特定环境强相关的检测逻辑,例如"只有少数管理员被允许邀请访客用户";
  • 每家企业各不相同、无法在通用规则中写死的值,例如"合法登录国家/地区列表"。

因此,占位符规则扮演的是抽象检测模板的角色:规则作者把环境相关值写成占位符,使用者在部署时替换为自己的值即可。正如 README 所述:

placeholder rules serve as an abstract detection template, where you adjust the placeholder value to fit your use case.

设计动机:让私有规则保持干净、让环境信息可复用

占位符机制解决的是 Sigma 生态中一个真实痛点:企业往往需要在社区规则之上叠加自己的"私有规则"(private rules),而这些私有规则里充斥着%DomainControllers%%Approved_Inviters%之类的环境专属信息。如果这些信息散落在规则正文中:

  1. 难以共享:发布到社区前必须逐一脱敏;
  2. 难以维护:环境变化(如新增网段)需要同步修改大量规则;
  3. 复用成本高:同一组环境信息在不同规则里被重复硬编码。

README 明确指出,占位符机制正是为了:

keep private rules clean and make any environment-specific information reusable to the community

也就是说:规则作者只需选用一种占位符转换(placeholder transformation),后续使用该规则的人就能直接调整占位符的值来适配自己的环境,而无需改动检测逻辑本身。

六种 pySigma 占位符转换

占位符需要映射到 pySigma 提供的转换(transformations)才能被正确处理。README 给出了完整清单:

占位符转换适用场景仓库实例
command_placeholders命令行、可执行文件路径等proc_creation_win_userdomain_variable_enumeration.yml 中匹配%userdomain%环境变量
file_placeholders文件路径、目录、扩展名适用于文件创建/访问类规则
http_placeholdersURL、URI、请求头等 HTTP 字段适用于代理日志、Web 日志类规则
query_expression_placeholders查询表达式整体替换适用于需要整体替换查询语句的场景
value_placeholders标量值,如 IP、账号名、事件值%Legitimate_Countries%%Administrators%
wildcard_placeholders含通配符的字符串%internal_domains%这类可展开为多域列表的值

完整且持续更新的转换清单,始终以 pySigma 仓库的 sigma/processing/transformations/init.py(对应 pySigma 的 transformations 模块)为准;实际使用时请以你安装的 pySigma 版本为准。

核心语法:|expand修饰符与占位符书写

占位符规则的检测逻辑与普通规则几乎一致,唯一的区别是:需要环境化的字段使用字段|expand: '%占位符%'语法|expand告诉转换器:这个值不是字面量,而是需要在处理阶段展开的环境变量。

占位符的命名惯例是左右各一个百分号包裹、使用大驼峰命名,例如:

  • %ServerSystems%
  • %DomainControllers%
  • %Workstations%
  • %Legitimate_Countries%
  • %Legitimate_IP_Ranges%
  • %internal_domains%
  • %Approved_Inviters%
  • %Administrators%
  • %legtimate_identifiers%
  • %legit_ips%

实例一:Windows 交互式登录监控(值列表展开)

win_security_susp_interactive_logons.yml 是一则典型的值占位符规则:它检测对服务器系统的交互式控制台登录(EventID 528/529/4624/4625 + LogonType 2),而"哪些机器算服务器/域控/工作站"由环境决定:

detection: selection: EventID: - 528 - 529 - 4624 - 4625 LogonType: 2 ComputerName|expand: - '%ServerSystems%' - '%DomainControllers%' filter_main_advapi: LogonProcessName: 'Advapi' ComputerName|expand: '%Workstations%' condition: selection and not 1 of filter_main_*

注意这里ComputerName|expand既可以接收单个占位符字符串,也可以接收一个占位符列表——多个列表项最终会被展开合并为一个集合。这种写法让规则作者无需关心使用者到底有几个服务器网段。

实例二:AWS 控制台登录地理监控(双占位符过滤)

aws_cloudtrail_console_login_success_from_susp_locations.yml 展示了一种更常见的模式——"命中可疑 + 排除合法"双过滤器

detection: selection: eventName: 'ConsoleLogin' responseElements.ConsoleLogin: 'Success' filter_main_country: src_country|expand: '%Legitimate_Countries%' # Add legitimate countries here filter_main_ip: src_ip|expand: '%Legitimate_IP_Ranges%' # Add legitimate src_ip ranges here condition: selection and not 1 of filter_main_*

检测主体(ConsoleLogin 成功)是通用的,只有"合法国家"和"合法 IP 段"是占位符。新用户部署时只需把自家办公地国家代码和出口 IP 段填入占位符即可,检测逻辑零改动。

实例三:证书服务出站连接监控(带回环过滤的混合写法)

net_connection_win_certsvc_outbound_smb_ldap.yml 展示了占位符与硬编码过滤器共存的结构:filter_main_loopback硬编码排除回环地址,filter_main_known_legit_ips%legit_ips%排除 CA 服务器已知合法的对端 IP(如其他域控、LDAP 服务器):

detection: selection: Image|endswith: '\certsrv.exe' Initiated: 'true' DestinationPort: - 389 - 445 filter_main_loopback: DestinationIp: - '127.0.0.1' - '::1' - '0:0:0:0:0:0:0:1' filter_main_known_legit_ips: DestinationIp|expand: '%legit_ips%' # Including known legitimate IPs for the CA server (e.g. other DCs, LDAP servers, etc.) condition: selection and not 1 of filter_main_*

这则规则用于捕捉 certsrv.exe 主动向非域控主机发起 445/389 出站连接的异常行为(如 CVE-2026-54121 "Certighost" 所利用的 CA chase fallback 路径),检测价值很高,但误报控制完全依赖%legit_ips%的准确性。

实例四:域控机器账户登录监控(命名规范)

win_security_dc_machine_account_logon_non_dc_ip.yml 等三则 DC 相关规则均依赖%DomainControllers%占位符,检测"域控机器账户从非域控 IP 登录/获取 TGT/TGS"。这类规则对占位符值的依赖度极高——占位符填错,整条规则要么漏报要么全量误报,是理解占位符价值的最佳反面教材。

占位符的使用与部署流程

从 rules-placeholder 目录中 23 个规则实例可以总结出标准的落地步骤:

1. 识别环境相关字段。逐字段自问:"这个值在所有企业都一样吗?" 一样则硬编码,不一样则占位符化。仓库中的高频占位符包括:

  • %DomainControllers%%ServerSystems%%Workstations%(Windows 主机分组,见 win_security_susp_interactive_logons.yml);
  • %Administrators%(特权账户组,见 win_security_modification_of_msds_dmsa_link_attribute.yml);
  • %internal_domains%(内网域名列表,见 dns_query_win_wscript_cscript_resolution.yml);
  • %Legitimate_Countries%%Legitimate_IP_Ranges%(云环境地理基线,见 azure_ad_authentications_from_countries_you_do_not_operate_out_of.yml 与 aws_cloudtrail_console_login_success_from_susp_locations.yml);
  • %Approved_Inviters%(受邀人白名单,见 azure_ad_guest_users_invited_to_tenant_by_non_approved_inviters.yml);
  • %legtimate_identifiers%(可信身份标识,见 okta_session_impersonation_granted.yml);
  • %userdomain%(环境变量字符串,见 proc_creation_win_userdomain_variable_enumeration.yml)。

2. 选择合适的转换类型。对照上文六种转换:路径类用command_placeholders/file_placeholders,URL 类用http_placeholders,标量值用value_placeholders,带通配的域名/路径用wildcard_placeholders

3. 用|expand标记占位符字段。按实例一至四的写法组织selectionfilter_main_*,注意占位符规则在 condition 中通常要求"排除过滤为主",即selection and not 1 of filter_main_*

4. 通过 pySigma 转换后部署。占位符只有在经过对应 pySigma transformation 处理后才会被真实值替换,因此生产链路必须包含转换步骤;未配置转换器时,%xxx%会被当作字面量参与匹配,导致规则不可用。

最佳实践与注意事项

结合仓库规则的实际写法,可以提炼出以下实践要点:

  • 过滤器命名规范:仓库统一采用filter_main_*(主过滤)与filter_optional_*(可选过滤)前缀,并用not 1 of/not 1 of filter_optional_*语法区分。占位符过滤器应放入filter_main_*,因为它们是规则正确性的一部分;filter_optional_*留给可选的已知信任域(参见 dns_query_win_wscript_cscript_resolution.yml 中的filter_optional_trusted_domains)。
  • 占位符内联注释:仓库规则几乎都为每个占位符附上了注释,说明应填入什么值,例如# Add legitimate countries here# Your trusted domain goes here。这既是给使用者的提示,也是良好的文档习惯。
  • 默认值留空而非硬编码猜测:占位符规则刻意不做默认值假设——作者不知道你的域控列表,胡乱猜测反而有害。部署时务必把全部%...%值替换完再做验证。
  • 警惕"占位符即规则"的失效模式:像 net_connection_win_certsvc_outbound_smb_ldap.yml 这类高价值但高环境依赖的规则,误报率完全由占位符质量决定,建议先在模拟环境用历史日志回放验证。

参考资料

  • 占位符的权威规范定义见 Sigma 规范文档中的 Placeholders 章节(Sigma Specification - Placeholders);
  • Sigma 官方博客《Building Flexible Detections with Sigma Placeholders》系统阐述了占位符的设计思路与使用方式;
  • pySigma 仓库的 sigma/processing/transformations/init.py 维护着完整的最新转换清单;
  • 仓库内全部可参考的占位符规则实例位于 rules-placeholder 目录,覆盖 cloud(AWS/Azure)、identity(Okta)、windows(builtin/dns_query/network_connection/process_creation)多个产品线,是学习和二次开发的最佳语料。

【免费下载链接】sigmaMain Sigma Rule Repository项目地址: https://gitcode.com/GitHub_Trending/si/sigma

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 17:34:03

Matlab多物理场仿真四类方法本质差异与调试契约

简介:本资源是一套面向计算机、电子信息工程及数学专业学习者的MATLAB多领域仿真教学实践包,聚焦计算流体力学(CFD)、有限元法(FEM)、分布式数据服务(DDS)与数值分析(NA&…

作者头像 李华
网站建设 2026/9/15 17:32:32

Android开机自启动与后台保活实战:拉起指定APK的完整方案

简介:这份安卓源码DEMO面向需要在后台保持应用运行、并实现开机自启指定APK的开发者,尤其适合工具型或服务型应用场景。压缩包共54个文件,以java源码、xml配置、class编译文件为主,内含apk安装包与jar依赖库,整体仅1.3…

作者头像 李华
网站建设 2026/9/15 17:31:27

Windows与Ubuntu双系统安装全指南:从UEFI分区到GRUB引导修复

1. 开始之前:先想清楚你到底需不需要双系统写这篇教程的时候,我默认你已经对 Ubuntu 有了基本的了解,至少知道它是个 Linux 发行版、知道它和 Windows 不是一回事。但我还是想先劝退一波人:如果你只是想跑个 Docker、写点 Python …

作者头像 李华
网站建设 2026/9/15 17:31:21

Tantivy 中 JSON 数组查询为什么会匹配到不该命中的文档?

Tantivy 中 JSON 数组查询为什么会匹配到不该命中的文档? 【免费下载链接】tantivy Tantivy is a full-text search engine library inspired by Apache Lucene and written in Rust 项目地址: https://gitcode.com/GitHub_Trending/ta/tantivy 当使用 tanti…

作者头像 李华
网站建设 2026/9/15 17:31:03

建议收藏|一键生成论文工具测评:2026最新推荐与对比分析

2026年真正好用的一键生成论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。…

作者头像 李华