kaifhoda1/threat-intelligence-aggregator

GitHub: kaifhoda1/threat-intelligence-aggregator

一个基于 Python 的威胁情报聚合器,通过六步流水线自动收集、规范化并关联多源 IOC,生成可直接部署的拦截列表和威胁报告。

Stars: 0 | Forks: 0

# 威胁情报聚合器 **一个基于 Python 的蓝队工具,能够从多个威胁情报源收集、规范化、关联 IOC,并生成可直接部署的拦截列表 — 同时配备实时 Flask Web 仪表板。** ![Python](https://img.shields.io/badge/Python-3.8+-blue?style=for-the-badge&logo=python&logoColor=white) ![Flask](https://img.shields.io/badge/Flask-Web%20Dashboard-green?style=for-the-badge&logo=flask&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge) ![Status](https://img.shields.io/badge/Status-Active-brightgreen?style=for-the-badge)
## 这是什么? 现代 SOC 团队每天都会从数十个来源接收威胁数据——它们格式各异、存在重复且结构不一致。分析师们每天要浪费数小时手动处理这些情报源。 **威胁情报聚合器**通过自动化整个工作流程来解决这一问题: ``` Raw Feeds (TXT/CSV/JSON) -> Parse -> Normalize -> Correlate -> Blocklists + Report ``` 只需一条命令,它就能处理你所有的威胁情报源,并为你的防火墙、Web 代理、EDR 和邮件网关生成可直接部署的拦截列表。 ## 快速开始 ``` # 1. 克隆 repository git clone https://github.com/kaifhoda1/threat-intelligence-aggregator.git cd threat-intelligence-aggregator # 2. 安装 dependencies pip3 install -r requirements.txt # 3. 将你的 IOC feed 文件添加到 feeds/ 目录 # 支持的格式:.txt .csv .json # 4. 运行完整的 pipeline (CLI) python3 main.py # 5. 启动 web dashboard python3 dashboard.py # 在浏览器中打开 http://localhost:5000 ``` ## 项目结构 ``` threat-intelligence-aggregator/ │ ├── feeds/ <- Drop your IOC feed files here │ ├── feed1_ips.txt <- Sample: malicious IP list │ ├── feed2_mixed.csv <- Sample: mixed IOCs (CSV format) │ └── feed3_cert.json <- Sample: CERT threat feed (JSON) │ ├── modules/ <- Core pipeline modules │ ├── parser.py <- Step 1: Parse TXT/CSV/JSON feeds │ ├── normalizer.py <- Step 2 & 3: Validate & deduplicate │ ├── correlator.py <- Step 4: Cross-feed correlation & scoring │ ├── blocklist_gen.py <- Step 5: Generate blocklists │ └── reporter.py <- Step 6: Final TXT + JSON report │ ├── output/ │ ├── blocklists/ <- 12 blocklist files (4 types x 3 formats) │ └── reports/ <- Threat intelligence reports │ ├── main.py <- CLI entry point ├── dashboard.py <- Flask web dashboard └── requirements.txt ``` ## 工作原理 — 6 步流水线 | 步骤 | 模块 | 功能描述 | |------|--------|-------------| | 1 | `parser.py` | 加载所有情报源文件,自动检测 TXT/CSV/JSON 格式,并使用正则表达式提取 IOC | | 2 | `normalizer.py` | 验证每个 IOC(IP 格式、域名结构、哈希长度等) | | 3 | `normalizer.py` | 根据 (类型, 值) 键去重,合并来源,并提升严重等级 | | 4 | `correlator.py` | 计算风险评分 (0-100),将在 2 个及以上情报源中出现的 IOC 标记为已关联 | | 5 | `blocklist_gen.py` | 生成 TXT、CSV 和 JSON 格式的 4 类拦截列表 | | 6 | `reporter.py` | 生成 TXT 和 JSON 格式的完整威胁情报报告 | ## 支持的 IOC 类型 | 类型 | 示例 | 验证方法 | |------|---------|------------------| | IP 地址 | `185.220.101.45` | Python ipaddress 模块 | | 域名 | `malware-c2.ru` | 正则表达式 + 白名单过滤 | | URL | `http://evil.com/payload.exe` | HTTP/HTTPS 前缀检查 | | MD5 哈希 | `d41d8cd98f00b204e9800998ecf8427e` | 32 个字符的十六进制 | | SHA1 哈希 | `da39a3ee5e6b4b0d3255bfef95601890afd80709` | 40 个字符的十六进制 | | SHA256 哈希 | `e3b0c44298fc1c149afbf4c8996fb92427ae41e4...` | 64 个字符的十六进制 | | 电子邮件 | `phisher@evil.com` | 正则表达式验证 | ## 风险评分公式 每个 IOC 都会获得一个 0 到 100 的风险评分,计算方式如下: ``` Risk Score = Feed Count Score (max 40) + Severity Score (max 40) + IOC Type Weight (max 20) ``` | 评分范围 | 严重性 | 操作建议 | |------------|----------|--------| | >= 70 | HIGH (高) | 需要立即采取行动 | | >= 40 | MEDIUM (中) | 监控并调查 | | < 40 | LOW (低) | 仅供参考 | ## 拦截列表输出 | 拦截列表文件 | IOC 类型 | 部署至 | |---------------|-----------|-----------| | `firewall_blocklist` | IP 地址 | iptables / pfSense / Cisco ACL | | `webfilter_blocklist` | URL + 域名 | 代理 / DNS 沉洞 / Zscaler | | `edr_hash_blocklist` | MD5, SHA1, SHA256 | CrowdStrike / SentinelOne / Defender | | `email_blocklist` | 电子邮件地址 | Microsoft 365 / SpamAssassin | 每个拦截列表均会导出为 3 种格式:`.txt` `.csv` `.json` — 共计 12 个文件。 ## 结果示例 针对内置的 3 个示例情报源运行: ``` Feeds Processed : 3 Raw IOCs Collected : 30 Duplicates Merged : 10 Unique IOCs : 20 HIGH Severity : 9 MEDIUM Severity : 7 LOW Severity : 4 Cross-Feed Correlated : 7 Blocklist Files Output : 12 ``` 排名靠前的关联指标: | 严重性 | 类型 | 评分 | 情报源数 | 指标 | |----------|------|-------|-------|-----------| | HIGH | ip | 99/100 | 3 | `185.220.101.45` | | HIGH | ip | 99/100 | 3 | `45.142.212.100` | | HIGH | ip | 84/100 | 3 | `91.108.4.1` | | HIGH | domain | 82/100 | 2 | `malware-c2.ru` | | MEDIUM | ip | 56/100 | 2 | `203.0.113.10` | ## Web 仪表板 运行 `python3 dashboard.py` 并打开 `http://localhost:5000` 功能特性: - 实时统计卡片(IOC 总数,HIGH/MEDIUM/LOW 计数,跨情报源命中数) - 按类型划分的 IOC 分布柱状图 - 拦截列表输出摘要 - 完全可搜索的 IOC 表格 - 按严重性过滤(HIGH / MEDIUM / LOW / Correlated) - 一键重新运行分析按钮 ## 使用的技术 | 工具 | 用途 | |------|---------| | Python 3 | 核心语言 | | Flask | Web 仪表板和 REST API | | re (regex) | IOC 提取模式 | | ipaddress | IP 验证 | | csv / json | 多格式解析与导出 | | datetime | IOC 时间戳记录 | | argparse | CLI 参数处理 | ## 情报源文件格式 **TXT** — 每行一个 IOC: ``` 185.220.101.45 malware-c2.ru http://evil.com/payload.exe ``` **CSV** — 包含表头: ``` type,indicator,severity ip,185.220.101.45,high domain,malware-c2.ru,high url,http://evil.com/payload.exe,medium ``` **JSON** — indicators 数组: ``` { "indicators": [ {"type": "ip", "value": "185.220.101.45", "confidence": 90}, {"type": "domain", "value": "malware-c2.ru", "confidence": 95} ] } ``` ## 学习成果 - IOC 在真实世界威胁情报平台中的结构 - 解析和规范化异构的多格式数据源 - 通过跨来源关联识别高置信度威胁 - SOC 分析师如何使用和确定威胁情报的优先级 - 生成拦截列表并将其部署到安全控制措施中 - 使用 Flask 构建安全仪表板 ## 作者 **Mohammad Kaif** GitHub: [kaifhoda1](https://github.com/kaifhoda1) Fellowship: Unified Mentor Cybersecurity Program
如果这个项目对你有帮助,请为该仓库点个 Star。
标签:Flask, IOC聚合, Python, 威胁情报, 开发者工具, 无后门, 逆向工具