justin-pitt/threatscout
GitHub: justin-pitt/threatscout
一款威胁情报聚合查询工具,可同时调用多个免费API对IP、域名、URL、哈希和CVE进行统一分析并生成增强报告。
Stars: 0 | Forks: 0
# threatscout
一款威胁情报工具,可同时查询多个免费 API,并针对任何指标(IP 地址 (IPv4/IPv6)、域名、URL、文件哈希或 CVE)返回统一且经过增强的报告。
| 扫描 | 报告 |
|------|--------|
|  |  |
| 仪表盘 | 历史记录 |
|-----------|---------|
|  |  |
## 快速开始
**前置条件:** Python 3.10+
### 1. 安装
```
git clone https://github.com/justin-pitt/threatscout.git
cd threatscout
pip install -e ".[web]"
```
### 2. 配置 API Keys
```
cp .env.example .env
```
编辑 `.env` 并添加你的密钥:
```
# 完整覆盖所需
VIRUSTOTAL_API_KEY=your-key-here
ABUSEIPDB_API_KEY=your-key-here
OTX_API_KEY=your-key-here
# 可选 — 有 key 具有更高速率限制;无 key 也可工作
NVD_API_KEY=your-key-here
# 可选 — 免费社区 key
GREYNOISE_API_KEY=your-key-here
# 可选 — 付费计划
SHODAN_API_KEY=your-key-here
```
部分来源无需任何密钥即可使用:MalwareBazaar、URLScan.io、WHOIS 和 CISA KEV。
### 3. 设置数据库
```
cd web
python manage.py migrate
```
### 4. 运行服务器
```
python manage.py runserver
```
在浏览器中打开 **http://localhost:8000** —— 就这么简单。
## 功能介绍
- **扫描** (`/`) — 输入任何 IP、域名、URL、文件哈希或 CVE。结果通过加载遮罩层异步加载。
- **报告** (`/report//`) — 详细结果,包含判定横幅、摘要统计和可折叠的各来源卡片。恶意/可疑的发现默认展开。
- **仪表盘** (`/dashboard/`) — 随时间变化的扫描量、判定分布和查询最多的指标。
- **历史记录** (`/history/`) — 分页的扫描历史,支持全文搜索和判定过滤。
## 支持的来源
| 来源 | 提供内容 | 指标类型 | 是否需要密钥 |
|---|---|---|---|
| [VirusTotal](https://virustotal.com) | 来自 70 多个 AV 引擎的恶意软件扫描结果 | IP, domain, URL, hash | 免费 (4 次/分钟) |
| [AbuseIPDB](https://abuseipdb.com) | IP 滥用报告和置信度评分 | IP | 免费 (1,000 次/天) |
| [AlienVault OTX](https://otx.alienvault.com) | 社区威胁 Pulses 和 IOC 上下文 | IP, domain, URL, hash | 免费 (无限制说明) |
| [NVD / NIST](https://nvd.nist.gov) | 官方 CVE 数据库及 CVSS 评分 | CVE | 可选 (有密钥速率更高) |
| [CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) | 已知被利用漏洞目录 | CVE | 无需密钥 |
| [MalwareBazaar](https://bazaar.abuse.ch) | 恶意软件哈希查询,包含家族和文件类型 | Hash | 无需密钥 |
| [URLScan.io](https://urlscan.io) | URL/域名/IP 扫描历史和恶意标记 | IP, domain, URL | 无需密钥 |
| [WHOIS](https://pypi.org/project/python-whois/) | 域名注册时间、注册商、名称服务器 | Domain | 无需密钥 |
| [GreyNoise](https://greynoise.io) | 互联网背景噪音分类 | IP | 免费社区密钥 |
| [Shodan](https://shodan.io) | 开放端口、暴露服务和已知 CVE | IP | 付费密钥 |
## 获取 API Keys
- **VirusTotal** — [virustotal.com](https://www.virustotal.com/gui/join-us) → 免费:4 次/分钟,500 次/天
- **AbuseIPDB** — [abuseipdb.com](https://www.abuseipdb.com/register) → 免费:1,000 次/天
- **AlienVault OTX** — [otx.alienvault.com](https://otx.alienvault.com/accounts/register) → 免费,无限制说明
- **NVD** — [nvd.nist.gov](https://nvd.nist.gov/developers/request-an-api-key) → 免费:有密钥 50 次/30秒,无密钥 5 次/30秒
- **GreyNoise** — [viz.greynoise.io](https://viz.greynoise.io/signup) → 免费社区密钥
- **Shodan** — [account.shodan.io](https://account.shodan.io) — 主机查询需付费计划
## DNS 增强
ThreatScout 会自动对指标进行双向增强:
- **Domain/URL → IP:** 将域名解析为其 IP,并针对该 IP 查询基于 IP 的来源(AbuseIPDB、VirusTotal 等)。
- **IP → Hostname:** 执行反向 DNS 查询,并针对解析出的主机名查询基于域名的来源。
增强后的结果显示在报告的一个单独标记区域中。
## 数据库
默认情况下,Web UI 使用 SQLite (`web/db.sqlite3`)。如果使用 PostgreSQL,请在 `.env` 中添加以下内容:
```
DJANGO_SECRET_KEY=your-secret-key
DB_ENGINE=django.db.backends.postgresql
DB_NAME=threatscout
DB_USER=your-user
DB_PASSWORD=your-password
DB_HOST=localhost
DB_PORT=5432
```
## REST API
还提供基于 FastAPI 的 API 用于程序化访问。
```
uvicorn threatscout.api:app --reload
```
### `POST /scan`
```
curl -X POST http://localhost:8000/scan \
-H "Content-Type: application/json" \
-d '{"indicator": "198.51.100.42"}'
```
| 字段 | 类型 | 描述 |
|---|---|---|
| `indicator` | string (必填) | 要扫描的值 |
| `indicator_type` | string 或 null | 显式指定类型:`ip`、`domain`、`url`、`hash`、`cve`。省略则自动检测。 |
| `sources` | list 或 null | 仅查询这些来源。省略则使用全部。 |
| `exclude` | list 或 null | 跳过这些来源。 |
### `GET /health`
返回 API 状态和已加载来源的数量。
交互式文档位于 `http://localhost:8000/docs`。Python 示例请参见 [`examples/api_example.py`](examples/api_example.py)。
## CLI
ThreatScout 还提供 CLI 用于终端操作:
```
# 自动检测指示器类型
threatscout scan 198.51.100.42
# 显式类型
threatscout ip 198.51.100.42
threatscout domain malicious-example.com
threatscout url "https://malicious-example.com/payload"
threatscout hash d41d8cd98f00b204e9800998ecf8427e
threatscout cve CVE-2021-44228
# 输出为 JSON 或 CSV
threatscout ip 198.51.100.42 --format json
threatscout ip 198.51.100.42 --format csv
# 保存到文件
threatscout ip 198.51.100.42 --output report.json
# 筛选来源
threatscout ip 198.51.100.42 --sources virustotal,abuseipdb
threatscout ip 198.51.100.42 --exclude shodan,greynoise
# 最低风险等级
threatscout ip 198.51.100.42 --min-risk suspicious
```
## 运行测试
```
pip install -e ".[dev]"
pytest tests/ -v
```
标签:AbuseIPDB, Ask搜索, CVE漏洞查询, DAST, Django, ESC4, File Hash, IP地址查询, OSINT, Python, VirusTotal, Web安全, 商业软件, 域名信誉, 威胁情报, 安全仪表盘, 安全态势感知, 开发者工具, 开源情报工具, 恶意软件分析, 无后门, 测试用例, 网络安全, 网络测绘, 自动化安全检测, 蓝队分析, 逆向工具, 隐私保护