fajarsajid/suricata-detections

GitHub: fajarsajid/suricata-detections

基于数据包级流量分析的高质量 Suricata 规则库,提供精准的 CVE 漏洞检测特征及完备的自动化测试验证与权衡说明。

Stars: 0 | Forks: 0

# suricata-detections 基于数据包级流量分析的网络 IDS 特征库开发。 本仓库包含用于检测 CVE 漏洞利用流量的 Suricata 规则,编写过程自底向上基于 pcap 展开 —— 首先观察实际的网络行为,然后将相关指标转化为精确的特征并记录相关的权衡说明。 **当前覆盖范围:** CVE-2021-44228 (Log4Shell) ## 方法论 本仓库中的每条规则均遵循相同的开发流程: 1. **优先分析 Pcap。** 在 Wireshark 中阅读真实或实验室复现的漏洞利用流量捕获记录。在编写任何规则语法之前,先了解攻击在数据包层面的具体表现。 2. **识别可靠指标。** 恶意流量中存在哪些在正常(良性)流量中不存在(或极少出现)的内容?在不产生噪声干扰的情况下,捕获该行为所需的最低特异性要求是什么? 3. **编写签名。** 将 `content` 匹配建立在观察到的字节模式基础上。仅在内容匹配无法覆盖变体空间时才使用 PCRE。设置 `fast_pattern` 以保持较低的 MPM 性能开销。 4. **记录权衡取舍。** 规则故意未覆盖的内容是什么?在哪些情况下可能产生误报 (FP)?推荐的抑制方法是什么?这些决策与规则本身同等重要。 5. **针对正例和负例进行测试。** 每条规则都对应一个应触发它的 pcap,以及至少一个不应触发它的 pcap。 ## 仓库结构 ``` suricata-detections/ ├── rules/ │ └── log4shell.rules # Suricata rules for CVE-2021-44228 ├── analysis/ │ └── log4shell_analysis.md # Traffic analysis & detection rationale ├── tests/ │ ├── generate_test_pcaps.py # Generates synthetic test pcaps (zero deps) │ └── test_rules.py # Validates rules against pcaps via Suricata ├── pcaps/ # Generated by generate_test_pcaps.py │ ├── positive_01_*.pcap # Should trigger specific SIDs │ └── negative_01_*.pcap # Should trigger nothing └── README.md ``` ## CVE-2021-44228 — Log4Shell **CVSS:** 10.0 严重 | **MITRE:** T1190 (利用面向公众的应用程序) Log4Shell 利用了 Log4j2 的 JNDI 消息查找替换功能。任何被记录的、受用户控制的字符串都可能触发远程 JNDI 查找,从而导致远程代码执行。 ### 规则 | SID | 描述 | 误报 (FP) 风险 | |-----|-------------|---------| | 9100001 | HTTP 头中的 JNDI 查找字符串 | 极低 | | 9100002 | HTTP URI 中的 JNDI 查找字符串 | 极低 | | 9100003 | 混淆的嵌套表达式绕过 | 低 | | 9100004 | JNDI 协议回调字符串 (ldap/rmi/dns) | 低 | | 9100005 | 出站 LDAP 回调(漏洞利用后) | 中 | 规则 1–4 覆盖了包括经过混淆的 WAF 绕过变体在内的入站漏洞利用尝试。规则 5 通过网络流量遥测提供独立的漏洞利用后确认 —— 这是一个不同的检测层,不依赖于是否能看到入站有效载荷。 ### 测试覆盖范围 ``` Positive cases (should fire): ✓ Basic JNDI in User-Agent header → sid:9100001 ✓ JNDI in X-Forwarded-For header → sid:9100001 ✓ JNDI in URI path → sid:9100002 ✓ Obfuscated: ${${lower:j}ndi:...} → sid:9100003 ✓ Obfuscated: character substitution chain → sid:9100003 ✓ RMI protocol variant → sid:9100001, 9100004 ✓ Outbound LDAP callback → sid:9100005 Negative cases (should NOT fire): ✓ Benign HTTP request ✓ JNDI string in server response (wrong direction) ✓ Dollar-brace in URL parameter (not JNDI) ✓ Legitimate internal LDAP connection ``` ## 运行测试 **环境要求:** Python 3.10+, Suricata(用于实时验证) ``` # 1. 生成测试 pcaps python tests/generate_test_pcaps.py # 2. 运行验证(需要 Suricata) python tests/test_rules.py # 3. CI 模式 — 任何失败时退出,退出码为 1 python tests/test_rules.py --ci ``` 如果未安装 Suricata,测试工具将以模拟模式运行, 并在不进行实时规则评估的情况下验证 pcap 是否已正确生成。 **安装 Suricata:** ``` # Ubuntu/Debian sudo apt install suricata # macOS brew install suricata ``` ## 设计决策 **零第三方 Python 依赖。** pcap 生成器仅使用 Python 的 `struct` 和 `socket` 标准库模块写入原始二进制数据。这是一项深思熟虑的供应链安全决策 —— 生成测试用例无需执行 pip install。 **主内容上的 `fast_pattern`。** 每个带有 `content` 匹配的规则都指定了 `fast_pattern`,以指示 Suricata 的多模式匹配器将该字符串用作主要预过滤器。即使在加载大量规则时,这也能大规模保持较低的 CPU 开销。 **大流量规则的 `threshold` 设置。** 规则 1 和 2 包含 `threshold:type limit, track by_src, count 1, seconds 60`,用于抑制来自大规模扫描源的告警风暴。检测仍然会触发;只是不会为同一个源 IP 生成数千条重复告警。 **良性分类器优于规则抑制。** 已知安全扫描器(Shodan, Censys 等)产生的误报会在权衡文档中注明,但不会在规则本身中被抑制。在传感器规模上,通过已知的扫描器分类层(例如 GreyNoise 标签)来处理此问题,要比将 IP 允许列表硬编码到规则逻辑中更好,因为后者无法扩展且会产生维护债务。 ## 参考资料 - [NVD CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) - [LunaSec 原始披露](https://www.lunasec.io/docs/blog/log4j-zero-day/) - [Log4Shell 规避模式](https://github.com/back2root/log4shell-rex) - [恶意流量分析(公开 pcap 样本)](https://www.malware-traffic-analysis.net) - [MITRE ATT&CK T1190](https://attack.mitre.org/techniques/T1190/) - [Suricata 规则文档](https://docs.suricata.io/en/latest/rules/)
标签:AMSI绕过, CISA项目, Claude, CVE-2021-44228, CVE检测, IP 地址批量处理, Log4Shell, Metaprompt, PB级数据处理, PCAP, PCRE, SecOps, Suricata, Wireshark, 云安全架构, 云计算, 入侵检测系统, 句柄查看, 威胁检测, 安全数据湖, 安全测试, 安全运维, 攻击性安全, 攻击特征提取, 现代安全运营, 网络安全, 规则开发, 规则引擎, 逆向工具, 隐私保护