cerberus8484/SIEM-Rules

GitHub: cerberus8484/SIEM-Rules

一个跨 Splunk、QRadar、Google SecOps 和 Wazuh 平台的生产级 SIEM 检测规则集合,帮助企业安全团队快速部署覆盖完整攻击生命周期的威胁狩猎能力。

Stars: 0 | Forks: 0

# HuntingThreats — 企业狩猎包 **适用于 Splunk、QRadar、Google SecOps 和 Wazuh 的生产级 SIEM 检测规则。** ## 快速开始 ``` # 克隆 git clone https://github.com/cerberus8484/SIEM-Rules.git cd SIEM-Rules/hunts # 验证规则 (Python 3.9+) pip install -r tools/requirements.txt python tools/rule_linter.py # 生成覆盖率矩阵 python tools/coverage_matrix.py ``` ## 规则包 | 包 | 目录 | 描述 | Splunk | QRadar | SecOps | Wazuh | |---|---|---|---|---|---|---| | ⚙️ Windows 执行 | `splunk/execution/` | PowerShell, LOLBins, WMI, Office Macros | ✅ | ✅ | — | — | | 🔒 Windows 持久化 | `splunk/persistence/` | Registry Run, Scheduled Tasks, Services | ✅ | ✅ | — | — | | 🛡️ 防御规避 | `splunk/defense_evasion/` | Process Injection, Masquerading, AMSI bypass | ✅ | ✅ | — | — | | 🔑 凭据访问 | `splunk/credential_access/` | LSASS dump, DCSync, Kerberoasting | ✅ | ✅ | — | — | | 📡 命令与控制 | `splunk/c2/` | Beaconing, DNS tunneling, C2 ports | ✅ | ✅ | — | — | | ↔️ 横向移动 | `splunk/lateral_movement/` | PsExec, WMI remote, Pass-the-Hash | ✅ | ✅ | — | — | | 🔍 发现 | `splunk/discovery/` | AD enumeration, network scan, BloodHound | ✅ | ✅ | — | — | | 📤 数据窃取 | `splunk/exfiltration/` | Large POST, DNS exfil, cloud upload | ✅ | ✅ | — | — | | 💥 影响 | `splunk/impact/` | Ransomware execution, wiper, service kill | ✅ | ✅ | — | — | | ⬆️ 权限提升 | `splunk/privilege_escalation/` | Token manipulation, UAC bypass | ✅ | ✅ | — | — | | 🚪 初始访问 | `splunk/initial_access/` | Spearphishing, drive-by, exploit public-facing | ✅ | ✅ | — | — | | ☁️ 云 | `splunk/cloud/` | AWS CloudTrail, Azure AD, M365, GCP | ✅ | ✅ | ✅ | — | | 🐧 Linux | `splunk/linux/` | Persistence, privesc, defense evasion | ✅ | — | — | — | | 🌐 网络 | `splunk/network/` | Firewall anomalies, protocol abuse | ✅ | — | — | — | | 🕸️ Web 应用 | `splunk/web/` | SQLi, LFI/RFI, RCE, WAF evasion | ✅ | — | — | — | | 🎯 威胁情报 | `splunk/threat_intel/` | IOC matching, TI feed correlation | ✅ | — | — | — | | 👤 身份 / IAM | `splunk/identity/` | Entra ID, AWS IAM, Okta, Generic IdP | ✅ | ✅ | ✅ | ✅ | | 📦 容器 / K8s | `splunk/container/` | Kubernetes audit, container escape, RBAC | ✅ | — | — | — | | 🔧 DevOps / CI-CD | `splunk/devops/` | GitHub Actions, supply chain, secrets in logs | ✅ | — | — | — | | 💾 备份 / 恢复能力 | `splunk/backup/` | VSS deletion, backup kill, ransomware prep | ✅ | — | — | — | | 🖥️ Hypervisor / VMware | `splunk/hypervisor/` | ESXi, vCenter, Proxmox attacks | ✅ | — | — | — | | 📧 电子邮件安全 | `splunk/email/` | DMARC fail, macro attachments, BEC | ✅ | — | — | — | | 🗄️ 数据库 | `splunk/database/` | SQL injection, xp_cmdshell, mass SELECT | ✅ | — | — | — | | 🔐 VPN / 远程访问 | `splunk/vpn/` | Impossible travel, concurrent sessions, ZTNA | ✅ | — | — | — | | 🍎 macOS | `splunk/macos/` | LaunchAgent, TCC bypass, Gatekeeper disabled | ✅ | — | — | — | | 🚨 DLP / 数据窃取 | `splunk/dlp/` | Multi-vector exfil chains, staging, rclone | ✅ | — | — | — | | 🍯 欺骗 / Canary | `splunk/deception/` | Canary files, honey credentials, honeypot traps | ✅ | — | — | — | | 🔗 关联分析 | `splunk/correlation/` | Multi-stage kill chains, risk scoring | ✅ | — | — | — | | 📋 分析师查询 | `analyst_queries/` | Ad-hoc hunt queries for live investigations | ✅ | ✅ | ✅ | ✅ | ## 目录结构 ``` hunts/ ├── splunk/ # Splunk SPL rules │ ├── execution/ │ Packs A–F: Windows Execution / Persistence / C2 / ... │ ├── persistence/ │ │ ├── defense_evasion/ │ │ ├── credential_access/ │ │ ├── c2/ │ │ ├── lateral_movement/ │ │ ├── discovery/ │ │ ├── exfiltration/ │ │ ├── impact/ │ │ ├── privilege_escalation/ │ │ ├── initial_access/ │ │ ├── cloud/ │ Pack B–E: AWS, Azure, M365, GCP │ ├── linux/ │ Pack F: Linux │ ├── network/ │ │ ├── web/ │ │ ├── threat_intel/ │ │ ├── identity/ │ Pack G: Identity/IAM (Entra ID, AWS IAM, Okta) │ ├── container/ │ Pack H: Container/Kubernetes │ ├── devops/ │ Pack I: DevOps/CI-CD │ ├── backup/ │ Pack J: Backup/Ransomware-Resilience │ ├── hypervisor/ │ Pack K: Hypervisor/VMware/ESXi │ ├── email/ │ Pack L: Email Security │ ├── database/ │ Pack M: Database │ ├── vpn/ │ Pack N: VPN/ZTNA/Remote Access │ ├── macos/ │ Pack O: macOS │ ├── dlp/ │ Pack P: Data Exfiltration/DLP │ ├── deception/ │ Pack Q: Deception/Canary │ └── correlation/ │ Pack R: Correlation/Multi-Stage Kill Chain ├── qradar/ # QRadar AQL rules (identity + core packs) ├── secops/ # Google SecOps UDM rules ├── wazuh/ # Wazuh KQL rules ├── analyst_queries/ # Ad-hoc queries for live hunting (all 4 platforms) ├── playbooks/ # Analyst response playbooks ├── schema/ │ └── rule_metadata.yaml # S1: Canonical rule metadata schema ├── tools/ │ ├── rule_linter.py # S2: Python rule validator │ ├── coverage_matrix.py # S4: Coverage matrix generator │ └── requirements.txt └── tests/ └── fixtures/ # S3: Synthetic test events (TP + FP per rule) ├── splunk/ └── wazuh/ ``` ## 规则 ID 命名空间 | 前缀 | 平台 | 范围 | 包 | |---|---|---|---| | `SP-1xxxxx` | Splunk | 100000–199999 | Windows (Execution, Persistence, Evasion, ...) | | `SP-2xxxxx` | Splunk | 200000–299999 | Cloud (AWS=200, Azure=201, M365=202, GCP=203) | | `SP-3xxxxx` | Splunk | 300000–399999 | Linux | | `SP-4xxxxx` | Splunk | 400000–499999 | Network Infrastructure | | `SP-5xxxxx` | Splunk | 500000–599999 | Web Application | | `SP-6xxxxx` | Splunk | 600000–699999 | Threat Intelligence | | `SP-7xxxxx` | Splunk | 700000–709999 | Identity/IAM (Entra=700, AWS IAM=701, Okta=702) | | `SP-71xxxx` | Splunk | 710000–719999 | Container / Kubernetes | | `SP-72xxxx` | Splunk | 720000–729999 | DevOps / CI-CD | | `SP-73xxxx` | Splunk | 730000–739999 | Backup / Resilience | | `SP-74xxxx` | Splunk | 740000–749999 | Hypervisor / VMware | | `SP-75xxxx` | Splunk | 750000–759999 | Email Security | | `SP-76xxxx` | Splunk | 760000–769999 | Database | | `SP-77xxxx` | Splunk | 770000–779999 | VPN / Remote Access | | `SP-78xxxx` | Splunk | 780000–789999 | macOS | | `SP-79xxxx` | Splunk | 790000–799999 | DLP / Exfiltration | | `SP-80xxxx` | Splunk | 800000–809999 | Deception / Canary | | `SP-81xxxx` | Splunk | 810000–819999 | Correlation / Multi-Stage | | `QR-xxxxxx` | QRadar | same sub-ranges | QRadar AQL equivalents | | `GS-xxxxxx` | Google SecOps | same sub-ranges | UDM Search equivalents | | `WZ-xxxxxx` | Wazuh | same sub-ranges | KQL equivalents | | `PB-xxx` | All | playbooks/ | Analyst Response Playbooks | | `AQ-xxx-xxx` | All | analyst_queries/ | Live Hunt Queries | ## 平台集成指南 ### Splunk 1. 将 `splunk//` 中的 `.spl` 文件复制到您的 Splunk 环境中 2. 为每个 `comment()` 块创建保存的搜索或告警 3. 每条规则使用 `eval rule_id=`、`tactic=`、`technique=`、`severity=`、`confidence=` 字段 4. 将 ``、`` 占位符替换为您实际的值 ``` `comment("SP-700001 | Identity | Entra ID Global Admin direkt zugewiesen")` index=azure:aad:audit operationName="Add member to role" | ... | eval rule_id="SP-700001", tactic="Privilege Escalation", severity="CRITICAL", confidence=90 ``` ### QRadar AQL 1. 将 `qradar//` 中的 `.aql` 文件作为自定义规则导入 2. AQL 查询使用 `logsourcetypename(logsourceid) ILIKE` 进行日志源过滤 3. 规则元数据作为 `/* SP-XXXXXX | ... */` 注释块嵌入 ### Google SecOps (Chronicle) 1. 来自 `secops//` 的 UDM Search 查询可在 Chronicle Search UI 中运行 2. 使用 `metadata.product_name`、`metadata.product_event_type`、`target.user.*` 字段 3. 规则 ID 使用 `GS-` 前缀 ### Wazuh 1. 来自 `wazuh//` 的 KQL 查询可在 Wazuh Dashboard (OpenSearch KQL) 中运行 2. 使用 `rule.groups: "azure"/"amazon"/"okta"`、`data.aws.*`、`data.okta.*` 字段 3. Wazuh `rule.level` >= 10 对应 HIGH,>= 12 对应 CRITICAL ## 规则质量与 Linting ### 运行 Linter ``` # Lint 所有规则 python tools/rule_linter.py # 用于 CI 的 JSON 输出 python tools/rule_linter.py --json # 严格模式(即使有警告也会失败) python tools/rule_linter.py --strict # 按平台或 pack 过滤 python tools/rule_linter.py --platform splunk --pack identity ``` ### Linter 检查 | 检查项 | 级别 | 描述 | |---|---|---| | 缺少 `rule_id` | ERROR | 每个规则块都必须有 rule_id | | 缺少 `tactic` | ERROR | 必须提供 MITRE tactic | | 缺少 `severity` | ERROR | Severity 必须为 CRITICAL/HIGH/MEDIUM/LOW/INFO | | 缺少 `confidence` | ERROR | 必须提供 0–100 的置信度分数 | | 无效的 severity 值 | ERROR | 必须匹配枚举值 | | Confidence 超出范围 | ERROR | 必须在 0–100 之间 | | CRITICAL + 低置信度 | WARNING | CRITICAL 应具有 >= 85 的置信度 | | 重复的 rule ID | ERROR | ID 必须全局唯一 | | Bug 占位符 (TODO/FIXME) | WARNING | 未解决的开发标记 | | 无效的 ID 格式 | WARNING | 必须匹配 SP/QR/GS/WZ-[0-9]{6,} | ### 生成覆盖率矩阵 ``` # 写入 COVERAGE.md + coverage.json python tools/coverage_matrix.py # 仅 Markdown,打印到 stdout python tools/coverage_matrix.py --md-only --stdout ``` ## 编写新规则 ### 1. 选择正确的规则 ID 参见上方的命名空间表。下一个可用的 ID 记录在 `schema/rule_metadata.yaml` 中。 ### 2. 必需的元数据 (Splunk) ``` `comment("SP-XXXXXX | | ")` | eval rule_id="SP-XXXXXX" | eval tactic="" | eval technique="" | eval severity="" | eval confidence=<0-100> ``` ### 3. 置信度校准 | 置信度 | 使用时机 | 分析师操作 | |---|---|---| | 90–100 | 已知的恶意模式,零/极低 FP | 立即升级 | | 75–89 | 极有可能是恶意的,极少 FP | 在 1 小时内审查 | | 55–74 | 可疑,预期会有一些 FP | 建立工单,交班审查 | | 30–54 | 弱信号,高 FP 率 | 仅记录日志 | | < 30 | 对生产环境而言过于嘈杂 | 不要使用 | ### 4. 添加测试夹具 在 `tests/fixtures/splunk//tp_.json` 中添加至少一个 TP 夹具。 对于具有已知 FP 模式的规则:添加 `fp_.json` 并附带调整建议。 ### 5. 运行 linter ``` python tools/rule_linter.py --pack ``` ## MITRE ATT&CK 覆盖率 该狩猎包涵盖了**所有 12 个 MITRE ATT&CK 战术**: | 战术 | 关键技术 | |---|---| | Initial Access | T1566 (Phishing), T1195 (Supply Chain), T1190 (Exploit Public App) | | Execution | T1059 (PowerShell/Cmd), T1047 (WMI), T1204 (User Execution) | | Persistence | T1547 (Registry Run), T1053 (Scheduled Tasks), T1543 (Services) | | Privilege Escalation | T1134 (Token), T1548 (UAC), T1611 (Container Escape) | | Defense Evasion | T1055 (Process Injection), T1562 (Impair Defenses), T1218 (LOLBins) | | Credential Access | T1003 (LSASS), T1558 (Kerberoasting), T1621 (MFA Fatigue) | | Discovery | T1087 (Account Discovery), T1069 (Permission Groups), T1046 (Netscan) | | Lateral | T1021 (Remote Services), T1550 (Pass-the-Hash) | | Collection | T1114 (Email Collection), T1213 (Data from Repos) | | Command & Control | T1071 (App Layer), T1095 (Non-App Layer), T1571 (Non-Standard Port) | | Exfiltration | T1041 (Exfil over C2), T1048 (Exfil Alt Protocol), T1567 (Cloud Storage) | | Impact | T1486 (Ransomware), T1490 (Inhibit Recovery), T1531 (Account Access Removal) | 扩展覆盖率(超出 Windows 范围): - **Identity/IAM:** T1078.004, T1556.006, T1528 (Token Theft), T1098 (Account Manipulation) - **Cloud:** T1537, T1530, T1619 (Cloud Enumeration) - **Container:** T1611, T1552.007 (K8s Secrets), T1543 (Container as Service) - **Deception (Detection):** 所有 Q-pack 规则的置信度为 97–98(在正确部署时零 FP) ## 仓库统计 | 指标 | 数量 | |---|---| | 规则文件总数 | 81 | | Splunk SPL 规则 | ~987 | | QRadar AQL 规则 | ~200 | | Google SecOps 规则 | ~100 | | Wazuh KQL 规则 | ~200 | | 测试夹具 (TP+FP) | 11 | | 覆盖的 MITRE 技术 | 80+ | | 覆盖的 MITRE 战术 | 12 / 12 | ## 许可证 MIT — 详见 [LICENSE](../LICENSE)。 规则按原样提供。在生产部署之前,请在您的环境中进行测试。 *由 [HuntingThreats](https://huntingthreats.de) 构建 — 面向现代 SOC 的威胁狩猎。*
标签:IP 地址批量处理, PE 加载器, QRadar, 后端开发, 安全运营, 扫描框架, 检测规则, 网络资产发现, 逆向工具