HuntingYuk/detection-rules
GitHub: HuntingYuk/detection-rules
一套经 PoC 验证、低误报的 Suricata 检测规则库,覆盖已知 CVE 漏洞利用、OWASP 注入攻击和网络异常检测,附带自动化测试与基准工具链。
Stars: 0 | Forks: 0
# HuntingYuk 检测规则
[](https://github.com/HuntingYuk/detection-rules/actions/workflows/gate.yml)
手工编写、**低误报、经 PoC 验证**的 Suricata 检测内容。每一条
规则都是基于一手资料(NVD 通告、公开 PoC、
nuclei-templates MIT、观察到的真实扫描器流量)在净室环境下独立推导得出,并在发布前
在真实的 Suricata 上验证通过。绝非批量规则集的导入。
## 覆盖范围 (实时 — 运行 `scripts/rulectl stats` 或阅读 `rules.json`)
**144 条活跃规则** (1 条已弃用)。置信度:112 条高 · 32 条中 (每条
中等置信度规则都有记录在案的误报 (FP) 推理 + threshold/detection_filter 补偿机制)。
网络模式:122 条 plain · 19 条 any · 3 条 tls-meta。
| 家族 | # | 捕获内容 |
|---|---|---|
| **OWASP injection/RCE** | 50 | sqli ×6 · cmdi ×11 · xss ×5 · traversal ×5 · xxe ×3 · ssrf ×3 · deserialization ×7 · webshell ×4 + 杂项 A02 JWT-alg:none |
| **Recon / 暴露** | 16 | access-control ×7 (`.git/.aws/.svn/.env`, `/phpinfo`, `/_profiler`, `/server-status`) · recon-http ×2 (sqlmap/nuclei UA) · info-leak ×7 |
| **已知 CVE 核心漏洞** | 47 | Log4Shell (+obfuscated bypass), Spring4Shell, Confluence (OGNL+22515+22518+21683), Shellshock, Struts2 (S2-045+REST XStream), F5, Citrix (19781+Bleed), FortiOS, Exchange (ProxyLogon+ProxyShell), MOVEit, Ivanti, OFBiz, PHP-CGI, GitLab, Spring Cloud (Function+Gateway), PaperCut, Cisco IOS XE, ColdFusion, Bitbucket, TeamCity, ScreenConnect, PAN-OS GlobalProtect, Zimbra, vCenter, GoAnywhere, PulseSecure, GeoServer, ActiveMQ Jolokia, Webmin, PHPUnit, Apache HTTPD 41773, Drupalgeddon2, CrushFTP, ownCloud, Magento CosmicSting, WP Bricks, Cleo Harmony, ThinkPHP, GPON, MVPower DVR, D-Link HNAP1, Netgear DGN, Realtek SDK, TBK DVR, Linksys mp, LB-Link, QNAP Viostor, Tuoshi NTP, Apache Tomcat 24813 |
| **网络 / 基础设施 (无解密)** | 25 | protocol-anomaly ×9 · l34-recon ×5 · dns-tunnel ×3 · tls-anomaly ×3 (SNI-IP, JA3-dataset, expired-cert) · infra-bruteforce ×2 (SSH, RDP) · auth-bruteforce ×2 (login flood, Basic-Auth spray) |
## §17 对照 ET Open (50,169 条启用规则) 的真实成绩单
| 分类 | 数量 | 含义 |
|---|---|---|
| **GAP** | **111 / 144** | 只有我们的规则集能捕获到的攻击 — 即 §17 带来的核心价值 |
| OVERLAP | 33 | ET 同样覆盖 — 经审计并保留 (1 条已退役,32 条保留;详见 `suricata/BENCHMARK.md`) |
| MISS | 0 | 门禁强制保证的不变量 |
**真实流量验证** (`scripts/benchmark-real` 针对 MTA "scans-and-probes"
抓包数据):规则集在 3 个真实的边界扫描
pcap 上触发了 **20 个不同的 SID (2,839 次告警)** —
每一次触发的规则都代表了真实的攻击者行为 (PHPUnit CVE-2017-9841 933×,
`.env` 探测 917×, `/.git/config` 214×, 端口扫描 121×, PHP-CGI CVE-2024-4577 92×,
SNI=bare-IP 53×, Shellshock 32×, 及其他)。完整的基于数据的待办列表请参阅
`suricata/AUDIT-REAL.md` 和 `suricata/AUDIT-REALGAP.md`。
## 清单 — `rules.json` + 按类别拆分
包含完整元数据的每一条规则的唯一事实来源:
```
rules.json ← lightweight INDEX (~75 KB)
corpus stats + per-rule {sid, msg, owasp,
confidence, cve, §17 status, ref}
rules/by-category/.json ← FULL DETAIL (19 files, 2-160 KB each)
metadata + fast_pattern + pcre + buffers +
poc_dir + readme + description + raw alert
```
下游工具:加载 `rules.json` 获取索引,根据每条规则的
`ref` 字段获取按类别的详细信息。受 CI 中的
`gen-manifest --check` 门禁限制以防止漂移。
## 部署包 (`suricata/bundles/`)
预构建的 `.rules` + `.index.json` 附带文件,适用于常见部署切片。被 Gitignore 忽略
(派生文件);请使用 `suricata/scripts/release` 重新生成:
| Bundle | 使用场景 |
|---|---|
| `all.rules` | 所有规则 — 中心 NSM / 大型 SOC |
| `high-confidence.rules` | 嘈杂/大型边界网络 — 尽量减少误报 |
| `plaintext.rules` | 传感器解密 TLS / 查看明文 HTTP |
| `tls-meta.rules` | 传感器仅能查看 TLS 握手元数据 (无解密) |
| `any.rules` | L3/L4 + DNS — 可部署在任何地方,无需解密 |
| `known-cve.rules` | 仅针对边界的 CVE 漏洞利用 |
| `owasp.rules` | 仅 OWASP Top-10 部署 (合规驱动) |
| `auth-access-leak.rules` | 仅针对 Recon / 凭据攻击 / 信息暴露的监控 |
每个 Bundle 在 `suricata/bundles/README.md` 中都有一个 sha256 值,用于防篡改
锁定。
## 布局
```
suricata/
rules/plaintext/ network_mode=plain (needs decrypted HTTP)
rules/tls-meta/ network_mode=tls-meta|any (no decrypt)
tests/poc/_/ per-rule PoC + negative + README (1:1, generated)
tests/poc/_descriptions.json human-written prose source (gate-required)
tests/poc/_bench_status.json §17 GAP/OVERLAP snapshot (regenerable)
bundles/ pre-built deployment .rules (gitignored)
config/ classtypes, thresholds, reference, test suricata.yaml
scripts/ see Tooling below
BENCHMARK.md §17 method + OVERLAP audit table
FP-RISKS.md per-rule false-positive risk + tuning playbook
AUDIT-TRAFFIC.md cross-fire + negative-adequacy matrix
AUDIT-REAL.md real-traffic ruleset-vs-ET on MTA pcaps
AUDIT-REALGAP.md data-driven backlog from real-traffic gaps
AUDIT-FP.md empirical FP probe across 64 benign scenarios
rules.json single-source manifest (index)
rules/by-category/.json per-category full detail
CATALOG.md human-readable rule catalog
```
## 工具 — `suricata/scripts/`
| 脚本 | 用途 |
|---|---|
| `rulectl` | 完整生命周期:`sid-next` · `new` · `validate-meta` · `lint` · `test` · `check` · `ci` · `stats` · `list` · `export` · `deprecate` · `diff` |
| `gen-docs` | 根据 `_descriptions.json` 生成每个 PoC 的 README + CATALOG.md |
| `gen-manifest` | 生成 `rules.json` 索引 + `rules/by-category/*.json` 详细信息 |
| `release` | 将部署包生成至 `bundles/` |
| `benchmark` | 对照 ET Open 控制组进行 §17 测量 (合成 PoC 语料库) |
| `benchmark-real` | 真实 pcap 测量 (`--pcap-dir` / `--benign-dir`) |
| `audit-fp` | 64 个良性场景 → 误报候选报告 (`AUDIT-FP.md`) |
| `audit-traffic` | 交叉触发矩阵 + 负向充分性评估 (`AUDIT-TRAFFIC.md`) |
| `audit-realgap` | 真实流量 ET 漏洞利用类别差距分析 → 基于数据的待办列表 |
| `fetch-mta` | 下载最近的 MTA pcap 练习数据 → `reference/mta/` (被 Gitignore 忽略) |
## 添加规则
```
cd suricata
scripts/rulectl new --slug --conf high|medium --network-mode plain|tls-meta|any
# 编辑生成的那一行 rule + 填充 poc.sh / negative.sh
# 添加 tests/poc/_descriptions.json 条目:{sid: {attack, impact, detects}}
scripts/gen-docs # regenerate README/CATALOG from JSON
scripts/gen-manifest # regenerate rules.json + per-category split
scripts/rulectl check # lint + validate-meta + PoC fires + negative silent
git commit -m "feat(): ..."
```
切勿手动挑选 SID。切勿在规则体内使用 `#`。
## 自回归门禁
每次 push 和 PR 都会通过
`.github/workflows/gate.yml` 在 Suricata 8.x 上运行 `scripts/rulectl ci`:
1. `lint` — `suricata -T` 检测通过
2. `validate-meta` — 受控词汇表 + 重复 SID + 文件夹 ↔ 网络模式一致性校验
3. `gen-docs --check` — 防止每个 PoC 的 README 发生漂移
4. `gen-manifest --check` — 防止 `rules.json` + 按类别拆分文件发生漂移
5. **逐条规则测试** — PoC pcap 触发目标 SID,负向 pcap 不会触发
红色的徽章意味着某条规则发生了回归;门禁失败时任何代码都无法合并。
## 来源与授权
仅进行逻辑推导 — 绝不照搬原文 — 并结合我们自己的元数据 + SID +
PoC 重新表述。MIT/公开来源 (nuclei-templates MIT、NVD、供应商安全通告、公开
PoC、malware-traffic-analysis.net 的 Brad Duncan 抓包数据用于行为参考)
不受限制;所有规则均来自于这些净室环境。**ET PRO**
受授权许可限制:`etpro-*` 脚本在记录逐字管理授权
条款之前将拒绝运行。
## 测试所用的来源
- **malware-traffic-analysis.net** (Brad Duncan) — 每日真实恶意软件 + 边界
扫描抓包数据。用于验证规则集在真实攻击者流量上能正确触发。
通过 `scripts/fetch-mta` 获取。Pcap 文件仅保留在本地 (`reference/mta/` 已被 Gitignore 忽略)。
发布结果时必须注明出处。
- **ET Open** (suricata-update) — 即 §17 的控制组。授权干净可在
本地复现,但不得重新分发。
标签:CISA项目, Homebrew安装, Metaprompt, StruQ, Suricata, 插件系统, 现代安全运营, 红队行动, 网络安全, 规则集, 逆向工具, 隐私保护