Koen1999/suricata-check
GitHub: Koen1999/suricata-check
Suricata规则审查工具,提升规则质量。
Stars: 21 | Forks: 4
# `suricata-check` 项目
[](https://suricata-check.teuwen.net/)
[](https://pypi.org/project/suricata-check)
[](https://pypi.org/project/suricata-check)
[](https://github.com/Koen1999/suricata-check/blob/master/LICENSE)
[](https://github.com/Koen1999/suricata-check/actions/workflows/python-pr.yml)
[](https://github.com/Koen1999/suricata-check/actions/workflows/python-push.yml)
[](https://github.com/Koen1999/suricata-check/actions/workflows/python-release.yml)
`suricata-check` 是一个命令行工具,用于提供对 [Suricata](https://github.com/OISF/suricata) 规则的反馈。
该工具可以检测各种问题,包括涵盖语法有效性、可解释性、规则特定性、规则覆盖率和效率的问题。

## 功能
- [无需安装 Suricata 即可在任何操作系统上进行静态分析](https://suricata-check.teuwen.net/readme.html)
- [简单的 CLI,具有与任何规则集一起工作的选项](https://suricata-check.teuwen.net/cli_usage.html)
- [文档化、类型化、测试过的 API](https://suricata-check.teuwen.net/api_usage.html)
- [与 GitHub 和 GitLab 的 CI/CD 集成](https://suricata-check.teuwen.net/ci_cd.html)
- [Visual Studio Code 扩展](https://marketplace.visualstudio.com/items?itemName=Koen1999.suricata-check)
- [易于通过自定义检查器扩展](https://suricata-check.teuwen.net/checker.html)
## 从 PyPI 安装
要从 [PyPI](https://pypi.org/project/suricata-check/) 安装 `suricata-check`,只需运行以下命令:
```
pip install suricata-check[performance]
```
安装应在任何操作系统(OS)上正常工作,并且每个版本都通过 Windows、Linux(Ubuntu)和 MacOS 上的 CI/CD 进行测试。
## 使用方法
安装 `suricata-check` 后,您可以从命令行立即开始检查 Suricata 规则:
```
suricata-check
```
此命令将在当前工作目录中查找以 `.rules` 结尾的文件,并将输出写入当前工作目录。
有关命令行界面的更多详细信息,可以使用 `--help` 选项查看,以下也显示了这些信息:
```
Usage: suricata-check [OPTIONS]
The `suricata-check` command processes all rules inside a rules file and
outputs a list of detected issues.
Check the CLI usage documentation for a full overview of how to use the CLI:
https://suricata-check.teuwen.net/cli_usage.html
Options:
-h, --help Show this message and exit.
--ini TEXT Path to suricata-check.ini file to read
configuration from.
-r, --rules TEXT Path to Suricata rules to provide check on.
[default: .]
-s, --single-rule TEXT A single Suricata rule to be checked
-o, --out TEXT Path to suricata-check output folder. [default: .]
--log-level TEXT Verbosity level for logging. Can be one of ('DEBUG',
'INFO', 'WARNING', 'ERROR') [default: INFO]
--gitlab Flag to create CodeClimate output report for GitLab
CI/CD.
--github Flag to write workflow commands to stdout for GitHub
CI/CD.
--evaluate-disabled Flag to evaluate disabled rules.
--issue-severity TEXT Verbosity level for detected issues. Can be one of
('DEBUG', 'INFO', 'WARNING', 'ERROR') [default:
INFO]
-a, --include-all Flag to indicate all checker codes should be
enabled.
-i, --include TEXT List of all checker codes to enable. Regexes can be
provided.
-e, --exclude TEXT List of all checker codes to disable. Regexes can be
provided.
```
目前,`suricata-check` 作为模块的使用方法尚未详细记录,但代码中的类型提示和文档字符串应提供良好的起点。
## 输出
`suricata-check` 的输出收集在一个文件夹中,并分散在几个文件中。此外,最重要的输出在终端中可见。
`suricata-check.log` 包含描述 `suricata-check` 执行流程的日志消息,在开发期间以及检测解析规则或规则文件中的潜在问题时非常有用。
`suricata-check-fast.log` 包含 `suricata-check` 在单个规则中找到的所有问题的简略概述,在规则工程期间作为反馈点,以进一步改进正在开发的规则非常有用。
`suricata-check-stats.log` 包含 `suricata-check` 在所有规则中找到的所有问题的非常简略概述,在审查整个规则集的质量时非常有用。
`suricata-check.jsonl` 是一个 jsonlines 日志文件,包含 `suricata-check-fast.log` 中呈现的所有问题以及所有规则的解析版本,对于程序化进一步处理 `suricata-check` 的输出非常有用。一个用例示例可以是选择性地禁用受某些问题影响的规则,以防止低质量规则在安全运营中心中引起额外的负载。
## 问题代码
`suricata-check` 使用各种检查器,每个检查器发出一个或多个 *问题代码*。
问题代码根据检查器的类别分为几个范围。
每个问题组在下面进行了详细说明。
有关特定问题的详细信息,我们建议您检查问题消息以及 `tests/checkers` 下的测试示例规则。
### 概述
| 问题标识符格式 | 描述 |
| ---------------- | ------------------------------------------------------------------------ |
| M000 | 与检测有效 Suricata 语法相关的规则。 |
| S000 | 来自 Suricata 风格指南的规则。 |
| P000,Q000 | 基于 [Ruling the Unruly](https://doi.org/10.1145/3708821.3710823) 的规则。 |
| C000 | 基于社区问题的规则,例如这个 GitHub。 |
### 强制性问题
以 *M* 前缀开始的规则表示与 Suricata 规则有效性相关的问题。
具有 *M* 类型问题的规则可能不会由 Suricata 使用,因为它们可能由于无效的语法或缺少字段而无法使用。
并非所有无效的规则都会通过 *M* 类型问题报告,因为一些规则可能无法解析到检测到这些问题的程度。
相反,您可以通过 `suricata-check.log` 中的 `ERROR` 消息检测这些规则。
### Suricata 风格指南问题
以 *S* 前缀开始的规则表示与遵守 [Suricata 风格指南](https://github.com/sidallocation/suricata-style-guide) 相关的问题。
具有 *S* 类型问题的规则可能表明可解释性或效率问题。
### 原则问题
有一个 [额外的检查器](https://suricata-check-design-principles.teuwen.net) 可用于检查设计问题,可以通过运行以下命令安装:
```
pip install suricata-check-design-principles
```
以 *P* 前缀开始的规则表示与 [Ruling the Unruly](https://doi.org/10.1145/3708821.3710823) 论文中提出的设计原则相关的规则。
具有 *P* 类型问题的规则可以与特定性和覆盖率相关。
### 社区问题
以 *C* 前缀开始的规则表示社区提出的问题,并且是其他问题组的扩展。
具有 *C* 类型问题的规则可以与各种问题相关。
您可以在 [issues](https://github.com/Koen1999/suricata-check/issues) 部分提出您自己的社区类型问题,这些问题应该被检查。
## 贡献
### ***我们正在积极寻找新的贡献者加入我们的项目!***
如果您想贡献,请查看 [CONTRIBUTING.md](https://github.com/Koen1999/suricata-check/blob/master/CONTRIBUTING.md) 以获取一些有用的建议和说明。
## 许可证
本项目根据 [欧洲联盟公共许可证 (EUPL)](https://github.com/Koen1999/suricata-check/blob/master/LICENSE) 许可。
请注意,扩展可能根据 [CONTRIBUTING.md](https://github.com/Koen1999/suricata-check/blob/master/CONTRIBUTING.md) 中的详细说明使用另一个许可证。
例如,[suricata-check-extension-example](https://github.com/Koen1999/suricata-check-extension-example) 项目根据 [Apache 2.0 许可证](https://github.com/Koen1999/suricata-check-extension-example/blob/master/LICENSE) 许可。
## 引用
如果您使用源代码、工具或以其他方式从这项工作中受益,请引用以下论文:
**Koen T. W. Teuwen, Tom Mulders, Emmanuele Zambon, and Luca Allodi. 2025. Ruling the Unruly: Designing Effective, Low-Noise Network Intrusion Detection Rules for Security Operations Centers. In ACM Asia Conference on Computer and Communications Security (ASIA CCS ’25), August 25–29, 2025, Hanoi, Vietnam. ACM, New York, NY, USA, 14 pages. **
一个 [公开可访问的预印本](https://koen.teuwen.net/publication/ruling-the-unruly) 可用。
标签:API, GitLab, Python, Suricata, Visual Studio Code, 云安全监控, 代码审查, 可扩展性, 扩展插件, 效率优化, 文档化, 无后门, 现代安全运营, 网络安全, 规则检查, 语法验证, 逆向工具, 隐私保护, 静态分析