kaifhoda1/threat-intelligence-aggregator
GitHub: kaifhoda1/threat-intelligence-aggregator
一个基于 Python 的威胁情报聚合器,通过六步流水线自动收集、规范化并关联多源 IOC,生成可直接部署的拦截列表和威胁报告。
Stars: 0 | Forks: 0
# 威胁情报聚合器
**一个基于 Python 的蓝队工具,能够从多个威胁情报源收集、规范化、关联 IOC,并生成可直接部署的拦截列表 — 同时配备实时 Flask Web 仪表板。**




## 这是什么?
现代 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, 威胁情报, 开发者工具, 无后门, 逆向工具