siva404e/IOC_AUTOMATION

GitHub: siva404e/IOC_AUTOMATION

自动化 IOC 威胁情报聚合器,从 29 个开源情报源收集并标准化威胁指标,生成适配 Sumo Logic SIEM 的 STIX 2.1 格式以支持企业威胁检测。

Stars: 0 | Forks: 0

# IOC 威胁情报聚合器 ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) ![Python: 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue.svg) ![Status: Production Ready](https://img.shields.io/badge/Status-Production%20Ready-brightgreen.svg) **自动化的 IOC 威胁情报聚合器**,从 **29 个开源威胁情报源**收集、标准化、去重并导出威胁指标,生成适配 Sumo Logic SIEM 的 STIX 2.1 CSV 格式,用于企业威胁检测。 **聚合数据源:** AlienVault OTX、PhishTank、ThreatFox、Feodo、Spamhaus、URLhaus、MalwareBazaar、Pulsedive、Hybrid Analysis、CAPE Sandbox、OpenPhish、FireHOL、Botvrij、ThreatView、C2IntelFeeds、C2Tracker、DataPlane、AbuseSSL、IPsum、CINScore、PhishingArmy、VXVault、URLAbuse、TweetFeed、VirusShare、MISP CERT-FR、Blocklist.de、EmergingThreats 等。 ## 📊 SOC 背景 威胁情报分析师**每周**运行此聚合器,从 29 个情报源拉取最新的 IOC 并上传至 Sumo Logic,以便 L1 分析师在这些指标出现在实时日志中时获得**自动告警**。这填补了威胁情报源发现与 SIEM 检测之间的空白,实现了对已知恶意基础设施的快速响应。 ## 🎯 核心功能 | 功能 | 详情 | |---------|---------| | **并行抓取** | 29 个威胁情报源,使用 10 个并发线程提升速度 | | **置信度评分** | 基于情报源声誉的单源信任评分(范围 65–95) | | **IOC 去重** | 自动去重并保留置信度最高的威胁类型 | | **5 周滚动窗口** | 主 CSV 维护滚动历史记录;自动归档最旧的一周 | | **时间戳刷新** | 重新发现的 IOC 会延长有效期,防止在 Sumo Logic 中过期 | | **STIX 2.1 导出** | 兼容 Sumo Logic 的 10 列 CSV 格式,无表头 | | **智能拆分** | 每个输出文件最多包含 9,999 行,以确保兼容 SIEM | | **自动归档** | 第 6 周及以后的 IOC 移至永久存档 Archive_IOC.csv | | **跨平台** | 可在 Windows(任务计划程序)和 Linux(Cron)上运行 | | **多 IOC 类型** | IP 地址、域名、URL、MD5/SHA-1/SHA-256 哈希值 | ## 🗺️ MITRE ATT&CK 覆盖范围 该聚合器支持跨多个攻击阶段的检测: | 威胁类别 | 情报源 | MITRE ID | 战术 | 应用场景 | |-----------------|---------|----------|--------|----------| | **C2 基础设施** | Feodo, C2IntelFeeds, C2Tracker | T1071 | 命令与控制 | 阻断与已知 C2 服务器的出站通信 | | **钓鱼 URL** | PhishTank, OpenPhish, PhishingArmy | T1566.002 | 初始访问 | 访问钓鱼着陆页时触发告警 | | **恶意软件哈希值** | MalwareBazaar, Hybrid Analysis, CAPE | T1204.002 | 执行 | 根据文件哈希检测恶意软件执行 | | **僵尸网络 IP** | Spamhaus, FireHOL, DataPlane | T1583.005 | 资源开发 | 阻断来自僵尸网络源 IP 的流量 | | **恶意软件域名** | URLhaus, Botvrij, ThreatView | T1566.002 | 初始访问 | 阻断对恶意软件域名的 DNS 请求 | ## 📦 威胁情报源 | # | 情报源 | IOC 类型 | 威胁类别 | 置信度 | 需要 API Key? | |---|--------|-----------|-----------------|------------|----------| | 1 | **Feodo** | IP | C2 | 95 | 否 | | 2 | **PhishTank** | URL / 域名 | 钓鱼 | 90 | 否 | | 3 | **C2IntelFeeds** | IP | C2 | 90 | 否 | | 4 | **OpenPhish** | URL / 域名 | 钓鱼 | 88 | 否 | | 5 | **MalwareBazaar** | SHA-256 哈希 | 恶意软件 | 88 | 否 | | 6 | **ThreatFox** | IP / 域名 / URL / 哈希 | 恶意软件 | 85 | 否 | | 7 | **URLhaus** | URL / 域名 | 恶意软件 | 85 | 否 | | 8 | **AbuseSSL** | IP / 哈希 | 恶意软件 | 83 | 否 | | 9 | **MISP CERT-FR** | 哈希 | 恶意软件 | 83 | 否 | | 10 | **Spamhaus** | IP | 僵尸网络 | 80 | 否 | | 11 | **OTX (AlienVault)** | IP / 域名 / URL / 哈希 | 恶意软件 | 70 | **是** | | 12 | **Pulsedive** | IP / 域名 / URL | 恶意软件 | 65 | **是** | | 13 | **Hybrid Analysis** | 哈希 | 恶意软件 | 82 | **是** | | 14 | **CAPE Sandbox** | 哈希 | 恶意软件 | 80 | **是** | | 15 | **Botvrij** | IP / 域名 / URL / 哈希 | 恶意软件 | 70 | 否 | **以及其他 14 个情报源**,包括 FireHOL、Blocklist.de、C2Tracker、DataPlane、ThreatView (5 个情报源)、Bazaar、IPsum、CINScore、PhishingArmy、VXVault、URLAbuse、TweetFeed、VirusShare、Botvrij Hashes ## 🚀 快速开始 ### 前置条件 - **Python:** 3.10 或更高版本 - **操作系统:** Windows 10+ 或 Ubuntu 20.04+ - **互联网:** 需要连接(从 29 个外部源获取数据) - **磁盘:** 主文件 + 归档 + 每周 CSV 需约 500 MB ### 安装说明 ``` # 1. 克隆 repository git clone https://github.com/siva404e/IOC_AUTOMATION.git cd IOC_AUTOMATION # 2. 安装 Python 依赖 pip install -r requirements.txt # 3. 从模板创建 config 文件 cp config.ini.example config.ini # 4. 添加你的 API 密钥(可选,但推荐) # 编辑 config.ini 并填写: # - otx_api_key (AlienVault OTX) # - pulsedive_api_key (Pulsedive) # - hybrid_analysis_api_key (Hybrid Analysis) # - cape_api_token (CAPE Sandbox) # 5. 运行 aggregator python final_ioc_weekly_split.py ``` ### 首次运行输出 ``` 19:12:40 INFO Config loaded from : /IOC_Scripts/config.ini 19:12:40 INFO Output directory : /home/analyst/IOC_Output 19:12:40 INFO Starting IOC aggregator — 29 sources configured 19:12:47 INFO [+] ThreatFox fetched 19:12:50 INFO [+] PhishTank fetched (56294 rows) 19:12:52 WARNING [-] CAPE skipped — CAPE_API_TOKEN not set 19:13:28 INFO Total unique IOCs fetched: 438977 19:13:31 INFO Master updated — 343349 new | 95628 re-seen | 438977 total 19:13:34 INFO IP 39379 rows → 4 part file(s) 19:13:34 INFO Domain 273135 rows → 28 part file(s) 19:13:34 INFO URL 20912 rows → 3 part file(s) 19:13:34 INFO Hash 9923 rows → 1 part file(s) ``` ## 📂 项目结构 ``` IOC_AUTOMATION/ ├── final_ioc_weekly_split.py ← Main aggregator script (1200+ lines) ├── config.ini ← Your API keys (git ignored) ├── config.ini.example ← Configuration template ├── requirements.txt ← Python dependencies ├── README.md ← This file ├── SOP_IOC_ThreatIntelligence_Aggregator.md ← Complete operational guide ├── .gitignore ← Prevents API key leaks └── LICENSE ← MIT License ``` ## 📊 输出文件 聚合器生成适配 Sumo Logic 的 STIX 2.1 CSV 文件: | 文件 | 格式 | 更新频率 | 用途 | |------|--------|---------|---------| | **Master_IOC.csv** | CSV (8 列) | 每次运行 | 带有 WeekTag 的 5 周 IOC 滚动历史记录 | | **Archive_IOC.csv** | CSV (8 列) | 第 6 周及以后 | 被移出批次的永久存档 | | **IOC_Weekly_IP_PartN_.csv** | CSV (10 列) | 每次运行 | IPv4 地址(每个文件最多 9,999 行) | | **IOC_Weekly_Domain_PartN_.csv** | CSV (10 列) | 每次运行 | 域名(每个文件最多 9,999 行) | | **IOC_Weekly_URL_PartN_.csv** | CSV (10 列) | 每次运行 | 恶意软件/钓鱼 URL(每个文件最多 9,999 行) | | **IOC_Weekly_Hash_PartN_.csv** | CSV (10 列) | 每次运行 | MD5/SHA-1/SHA-256 哈希值(每个文件最多 9,999 行) | ### CSV 格式 (Sumo Logic STIX 2.1) ``` id,indicator,type,source,validFrom,validUntil,confidence,threatType,actors,killChain 0001,192.0.2.1,ipv4-addr,Feodo,2026-03-18T13:00:00.000Z,2027-03-18T13:00:00.000Z,95,malicious-activity,,command-and-control 0002,evil.com,domain-name,PhishTank,2026-03-18T13:00:00.000Z,2027-03-18T13:00:00.000Z,90,malicious-activity,,delivery 0003,https://malware.xyz/pay.html,url,URLhaus,2026-03-18T13:00:00.000Z,2027-03-18T13:00:00.000Z,85,malicious-activity,,initial-access ``` ## 🔄 5 周滚动窗口架构 主文件自动维护一个滚动窗口: | 周次 | 主文件包含内容 | 归档操作 | |------|-----------------|-----------------| | 1 | W01 | — | | 2 | W01–W02 | — | | 3 | W01–W03 | — | | 4 | W01–W04 | — | | 5 | W01–W05 | — | | 6 | W02–W06 | **W01 → 归档** | | 7 | W03–W07 | **W02 → 归档** | 每个 IOC 都会获得一个 `WeekTag`(例如 `2026-W11`),以确保移出过程是确定性的。**重新发现的 IOC 会进行时间戳刷新**,防止在 Sumo Logic 中过期。 ## ⏱️ 定时执行 ### Windows(任务计划程序) ``` Program: C:\Python310\python.exe Arguments: C:\IOC_Scripts\final_ioc_weekly_split.py Start in: C:\IOC_Scripts Trigger: Weekly, Monday 07:00 ``` ### Linux(Cron) ``` crontab -e # 添加行: 0 7 * * 1 cd /path/to/IOC_Scripts && python3 final_ioc_weekly_split.py >> ~/IOC_Scripts/cron.log 2>&1 ``` ## 📤 上传至 Sumo Logic 1. 运行聚合器 → 在 `IOC_Output/` 中生成 CSV 文件 2. 登录 **Sumo Logic** → **Security** → **Threat Intelligence** 3. 点击 **Add Source** → **Manual Upload** → **CSV** 4. 上传每一个 `IOC_Weekly__Part.csv` 文件 5. Sumo Logic 自动检测指标并创建检测规则 **验证:** Sumo Logic 中的行数与您的 CSV 文件行数是否一致。 ## 📖 完整文档 有关详细的设置、故障排除和操作流程,请参阅: **👉 [SOP_IOC_ThreatIntelligence_Aggregator.md](./SOP_IOC_ThreatIntelligence_Aggregator.md)** 涵盖内容: - 系统概述与架构 - 前提条件与依赖 - 初始设置流程 - 运行与计划任务 (Windows + Linux) - 监控与日志解读 - 29 个威胁情报源的详细信息 - 主文件滚动窗口 - Sumo Logic 上传步骤 - 故障排除指南 ## ⚠️ 限制 - **依赖互联网:** 需要能够连接到所有 29 个情报源的 URL - **速率限制:** 免费 API 层级存在速率限制;如果被限流可能会跳过部分情报源 - **仅限批量处理:** 为每周批量聚合,而非实时情报源更新 - **手动上传:** Sumo Logic 上传需要手动导入 CSV(可通过 API 实现自动化) - **API Key:** OTX、Pulsedive、Hybrid Analysis、CAPE 需要免费注册才能使用完整功能 ## 🔮 未来改进 - [ ] **GitHub Actions** – 每周定时运行并自动上传 - [ ] **AbuseIPDB 集成** – 增加 IP 信誉评分 - [ ] **Sumo Logic API** – 通过 API 自动上传(无需手动导入 CSV) - [ ] **Slack 告警** – 任务完成后附带统计摘要通知 SOC - [ ] **数据库后端** – 使用 PostgreSQL 进行历史查询 - [ ] **Web 面板** – 实时查看情报源状态与 IOC 分析数据 - [ ] **Elasticsearch 导出** – 作为 Sumo Logic 之外的替代方案 ## 🛠️ 故障排除 ### 问题:`FileNotFoundError: config.ini not found` **解决方案:** 将 `config.ini.example` 复制为 `config.ini`,并将其放置在与脚本相同的目录中。 ### 问题:`ModuleNotFoundError: No module named 'requests'` **解决方案:** 运行 `pip install -r requirements.txt` ### 问题:`[-] failed: Connection error` **解决方案:** 检查网络连接。单个情报源失败属于非致命错误,其他情报源会继续运行。 ### 问题:`No IOCs fetched — aborting` **解决方案:** 检查网络连接,并确保防火墙允许出站 HTTPS 请求。 如需了解更多故障排除信息,请参阅 **[SOP_IOC_ThreatIntelligence_Aggregator.md#11-troubleshooting](./SOP_IOC_ThreatIntelligence_Aggregator.md#11-troubleshooting)** ## 📊 典型每周统计数据 ``` Total IOCs fetched: 438,977 - New IOCs: 343,349 - Re-seen IOCs: 95,628 - Unique IOCs: 438,977 (after dedup) Breakdown by type: - IP addresses: 39,379 (4 part files) - Domains: 273,135 (28 part files) - URLs: 20,912 (3 part files) - Hashes: 9,923 (1 part file) Confidence distribution: - 95 (Critical): 12,450 (Feodo, C2Intel) - 85-90 (High): 187,234 (PhishTank, ThreatFox, URLhaus) - 70-82 (Medium): 239,293 (OTX, Hybrid Analysis, others) Processing time: ~2-3 minutes Archive size: ~2.5 GB (cumulative) ``` ## 📝 许可证 本项目基于 **MIT License** 授权 — 详见 [LICENSE](./LICENSE)。 ## 👤 作者 **Sivamuthu Selvadurai M** - GitHub: [@siva404e](https://github.com/siva404e) - 代码库: [IOC_AUTOMATION](https://github.com/siva404e/IOC_AUTOMATION) ## 🙏 致谢 - **威胁情报源:** AlienVault OTX、abuse.ch、MalwareBazaar、Spamhaus、PhishTank 以及 23+ 个开源情报源 - **第三方库:** requests、pandas、beautifulsoup4、python-whois - **SIEM 集成:** 合 Sumo Logic STIX 2.1 格式规范 **最后更新:** 2026 年 5 月 **版本:** 1.0 **状态:** ✅ 生产就绪 (Production Ready)
标签:IOC收集, Python, SIEM集成, 威胁情报, 开发者工具, 无后门, 逆向工具