tapasrc123/cti-agent
GitHub: tapasrc123/cti-agent
开源威胁情报聚合平台,从 11 个主流情报源自动采集 IOC,提供 STIX/TAXII 标准接口和多种格式导出
Stars: 0 | Forks: 0
# 🛡️ CTI Agent — 开源网络威胁情报平台
## ✨ 功能特性
| 能力 | 详情 |
|---|---|
| **11 个情报源** | CISA KEV, NVD/CVE, AlienVault OTX, Abuse.ch (URLhaus + MalwareBazaar + ThreatFox), MISP Public Feeds, MITRE ATT&CK, PhishTank, Feodo Tracker, Emerging Threats |
| **所有 IOC 类型** | IP 地址, 域名, URL, SHA256/SHA1/MD5 哈希, 邮箱地址, CVE ID, YARA 规则 |
| **STIX 2.1 / TAXII 2.1** | 行业标准订阅源格式,支持 IOC 消费者的 TAXII 集合 |
| **富化** | GeoIP + ASN (MaxMind GeoLite2 或 ip-api.com), VirusTotal 评分, Shodan 端口/漏洞数据, MITRE ATT&CK 技术映射 |
| **REST API** | JSON 订阅源, CSV/TXT 导出, 速率限制 (5 请求/分钟/IP) |
| **仪表盘** | 带图表、DataTables 和收集运行状态的实时只读 UI |
| **Slack 告警** | 针对严重/高威胁的实时告警,每日摘要 |
| **Cloudflare Worker** | 可选边缘代理,具备基于 KV 的速率限制和响应缓存 |
| **跨平台** | macOS (Intel/Apple Silicon) + Linux (Ubuntu/Debian/Oracle/RHEL) |
## 🚀 快速安装
```
git clone https://github.com/tapasrc123/cti-agent.git
cd cti-agent
bash install.sh
```
安装程序将:
1. 检测您的操作系统 (macOS / Debian / Oracle Linux / RHEL)
2. 安装系统依赖 (Python 3.9+, PostgreSQL)
3. 创建专用的 PostgreSQL 数据库和用户
4. 设置 Python virtualenv 并安装所有依赖
5. 生成 `.env` 配置文件
6. 初始化数据库 schema
7. 注册系统服务 (macOS LaunchAgent / systemd)
### 选项
```
bash install.sh --no-service # Skip service installation
bash install.sh --port=9000 # Use a custom port
bash install.sh --db-url="postgresql://user:pass@host/db" # Use existing DB
```
## ⚙️ 配置
安装后编辑 `.env`:
```
# 完整功能所需
OTX_API_KEY=your_otx_key # https://otx.alienvault.com/api (free)
VIRUSTOTAL_API_KEY=your_vt_key # https://virustotal.com (free 500 req/day)
PHISHTANK_API_KEY=your_pt_key # https://phishtank.com (free)
NVD_API_KEY=your_nvd_key # https://nvd.nist.gov/developers (free, higher rate)
# 告警
SLACK_WEBHOOK_URL=https://hooks.slack.com/...
SLACK_ALERT_SEVERITY=HIGH # Alert on HIGH and CRITICAL
# 可选:MaxMind GeoLite2 (更精确的 GeoIP)
MAXMIND_LICENSE_KEY=your_key # https://maxmind.com/en/geolite2/signup
```
## 🖥️ 使用方法
```
# 激活 virtualenv
source venv/bin/activate
# 启动 server + scheduler (每小时收集)
python main.py serve
# 立即运行一次收集周期
python main.py collect
# 仅初始化 DB
python main.py init-db
```
## 🌐 API 端点
所有 API 端点均限制为 **5 请求/分钟/IP**。
### 威胁情报
| Method | Endpoint | 描述 |
|--------|----------|-------------|
| `GET` | `/api/threats` | 列出威胁 (过滤条件: severity, source, CVE, days) |
| `GET` | `/api/threats/{id}` | 威胁详情及关联的 IOC |
| `GET` | `/api/threats/stats` | 严重程度/来源/类型分布 + 7 天趋势 |
| `GET` | `/api/iocs` | 列出 IOC (过滤条件: type, threat_level, source) |
| `GET` | `/api/iocs/search?value=x` | 搜索特定指标 |
| `GET` | `/api/iocs/{id}` | 包含富化数据的 IOC 详情 |
| `GET` | `/api/iocs/stats` | IOC 统计数据和热门恶意软件家族 |
### 订阅源与导出
| Method | Endpoint | 描述 |
|--------|----------|-------------|
| `GET` | `/api/stix/bundle` | 完整 STIX 2.1 Bundle (IOC + 漏洞) |
| `GET` | `/api/stix/indicators` | STIX Indicator 对象 |
| `GET` | `/api/stix/vulnerabilities` | STIX Vulnerability 对象 |
| `GET` | `/taxii/` | TAXII 2.1 Discovery |
| `GET` | `/taxii/cti/collections/` | 列出 TAXII 集合 |
| `GET` | `/taxii/cti/collections/{id}/objects/` | TAXII 订阅源对象 |
| `GET` | `/api/export/iocs.csv` | IOC 的 CSV 导出 |
| `GET` | `/api/export/threats.csv` | 威胁的 CSV 导出 |
| `GET` | `/feeds/ips.txt` | 纯文本 IP 黑名单 (`?min_level=HIGH&days=N`) |
| `GET` | `/feeds/domains.txt` | 纯文本域名黑名单 |
| `GET` | `/feeds/urls.txt` | 纯文本 URL 黑名单 |
| `GET` | `/feeds/hashes.txt` | 纯文本 SHA-256 哈希列表 |
| `GET` | `/feeds/md5.txt` | 纯文本 MD5 哈希列表 |
| `GET` | `/feeds/sha1.txt` | 纯文本 SHA-1 哈希列表 |
| `GET` | `/feeds/emails.txt` | 纯文本恶意邮箱列表 |
| `GET` | `/feeds/cves.txt` | 纯文本 CVE 列表 |
| `GET` | `/feeds/{type}` | 通用: 任何 IOC 类型,`.txt` 后缀可选 |
### 仪表盘
| URL | 描述 |
|-----|-------------|
| `/dashboard` | 主仪表盘 |
| `/dashboard/threats` | 完整威胁表 |
| `/dashboard/iocs` | 带富化信息的完整 IOC 表 |
| `/docs` | Swagger UI (交互式 API 文档) |
| `/health` | 健康检查 |
## 📡 TAXII 2.1 Collections
三个预定义集合:
| Collection ID | 名称 | 内容 |
|---|---|---|
| `364ced75-0001-4cti-0000-000000000001` | IOC Indicators | 所有作为 STIX Indicators 的活跃 IOC |
| `364ced75-0001-4cti-0000-000000000002` | Vulnerabilities | 关联 CVE 的 STIX Vulnerabilities |
| `364ced75-0001-4cti-0000-000000000003` | All Objects | 组合 bundle |
**从 TAXII 客户端订阅 (例如 OpenCTI, MISP):**
```
TAXII Server: http://your-server:8000/taxii/
API Root: http://your-server:8000/taxii/cti/
```
## ☁️ Cloudflare Worker 部署
```
cd cloudflare
# 安装 Wrangler
npm install -g wrangler
# 认证
wrangler login
# 为 rate limiting 创建 KV namespace
wrangler kv:namespace create "CTI_RATE_LIMIT"
# 将 ID 复制到 wrangler.toml
# 设置 secrets
wrangler secret put ORIGIN_URL # e.g. http://152.x.x.x:8000
wrangler secret put CF_WORKER_TOKEN
# 部署
wrangler deploy
```
Worker 提供:
- 边缘级速率限制 (通过 KV 实现 5 请求/分钟/IP)
- STIX/TAXII 订阅源的响应缓存 (5 分钟 TTL)
- CORS 头
- DDoS 防护
- 自定义域名路由
## 🏗️ 架构
```
cti-agent/
├── install.sh # Cross-platform installer
├── main.py # CLI entry point (serve|collect|init-db)
├── config/ # Pydantic settings
├── storage/ # SQLAlchemy models + PostgreSQL
│ ├── models.py # Threat, IOC, ThreatIOC, CollectionRun
│ └── database.py # Async engine
├── collectors/ # 11 intelligence source collectors
│ ├── cisa_kev.py # CISA Known Exploited Vulnerabilities
│ ├── nvd_cve.py # NIST NVD
│ ├── otx.py # AlienVault OTX
│ ├── abusech.py # URLhaus + MalwareBazaar + ThreatFox
│ ├── misp_feeds.py # MISP + Emerging Threats + IPSum
│ ├── shodan.py # Shodan InternetDB enrichment
│ ├── virustotal.py # VT enrichment
│ ├── mitre_attack.py # MITRE ATT&CK
│ ├── phishtank.py # PhishTank
│ └── feodo_tracker.py # Feodo C2 tracker
├── enrichment/ # GeoIP/ASN + MITRE mapping
├── api/ # FastAPI application
│ ├── routers/ # threats, iocs, stix, taxii, health
│ └── rate_limiter.py # slowapi (5 req/min/IP)
├── dashboard/ # Jinja2 templates + Bootstrap 5
├── alerting/ # Slack webhook notifications
├── scheduler/ # APScheduler (hourly collection)
└── cloudflare/ # Worker JS + wrangler.toml
```
## 🔒 安全说明
- 所有 API 端点均为 **只读** (仅限 GET/HEAD)
- 默认限制为 5 请求/分钟/IP;在 `.env` 中设置 `RATE_LIMIT_ENABLED=false` 以禁用
- 纯文本订阅源端点 (`/feeds/*`) 豁免速率限制,以便自动化消费者使用
- Cloudflare Worker 增加额外的边缘保护
- 无需认证 (设计为内部/VPN 保护服务)
- 生产环境:放置在反向代理 之后并启用 TLS
## 📦 所需的免费 API 密钥
| 服务 | URL | 速率限制 |
|---------|-----|------------|
| AlienVault OTX | https://otx.alienvault.com/api | 慷慨的免费额度 |
| Abuse.ch | https://abuse.ch/ (注册 → My Account) | 免费 — 启用 URLhaus, MalwareBazaar, ThreatFox |
| VirusTotal | https://virustotal.com/gui/join-us | 500 请求/天 (免费) |
| PhishTank | https://phishtank.com/api_info.php | 有密钥时 1000 请求/小时 |
| NVD | https://nvd.nist.gov/developers | 有密钥时 50 请求/30秒 |
| MaxMind GeoLite2 | https://maxmind.com/en/geolite2/signup | 免费 (下载数据库) |
所有收集器**无需 API 密钥**即可工作,但速率限制会降低。
设置 `ABUSE_CH_API_KEY` 以解锁 SHA-256 / MD5 / SHA-1 恶意软件哈希订阅源。
## 📄 许可证
MIT License — 可免费使用、修改和分发。
*为防御者构建。由开源威胁情报驱动。*
# cti-agent
标签:Ask搜索, CISA KEV, Cloudflare Worker, CVE, DAST, GPT, HTTP/HTTPS抓包, IOC 提取, IP 信誉, IP 地址批量处理, NVD, PE 加载器, PostgreSQL, Python, REST API, SIEM 集成, Slack 告警, STIX 2.1, TAXII 2.1, VirusTotal, YARA, 不可变基础设施, 云资产可视化, 仪表盘, 域名收集, 威胁情报, 安全运营, 密码管理, 开发者工具, 开源, 态势感知, 恶意软件分析, 扫描框架, 数字签名, 无后门, 测试用例, 漏洞管理, 程序员工具, 网络信息收集, 网络安全, 网络测绘, 逆向工具, 钓鱼检测, 隐私保护