HuntingYuk/detection-rules

GitHub: HuntingYuk/detection-rules

一套经 PoC 验证、低误报的 Suricata 检测规则库,覆盖已知 CVE 漏洞利用、OWASP 注入攻击和网络异常检测,附带自动化测试与基准工具链。

Stars: 0 | Forks: 0

# HuntingYuk 检测规则 [![rule-gate](https://static.pigsec.cn/wp-content/uploads/repos/cas/79/7989b9158fd15d712974b1e40b11d3bdabb007bd48e8d8d5c4f11a6c6e8d927e.svg)](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, 插件系统, 现代安全运营, 红队行动, 网络安全, 规则集, 逆向工具, 隐私保护