Ham0091/Threat-Intelligence-Dashboard
GitHub: Ham0091/Threat-Intelligence-Dashboard
一个聚合多源威胁情报的 Flask Web 应用,提供 IP、域名、URL 的综合威胁评分与多维信息查询。
Stars: 0 | Forks: 0
# 威胁情报仪表板
一个 Flask Web 应用,用于查询多个威胁情报 API 以获取给定的 IP、域名或 URL,并返回综合威胁评分。
## 功能介绍
输入 IP 地址、域名或 URL,该应用程序将并行查询所有已配置的来源,然后返回原始结果以及 0 到 100 的加权威胁评分。结果会在本地 SQLite 数据库中缓存一小时,并且扫描历史记录会在重启后保留。前端会在每个来源响应时流式传输结果,以便您实时查看数据。
## 数据来源
| 来源 | 提供内容 | 免费层级 |
|---|---|---|
| VirusTotal | 恶意检测计数,来自安全厂商扫描的信誉评分 | 是 (4 次查询/分钟) |
| AbuseIPDB | IP 的滥用置信度评分和总报告数 | 是 (1,000 次检查/天) |
| GreyNoise | IP 噪声分类 (良性/恶意/未知),IP 是否为互联网扫描器流量 | 是 |
| CrowdSec | 社区来源的 IP 信誉、攻击行为、整体评分 | 是 |
| URLhaus | URL 是否出现在 URLhaus 恶意 URL 数据库中 | 是 (无需密钥) |
| IPInfo | IP 的地理位置、主机名、ASN 和组织 | 是 (50,000 次请求/月) |
| WHOIS | 域名注册商、创建日期、到期日期、名称服务器 | 无需密钥 |
| DNS | 域名的 A、AAAA、MX、NS、TXT、SOA 记录 | 无需密钥 |
| SSL | 域名的证书主题、颁发者和有效期 | 无需密钥 |
| crt.sh | 来自证书透明度日志的子域名枚举 | 无需密钥 |
## 威胁评分
评分在 `calculate_threat_score()` 中计算,上限为 100。
VirusTotal 贡献 30%:单项来源评分为 `min(100, malicious_detections × 3 + abs(reputation) × 2)` —— 在加权前上限为 100 —— 然后乘以 0.30。
AbuseIPDB 贡献 30%:原始 `abuse_confidence_score` (0–100) 乘以 0.30。
GreyNoise 增加固定分值:如果 IP 被归类为恶意,+20 分;如果被标记为互联网背景噪声,+10 分。
CrowdSec 增加固定分值:如果 IP 具有不良信誉标记,+25 分;如果其整体评分超过 50,+15 分。
URLhaus 贡献 10%:如果 URL 被列为威胁,则为 100,否则为 0,乘以 0.10。
WHOIS、DNS 和 SSL 各自根据缺失的记录或证书贡献较小的调整(总计低于 1.5 分)。
## 设置
1. 需要 Python 3.8+ 和 pip。
2. 克隆仓库:
git clone https://github.com/Ham0091/Threat-Intelligence-Dashboard.git
cd Threat-Intelligence-Dashboard
3. 安装依赖项:
pip install -r requirements.txt
4. 复制 env 模板并填入您的 API 密钥:
cp .env.example .env
5. 获取各密钥的地址:
- VirusTotal: https://www.virustotal.com/gui/settings/api
- AbuseIPDB: https://www.abuseipdb.com/api
- GreyNoise: https://www.greynoise.io/
- CrowdSec: https://app.crowdsec.net/
- IPInfo: https://ipinfo.io/
6. 运行应用:
python app.py
在浏览器中打开 http://localhost:5001。
## API 密钥:必需与可选
VirusTotal 和 AbuseIPDB 实际上是获得有用评分所必需的。如果没有这些密钥,应用程序将继续运行,但会跳过这些来源,导致威胁评分中高达 60% 的部分未被加权。这些来源的结果面板将显示错误。
GreyNoise、CrowdSec 和 IPInfo 会优雅降级:这些结果面板将显示错误,但其余结果仍会返回。URLhaus 无需密钥即可工作(默认值为 `public`)。
WHOIS、DNS、SSL 和 crt.sh 无需密钥且始终运行。
## 已知限制
- VirusTotal 免费层级限制为每分钟 4 次查询。快速连续查询将达到速率限制。
- AbuseIPDB 免费层级允许每天 1,000 次检查。大量使用会迅速耗尽配额。
- GreyNoise 和 CrowdSec 仅针对 IP 返回有用数据。针对域名和 URL 的查询会跳过它们。
- URLhaus 仅针对 URL 输入进行查询。它不检查裸 IP 或域名。
- 威胁评分不考虑误报。知名 CDN IP 上的高 VirusTotal 检测计数仍将产生高评分。
- 1 小时缓存意味着重新扫描最近检查过的指标会返回陈旧数据。
- crt.sh 偶尔会返回 503 错误,并且没有可用性 SLA 保证。
## 项目结构
```
Threat-Intelligence-Dashboard/
├── app.py
├── requirements.txt
├── .env.example
├── .gitignore
├── README.md
├── static/
│ ├── style.css
│ └── script.js
├── templates/
│ └── index.html
└── tests/
```
## 许可证
MIT
标签:AbuseIPDB, API集成, Ask搜索, CrowdSec, DNS记录, ESC4, Flask, GitHub, GreyNoise, HTTP/HTTPS抓包, IP信誉查询, OSINT, Python, SOC辅助, SQLite, SSL证书, Threat Intelligence, URL扫描, VirusTotal, WHOIS查询, 协议探测, 可观测性, 域名安全检测, 威胁分析, 威胁情报, 子域名枚举, 实时处理, 开发者工具, 异步查询, 态势感知, 恶意评分, 情报仪表盘, 数据可视化, 无后门, 系统安全, 网络安全, 自动化侦查工具, 调试辅助, 资产测绘, 逆向工具, 隐私保护