dimasqiramadhani/threat-intelligence-correlation-opencti

GitHub: dimasqiramadhani/threat-intelligence-correlation-opencti

将OpenCTI威胁情报平台的IOC指标自动同步至Wazuh SIEM,实现检测规则动态更新和告警上下文丰富化的集成项目。

Stars: 0 | Forks: 0

# 🧠 威胁情报关联:Wazuh 与 OpenCTI 一个基于实验室环境的 SIEM + CTI 集成项目,将 **OpenCTI** 作为威胁情报平台与 **Wazuh** 作为 SIEM/XDR 关联引擎相连接。来自 OpenCTI 的 IOC 通过 GraphQL API 获取,经过规范化处理,转换为 Wazuh CDB 列表,并用于检测端点和网络遥测数据中出现的恶意指标。 ## 📌 项目意义 大多数 SIEM 部署都使用静态、手动维护的指标列表,这些列表很快就会过时。像 OpenCTI 这样的威胁情报平台维护着一个动态更新的指标知识库,具备置信度评分、过期时间追踪和关系上下文等功能。本项目演示了如何将 CTI 知识直接引入 SIEM 检测中——实现从摄取到告警的 IOC 生命周期自动化。 最终结果是:Wazuh 告警丰富了 CTI 上下文(指标来源、置信度、威胁标签),而不仅仅是简单的字段值匹配。 ## 🧪 实验室概览 | 组件 | 角色 | |-----------|------| | OpenCTI 平台 | CTI 知识库 — 存储指标、可观测对象、威胁行为者、攻击活动 | | OpenCTI GraphQL API | 编程式指标检索 | | Python IOC 同步脚本 | 获取、规范化并生成 CDB 列表 | | Wazuh CDB 列表 | IOC 黑名单:域名、IP、URL、MD5、SHA1、SHA256 | | 自定义 Wazuh 规则 111000–111009 | IOC 匹配检测 + MITRE 映射 | | Wazuh Manager | SIEM 关联引擎 | | Wazuh Dashboard | 告警调查与威胁狩猎 | | systemd Timer | 计划的每小时 IOC 同步 | ## 🏗️ 架构图 ``` flowchart TD subgraph CTI["OpenCTI Platform"] INDICATORS["Indicators\ndomain, IP, URL, hash"] OBSERVABLES["Observables\nSTIX objects"] GRAPHQL["GraphQL API\n/graphql"] SIGHTINGS["Sightings\noptional feedback"] INDICATORS --> GRAPHQL OBSERVABLES --> GRAPHQL end subgraph SYNC["IOC Synchronization Pipeline"] FETCH["opencti_fetch_indicators.py\nGraphQL query + pagination"] NORMALIZE["Normalize IOCs\nparse STIX pattern"] GENERATE["generate_wazuh_cdb_lists.py\none file per IOC type"] VALIDATE["validate_cdb_lists.py\nformat + duplicate check"] DEPLOY["Deploy to Wazuh\n/var/ossec/etc/lists/"] TIMER["systemd timer\nhourly sync"] TIMER --> FETCH FETCH --> NORMALIZE --> GENERATE --> VALIDATE --> DEPLOY end subgraph WAZUH["Wazuh Stack"] MANAGER["Wazuh Manager\nCDB lookup + rule engine"] CDB["CDB Lists\nopencti_domains\nopencti_ips\nopencti_urls\nopencti_md5s\nopencti_sha1s\nopencti_sha256s"] RULES["Custom Rules\n111001-111009"] INDEXER["Wazuh Indexer\nOpenSearch"] DASHBOARD["Wazuh Dashboard"] AGENT["Wazuh Agent\non lab endpoint"] AGENT -->|DNS, file, network events| MANAGER MANAGER --> CDB & RULES MANAGER --> INDEXER --> DASHBOARD end subgraph OPTIONAL["Optional Extensions"] LOOKUP["wazuh_alert_opencti_lookup.py\nenrichment on alert"] SIGHTING_SCRIPT["send_wazuh_sighting_to_opencti.py\nfeedback loop"] end GRAPHQL -->|indicators JSON| FETCH DEPLOY --> CDB DASHBOARD --> ANALYST["🔍 CTI / SOC Analyst"] MANAGER -->|alert| LOOKUP --> GRAPHQL MANAGER -->|IOC match| SIGHTING_SCRIPT --> SIGHTINGS ``` ## 🔄 集成工作流 | 步骤 | 操作 | 工具 | 输出 | |------|--------|------|--------| | 1 | 从 OpenCTI 获取指标 | GraphQL API | 原始指标 JSON | | 2 | 解析 STIX 模式 | Python | 规范化的 IOC 列表 | | 3 | 按类型生成 CDB 列表 | Python | 6 个 CDB 文件 | | 4 | 验证 CDB 格式 | Python | 验证报告 | | 5 | 部署到 Wazuh | Shell / Python | `/var/ossec/etc/lists/` 中的列表 | | 6 | Wazuh 将端点事件与 CDB 进行匹配 | Wazuh 规则 | IOC 匹配告警 | | 7 | 分析师调查告警 | Wazuh Dashboard | 来自 CTI 的上下文 | | 8 | (可选) 从 OpenCTI 丰富告警 | Python | 丰富的告警事件 | | 9 | (可选) 在 OpenCTI 中创建目击记录 | Python | 反馈循环 | ## 🎯 检测规则摘要 | 规则 ID | IOC 类型 | 级别 | 源字段 | MITRE | |---------|---------|-------|--------------|-------| | 111001 | Domain | 10 | DNS 查询 / 代理 | T1071.004 | | 111002 | IP (src/dst) | 10 | srcip/dstip | T1071 | | 111003 | URL | 11 | 代理/url 日志 | T1566.002 | | 111004 | MD5 hash | 12 | 文件哈希事件 | T1105 | | 111005 | SHA1 hash | 12 | 文件哈希事件 | T1105 | | 111006 | SHA256 hash | 12 | 文件哈希事件 | T1105 | | 111007 | 多个 IOC | 14 | 关联 | T1566 | | 111008 | 生产资产 | 15 | 资产元数据 | T1566 | | 111009 | 丰富结果 | 7 | 丰富输出 | — | ## 📁 仓库结构 ``` opencti-wazuh-lab/ ├── README.md ├── LICENSE ├── .gitignore ├── .env.example ├── docs/ │ ├── 01-overview.md │ ├── 02-lab-architecture.md │ ├── 03-opencti-concept.md │ ├── 04-wazuh-threat-intelligence-concept.md │ ├── 05-integration-design.md │ ├── 06-opencti-graphql-api.md │ ├── 07-ioc-synchronization-workflow.md │ ├── 08-wazuh-cdb-list-generation.md │ ├── 09-custom-wazuh-rules.md │ ├── 10-alert-correlation-workflow.md │ ├── 11-optional-sighting-to-opencti.md │ ├── 12-testing-and-validation.md │ ├── 13-detection-result-and-analysis.md │ ├── 14-threat-hunting-queries.md │ ├── 15-threat-intelligence-reporting.md │ ├── 16-troubleshooting.md │ ├── 17-security-considerations.md │ └── 18-improvement-ideas.md ├── opencti/ │ ├── docker-compose-notes.md │ ├── sample-opencti-indicators.md │ └── graphql-queries/ │ ├── get-indicators.graphql │ ├── get-observables.graphql │ └── create-sighting.graphql ├── scripts/ │ ├── opencti_fetch_indicators.py │ ├── generate_wazuh_cdb_lists.py │ ├── opencti_to_wazuh_sync.py │ ├── wazuh_alert_opencti_lookup.py │ ├── send_wazuh_sighting_to_opencti.py │ ├── validate_cdb_lists.py │ └── rotate_ioc_lists.sh ├── wazuh/ │ ├── lists/ │ │ ├── opencti_domains │ │ ├── opencti_ips │ │ ├── opencti_urls │ │ ├── opencti_md5s │ │ ├── opencti_sha1s │ │ └── opencti_sha256s │ ├── rules/opencti_threat_intel_rules.xml │ ├── decoders/opencti_lookup_decoder.xml │ ├── ossec-cdb-list-snippet.xml │ └── ossec-opencti-integration-snippet.xml ├── systemd/ │ ├── opencti-wazuh-sync.service │ └── opencti-wazuh-sync.timer ├── samples/ │ ├── sample-opencti-indicator-response.json │ ├── sample-normalized-ioc.json │ ├── sample-cdb-domain-list.txt │ ├── sample-cdb-ip-list.txt │ ├── sample-wazuh-alert-domain-match.json │ ├── sample-wazuh-alert-ip-match.json │ ├── sample-wazuh-alert-hash-match.json │ └── sample-opencti-sighting-event.json ├── reports/ │ ├── sample-threat-intelligence-correlation-report.md │ ├── sample-ioc-sync-report.md │ └── sample-alert-enrichment-report.md └── screenshots/ └── README.md ``` ## ⚙️ 环境要求 - Wazuh Server v4.x(OVA 或自托管) - OpenCTI v5.x 或更高版本(Docker 或自托管) - 带有 `requests`、`python-dotenv` 的 Python 3.8+ - Wazuh Manager 的 Root / sudo 权限 - OpenCTI API token(存储在 `.env` 中 — 绝不存放在仓库中) - 隔离的实验室网络 ## 🚀 快速入门 ### 1. 配置环境 ``` cp .env.example .env # 编辑 .env — 设置 OPENCTI_URL 和 OPENCTI_TOKEN # 绝不要提交已填充的 .env 文件 ``` ### 2. 从 OpenCTI 获取指标 ``` python3 scripts/opencti_fetch_indicators.py \ --output samples/sample-normalized-ioc.json ``` ### 3. 生成 Wazuh CDB 列表 ``` python3 scripts/generate_wazuh_cdb_lists.py \ --input samples/sample-normalized-ioc.json \ --output-dir wazuh/lists/ ``` ### 4. 验证并部署 ``` python3 scripts/validate_cdb_lists.py --dir wazuh/lists/ # 如果验证通过: python3 scripts/opencti_to_wazuh_sync.py # DRY_RUN=false to deploy ``` ### 5. 配置 Wazuh ``` # 在 Wazuh Manager 上 sudo cp wazuh/lists/* /var/ossec/etc/lists/ sudo cp wazuh/rules/opencti_threat_intel_rules.xml /var/ossec/etc/rules/ # 将 CDB 代码片段添加到 ossec.conf sudo systemctl restart wazuh-manager ``` ### 6. 在 Dashboard 中查看 ``` Wazuh Dashboard → Threat Hunting → Security Events Filter: rule.groups:opencti ``` ## 🗺️ MITRE ATT&CK 映射 | 技术 | ID | 覆盖规则 | |-----------|-----|-----------| | Application Layer Protocol | T1071 | 规则 111002 | | DNS | T1071.004 | 规则 111001 | | Ingress Tool Transfer | T1105 | 规则 111004–111006 | | Phishing | T1566 | 规则 111003, 111007 | | Spearphishing Link | T1566.002 | 规则 111003 | | Supply Chain Compromise | T1195 | 上下文 | ## 📚 参考资料 - [OpenCTI 文档](https://docs.opencti.io/) - [Wazuh CDB 列表](https://documentation.wazuh.com/current/user-manual/ruleset/cdb-list.html) - [STIX 2.1 规范](https://oasis-open.github.io/cti-documentation/stix/intro.html) - [MITRE ATT&CK](https://attack.mitre.org/) - [FiligranHQ OpenCTI GitHub](https://github.com/OpenCTI-Platform/opencti) ## ⚖️ 免责声明 仅供实验室和作品集展示使用。所有指标均使用虚拟值(`.test` TLD、RFC 5737 地址、虚构哈希)。本项目不包含真实的威胁情报、内部 IOC 或生产凭证。请勿将 OpenCTI API token、Wazuh 凭证或内部指标列表提交到任何仓库中。 ## 👤 作者 **Dimas Qi Ramadhani** — 网络安全工程师 | SIEM · CTI · Detection Engineering GitHub: [@dimasqiramadhani](https://github.com/dimasqiramadhani)
标签:CDB列表, Cloudflare, CTI平台, GraphQL API, IOC同步, IP 地址批量处理, MITRE ATT&CK, OpenCTI, Python, SIEM集成, Wazuh, 失陷标示, 威胁情报, 威胁情报关联, 安全告警富化, 安全编排与自动化, 安全运营, 实验室环境, 开发者工具, 恶意指标检测, 扫描框架, 搜索语句(dork), 无后门, 日志关联分析, 网络信息收集, 网络威胁情报, 网络安全, 自动化响应, 请求拦截, 逆向工具, 隐私保护