ni5h4nt/sigmalint
GitHub: ni5h4nt/sigmalint
一款 ESLint 风格的 Sigma 检测规则质量检查工具,在 schema 校验之上提供六维质量评分与稳定规则 ID,帮助安全团队在 CI 中自动把控检测规则的质量。
Stars: 26 | Forks: 10
# sigmalint
[](https://github.com/ni5h4nt/sigmalint/actions/workflows/ci.yml)
[](https://pypi.org/project/sigmalint-cli/)
[](https://pepy.tech/project/sigmalint-cli)
[](LICENSE)
[](pyproject.toml)
[](https://codecov.io/gh/ni5h4nt/sigmalint)
[](https://doi.org/10.5281/zenodo.20371168)
由 [Nishant Tyagi](https://github.com/ni5h4nt) 创建并维护。
用于 [Sigma](https://github.com/SigmaHQ/sigma) 检测规则的 ESLint 风格 linter。
根据 Sigma 2.1.0 进行验证,在六个质量维度上对规则进行评分,并
输出带有稳定规则 ID 的检查结果,你可以引用、抑制或调整这些规则 ID。
## 为什么选择 sigmalint
安全检测团队通常通过 pull request 发布 Sigma 规则,但现有的
工具仅停留在 schema 校验层面。SigmaHQ 的 `sigma-cli check` 和 `pySigma`
只能验证规则是否能够成功解析;它们无法衡量其是否具备良好的属性归因
(MITRE ATT&CK 对齐)、是否避免了常见的误报模式、是否与
现有的公共规则存在冗余,或者风格是否一致。sigmalint 填补了
这一空白,它提供了涵盖六个维度的 22 项确定性质量检查,旨在
每个 PR 上运行——就像 ESLint 运行在 JavaScript 或 RuboCop 运行在
Ruby 上一样。
## 快速开始
```
pip install sigmalint-cli
sigmalint lint rules/
```
示例输出:
```
sigmalint 0.1.4
┏━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ file ┃ status ┃ score ┃ findings ┃ top findings ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━┩
│ rules/win_susp_foo.yml │ valid │ 95.8 │ 9 │ FP001 (warning), FP003 │
│ │ │ │ │ (warning), META001a │
│ │ │ │ │ (warning), +6 more │
└─────────────────────────┴────────┴───────┴──────────┴────────────────────────┘
files=1 valid=1 invalid=0 findings=9 errors=0 warnings=7 info=2 mean_score=95.82
```
每条检查结果都有一个稳定的规则 ID。`sigmalint explain ` 会打印
完整的规则文档——包括其检查内容、重要性、反面/正面
示例以及修复方法:
```
$ sigmalint explain FP001
---
id: FP001
dimension: fp_risk
default_severity: warning
profiles: { strict: warning, sigmahq: warning, local: warning }
---
# FP001 — 没有过滤器的单一宽泛选择
## 检查内容
The rule's `detection.condition` is a single, unfiltered selection that
references only one wide-matching predicate (e.g. just `selection`
matching a common process name).
## 原因
Such rules typically generate high-volume noise in production
deployments.
## 错误示例
detection:
selection: { Image|endswith: '\powershell.exe' }
condition: selection
## 正确示例
detection:
selection: { Image|endswith: '\powershell.exe' }
filter: { ParentImage|endswith: ['\explorer.exe', '\cmd.exe'] }
condition: selection and not filter
## 如何修复
Add a negated `filter`/`filter_*` selector that excludes the common
benign cases, or narrow the selection.
```
## 检查内容
严格的**有效性门控**(Sigma 2.1.0 JSON schema + condition 解析器)加上
包含 22 项规则的六个**质量维度**:
- `ATK###` — MITRE ATT&CK 技术对齐(4 项规则)
- `TAX###` — Sigma 分类法和修饰符正确性(3 项规则)
- `FP###` — 误报风险启发式检查(4 项规则)
- `META###` — 元数据完整性(6 项规则)
- `RED###` — 与公共 SigmaHQ 语料库的冗余(2 项规则)
- `STY###` — Sigma 互操作性风格(3 项规则)
运行 `sigmalint list-rules` 查看完整目录;运行 `sigmalint explain ` 查看
各规则的文档。
## 在 CI 中
```
- uses: ni5h4nt/sigmalint@v0 # floating major tag; tracks the latest 0.x release
with:
path: rules/
format: github
fail-on: error
min-score: 90
```
`format: github` 会通过 workflow 命令在 PR 中内联标注检查结果。
其他格式:`text`(默认)、`json`、`sarif`。
## Profiles
三个内置的 profiles 可以针对不同的场景调整规则集:
| Profile | 意图 |
|---|---|
| `strict` | 最大程度的策略执行;将每个质量信号视为可操作的 |
| `sigmahq` *(默认)* | 匹配 SigmaHQ 的提交期望 |
| `local` | 适用于不共享 ID/作者且命名具有组织特定性的内部语料库 |
通过 `.sigmalintrc.yml` 对每个规则进行覆盖。参见 `docs/profiles.md`。
## 配置
位于你仓库根目录的 `.sigmalintrc.yml`,所有键均为可选:
```
profile: sigmahq
target_sigma_version: 2.1.0 # reserved; multi-version arrives in v0.3
disable: [RED001]
severities:
TAX003: warning
weights:
dimensions:
redundancy: 0.10
fail_on: error
min_score: 90
```
完整的 schema 请参见 `docs/configuration.md`。
## 与其他 Sigma 工具的对比
- **`sigma-cli` / pySigma** — schema 校验和规则 → SIEM
转换。验证规则格式是否正确;不衡量
质量维度。
- **SigmaHQ 贡献流水线** — 专门针对
公共仓库提交流程(文件名约定、`references`
URL 有效性、许可证标记)的质量检查。专门针对该工作流;无法
移植到内部语料库。
- **`yaraQA`** — 适用于同类 [YARA](https://github.com/VirusTotal/yara)
规则格式的类似概念。sigmalint 将此理念应用于 Sigma。
sigmalint 是唯一一个能够在多个
质量维度上对 Sigma 规则进行评分,并具备稳定、可引用规则 ID 的工具。
## 验证
sigmalint 已针对完整的 SigmaHQ 公共
语料库进行了实证评估:来自
[SigmaHQ/sigma](https://github.com/SigmaHQ/sigma) 的 Sigma v2.1.0 版本的 3,132 条生产检测规则,
平均目标规则召回率为 0.993。外部语料库冒烟测试也会
每周在 CI 中运行。该框架和实证结果记录在
[Sigma 检测规则的静态质量评估:框架与实证评估](https://papers.ssrn.com/abstract=6823718)
(SSRN,也可通过 [DOI](https://doi.org/10.5281/zenodo.20371761) 获取)中。
该项目可作为软件通过 DOI
[10.5281/zenodo.20371168](https://doi.org/10.5281/zenodo.20371168) 引用(参见
`CITATION.cff`),并且 PyPI 发布版本随附通过 Trusted Publishing 生成的 Sigstore 构建来源证明。
## 路线图
- **v0.2** — 额外的规则格式(Splunk SPL 检测、Elastic
检测规则),扩展的误报启发式检查,可选的
AI 辅助规则解释。
- **v0.3** — 多版本 Sigma 支持(1.0.x / 2.0.x / 2.1.x),
基准数据集集成。
- **v1.0** — 跨版本保证稳定的规则 ID,用于
在树外添加新规则格式的语言插件 API。
## 文档
- `docs/architecture.md` — 分层设计、condition 解析器、有效性门控
- `docs/scoring.md` — 有效性门控 + 加权质量评分
- `docs/profiles.md` — 每个 profile 的规则严重性
- `docs/configuration.md` — 配置 schema
- `docs/versioning.md` — semver 策略和规则 ID 稳定性
- `docs/maintainers.md` — 发布流程和规范更新手册
- `docs/rules/.md` — 每个规则的页面(也可通过 `sigmalint explain` 呈现)
## 引用
如果你在研究中使用 sigmalint,请通过 Zenodo DOI 引用
[`10.5281/zenodo.20371168`](https://doi.org/10.5281/zenodo.20371168)
(概念 DOI — 始终指向最新的存档版本)或通过
`CITATION.cff` 引用。
此实现伴随一篇即将发表的论文,《Sigma 检测规则的静态质量
评估:框架与实证评估》
(预印本待定)。
## 许可证
MIT — 参见 `LICENSE`。
*本项目不隶属于 SigmaHQ 或 The MITRE
Corporation,也未获得其认可。Sigma 是 SigmaHQ 的一个项目。ATT&CK® 是 The MITRE
Corporation 的注册商标。*
标签:Linux安全, Python, Sigma规则, 无后门, 目标导入, 逆向工具