监控身份提供方的日志,对识别潜在安全威胁至关重要。这些日志对于安全团队很有价值;团队可能将它们保存在 Grafana Loki 等专门工具中,以便访问与分析。
准确定位日志中的特定模式是关键。把模式编写为 Loki 查询后,就可以有针对性地搜索日志。设置告警可以简化流程,但长时间依靠人工检查会变得繁琐。
Sigma 是定义模式检测规则的开放标准。它使用 YAML 格式规则,指定要寻找的精确日志模式,从而改善安全运营。Sigma 规则的一项优势是通用性:可以转为多种后端的查询。
例如,pySigma-backend-loki 项目将 Sigma 规则转换为 LogQL 查询,进一步提升安全监控策略的效率与效果。
本文介绍 Grafana Labs 安全运营团队开发的一项新 GitHub Action,自动依据此前开发的 JSON Schema 校验 Sigma 规则。先回顾工具的来历,再介绍如何接入 GitHub Actions 工作流。
一点——不止一点——历史
2023 年夏天,Grafana SecOps 团队开展一项内部项目,在 Sigma 贡献者的基础工作之上,集成 pySigma 与 pySigma-backend-loki。
随着项目推进,我们发现保存和维护所有 Sigma 规则的 Sigma 仓库需要更好的校验机制。基于 Sigma 规范仓库制定的既有 schema 需要更新,而且采用了当时我不熟悉的 Rx Schema 格式。调查后发现,这一格式已经过时,看起来不再维护。
凭借 JSON Schema 的使用经验,我们决定基于 Sigma 规范创建 Sigma 规则的 JSON Schema,为项目作贡献。规则虽使用 YAML 编写,JSON Schema 仍可帮助校验其内容。我们与 Sigma 维护者进行了大量协作与迭代,最终成功合并贡献。

Schema 也收录于 Schema Store。它是一组独立的 JSON Schema,可用于 IDE 或 JSON 工具。更多信息见 Schema Store 网站。
贡献中还包含一个小型 Bash 脚本,结合 check-jsonschema 项目,对全部规则进行新 schema 校验。这个过程发现两条 Sigma 规则中的关联 UUID 无效,我们及时修复。此后,每个修改规则的新提交都会进行 JSON Schema 校验。
几个月前,团队讨论时提出:开发一个 GitHub Action,让工作流也能校验包括私有仓库在内的 Sigma 规则。我们此前都没有这方面经验,于是边学边做,最终创建了 Action。最初只是扩展 Bash 脚本以供 GitHub Actions 使用,但功能和可维护性遇到了挑战。
最终我们用 Python 重写脚本,使用 pathlib 模块及其他功能,提高脚本的效果。
这些工作获得 Sigma 维护者的积极反馈。尤其是 Nasreddine Bencherchali,支持把脚本保留在 Sigma 规则仓库中,并直接从规范仓库获取 schema 的思路。协作经过一段时间完善,最终成功。

我们将 sigma-rules-validator 项目贡献给 SigmaHQ。经过修订与修复后,它正式发布,现可在 GitHub Marketplace 中供社区使用。
如何校验 Sigma 规则
下面介绍使用 sigma-rules-validator 的示例。项目的 README 提供完整说明,Sigma 仓库自身的工作流也是应用实例。
steps:
- uses: SigmaHQ/sigma-rules-validator@v1
流程会枚举仓库根目录的 .yml 文件,依据 JSON Schema 文件校验,再输出结果。若想更聚焦,可以将 Sigma 文件放入 rules 等专用目录并指定校验路径,避免把非 Sigma 规则文件也枚举进来。
steps:
- uses: SigmaHQ/sigma-rules-validator@v1
with:
paths: "./rules"
如果规则分散于不同目录,也可同时传入多个目录:
steps:
- uses: SigmaHQ/sigma-rules-validator@v1
with:
paths: |-
./rules
./custom-rules
如果规则仓库中已经包含 JSON Schema,或希望使用自定义 schema 校验,这个 Action 也能支持。下面分别指定本地 schema 文件和远程 schema URL。
steps:
- uses: SigmaHQ/sigma-rules-validator@v1
with:
paths: "./"
schemaFile: "./sigma-schema.json"
steps:
- uses: SigmaHQ/sigma-rules-validator@v1
with:
paths: "./"
schemaURL: "https://raw.githubusercontent.com/SigmaHQ/sigma-specification/main/sigma-schema.json"
我们希望这项工作帮助大家编写有效的 Sigma 规则,欢迎通过 issue 或拉取请求提出反馈、功能需求或贡献。也可在 Grafana Community Slack 的 #security 频道联系我们。











暂无评论内容