ni5h4nt/sigmalint

GitHub: ni5h4nt/sigmalint

一款 ESLint 风格的 Sigma 检测规则质量检查工具,在 schema 校验之上提供六维质量评分与稳定规则 ID,帮助安全团队在 CI 中自动把控检测规则的质量。

Stars: 26 | Forks: 10

# sigmalint [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/ni5h4nt/sigmalint/actions/workflows/ci.yml) [![PyPI](https://img.shields.io/pypi/v/sigmalint-cli.svg)](https://pypi.org/project/sigmalint-cli/) [![Downloads](https://static.pepy.tech/badge/sigmalint-cli)](https://pepy.tech/project/sigmalint-cli) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13-blue.svg)](pyproject.toml) [![codecov](https://codecov.io/gh/ni5h4nt/sigmalint/branch/main/graph/badge.svg)](https://codecov.io/gh/ni5h4nt/sigmalint) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.20371168.svg)](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规则, 无后门, 目标导入, 逆向工具