zacharyloganhill/PhantomFeed
GitHub: zacharyloganhill/PhantomFeed
PhantomFeed 是一款完全本地托管的开源威胁情报聚合平台,将 CVE、CISA KEV、厂商公告、恶意软件源和供应链漏洞汇聚到统一仪表板,并通过 Ollama 本地 AI 提供智能分析,无需任何 SaaS 订阅或外部数据传输。
Stars: 0 | Forks: 0
# PhantomFeed



**实时威胁情报聚合,本地托管。**
PhantomFeed 将 CVE、供应商安全公告、CISA 警报、恶意软件源和威胁情报汇聚到一个可搜索的 Feed 流中 —— 它拥有暗黑模式的仪表板以及由 Ollama 驱动的本地 AI 分析师。无需 SaaS 订阅,无遥测数据,没有 API 账单。完全在你的机器上运行。
## 前置条件
| 工具 | 版本 | 下载 |
|------|---------|----------|
| Python | 3.12+ | [python.org](https://www.python.org/downloads/) |
| Git | 任意 | [git-scm.com](https://git-scm.com/downloads) |
| Ollama | 最新版 | [ollama.com](https://ollama.com/download) |
## 快速开始
```
:: 1. Clone
git clone https://github.com/zacharyloganhill/threatpulse.git phantomfeed
cd phantomfeed
:: 2. Create and activate virtual environment
python -m venv .venv
.venv\Scripts\activate
:: 3. Install dependencies
pip install -r requirements.txt
:: 4. Configure
copy .env.example .env
:: 5. Pull an Ollama model (runs locally, one-time download ~2 GB)
ollama pull llama3.2
:: 6. Start PhantomFeed
python main.py
```
然后在浏览器中打开 **http://localhost:8000/dashboard.html**。
首次运行时,所有 Feed 源都会被立即轮询。当 API 处于活动状态时,状态栏会显示 **● CONNECTED**;当检测到 Ollama 时,会显示 **● AI: llama3.2**。
## 接入的 Feed 源
### 漏洞情报
| Feed | 来源 | 间隔 | 备注 |
|------|--------|----------|-------|
| NVD CVE API v2 | nvd.nist.gov | 15 分钟 | 完整的 CVSS、CPE、CWE 元数据 |
| CISA KEV | cisa.gov | 15 分钟 | 仅包含被积极利用的 CVE |
| CISA 网络安全公告 | github.com/cisagov | 60 分钟 | CSAF/IT — 联合公告、约束性操作指令 (BODs) |
| CISA ICS 公告 | github.com/cisagov | 60 分钟 | CSAF/OT — SCADA、ICS、OT 系统 |
### 供应商安全公告
| Feed | 供应商 | 来源 |
|------|--------|--------|
| Microsoft MSRC | Microsoft | msrc.microsoft.com |
| Cisco Security | Cisco | sec.cloudapps.cisco.com |
| Fortinet PSIRT | Fortinet | fortiguard.com |
| Palo Alto Networks | Palo Alto | security.paloaltonetworks.com |
| Red Hat Security | Red Hat | access.redhat.com |
| Ubuntu Security | Canonical | ubuntu.com |
### 威胁情报与恶意软件
| Feed | 来源 | 备注 |
|------|--------|-------|
| abuse.ch URLhaus | urlhaus-api.abuse.ch | 实时恶意软件 URL 和 C2 基础设施 |
| abuse.ch Feodo Tracker | feodotracker.abuse.ch | 僵尸网络 C2 IP 屏蔽列表 |
| AlienVault OTX | otx.alienvault.com | 威胁脉冲(需要免费的 API key) |
### 供应链
| Feed | 来源 | 备注 |
|------|--------|-------|
| GitHub Advisory (npm) | github.com/advisories | Node.js 包漏洞 |
| GitHub Advisory (PyPI) | github.com/advisories | Python 包漏洞 |
## REST API
基础 URL:`http://localhost:8000/api/v1`
交互式文档:`http://localhost:8000/docs`
### 端点
```
GET /items List items — filterable, searchable, paginated
GET /items/{id} Get a single item by ID
POST /items/{id}/read Mark item as read
POST /items/read-all Mark all items as read
GET /stats Counts by severity, feed, and new/total
GET /feeds List all registered feed IDs
POST /refresh Trigger immediate poll of all feeds
POST /refresh/{feed_id} Trigger poll of one specific feed
DELETE /items/purge Delete items older than retention period
```
### Ollama 代理
```
GET|POST /api/ollama/{path} Proxies to http://localhost:11434/{path}
```
消除了仪表板和 Ollama 之间的 CORS 问题。代理会流式传输响应,因此聊天补全会逐 token 渲染。
### `GET /items` 的查询参数
| 参数 | 示例 | 描述 |
|-------|---------|-------------|
| `severity` | `CRITICAL,HIGH` | 逗号分隔的严重级别过滤器 |
| `category` | `cve` | `cve` · `kev` · `advisory` · `vendor` · `ics` · `threat` · `malware` · `supply` |
| `feed_id` | `nvd` | 过滤为单一来源 |
| `is_new` | `true` | 仅显示未读项目 |
| `search` | `ivanti` | 全文搜索:标题、描述、供应商、标签 |
| `limit` | `50` | 页面大小(最大 500) |
| `offset` | `0` | 分页偏移量 |
### curl 命令示例
```
# 新的严重和高危项目
curl "http://localhost:8000/api/v1/items?severity=CRITICAL,HIGH&is_new=true"
# 搜索 Ivanti
curl "http://localhost:8000/api/v1/items?search=ivanti"
# 所有 ICS/OT 公告
curl "http://localhost:8000/api/v1/items?category=ics"
# 仅 CISA KEV
curl "http://localhost:8000/api/v1/items?feed_id=cisa_kev"
# 强制立即刷新所有 feeds
curl -X POST "http://localhost:8000/api/v1/refresh"
# 统计
curl "http://localhost:8000/api/v1/stats"
# 通过代理检查可用的 Ollama 模型
curl "http://localhost:8000/api/ollama/api/tags"
```
## 第二阶段功能
### 资产清单与暴露面匹配
上传包含客户端资产的 CSV 文件 —— PhantomFeed 会使用 CPE 字符串、供应商/产品 token 和关键字匹配,自动将传入的威胁项目与受影响的软件进行匹配:
```
POST /api/v1/admin/clients/{id}/assets/import CSV upload
GET /api/v1/admin/clients/{id}/assets List all assets
GET /api/v1/items?client_id={id}&exposed_only=true Only matched items
```
**CSV 格式**(列:`hostname`、`ip_address`、`os`、`os_version`、`software`、`version`、`cpe_string`、`asset_type`):
```
hostname,ip_address,os,os_version,software,version
srv01,10.0.0.1,Windows,2019,Microsoft Windows Server,2019
web01,10.0.0.2,Linux,Ubuntu 22.04,Apache HTTP Server,2.4.58
```
置信度等级:**1.0** 精确 CPE 匹配 · **0.85** CPE 前缀匹配 · **0.8** 供应商+产品匹配 · **0.7** 供应商关键字匹配 · **0.5** 仅供应商匹配。
### TAXII 2.1 / STIX 接入
轮询 TAXII 2.1 服务器以获取 STIX bundles。通过存储的 `added_after` 时间戳进行增量轮询。
预配置的来源:
- **CISA AIS** — `https://ais2.cisa.dhs.gov/taxii2/`(需要证书 — [在 cisa.gov/ais 注册](https://www.cisa.gov/ais))
- **CIRCL MISP** — 公共 OSINT Feed
- **AlienVault OTX TAXII** — 使用 `OTX_API_KEY` 作为凭证
将 `TAXII_USERNAME`、`TAXII_PASSWORD`、`TAXII_CERT_PATH` 添加到 `.env` 中。当缺少凭证时,抓取器会优雅地跳过。
```
GET /api/v1/taxii/sources List configured servers and connection status
POST /api/v1/taxii/test/{feed_id} Test connection to a TAXII feed
```
### 补救措施 SLA 跟踪
通过为每个客户端设定 SLA 截止日期来跟踪漏洞的修复情况:
| 严重级别 | 默认 SLA |
|----------|-------------|
| CRITICAL | 15 天 |
| HIGH | 30 天 |
| MEDIUM | 90 天 |
| LOW | 180 天 |
在 `stack_profile` 中为特定客户端覆盖默认值:
```
{"sla": {"CRITICAL": 7, "HIGH": 14}}
```
```
GET /api/v1/clients/{id}/remediation List remediation items + days remaining
POST /api/v1/clients/{id}/remediation Create remediation item
PATCH /api/v1/clients/{id}/remediation/{rid} Update status (open/in_progress/patched/accepted_risk/false_positive/wont_fix)
GET /api/v1/clients/{id}/metrics MTTR, SLA compliance rate, open/overdue counts
```
SLA 逾期检查将在每天 UTC 时间 07:00 运行。
### 分析仪表板
访问 **http://localhost:8000/analytics.html** 以获取高管分析视图:
- **威胁量趋势** — 90 天折线图(按 CRITICAL/HIGH/MEDIUM 划分)
- **严重程度分布** — 环形图
- **热门供应商** — 按风险量排列的水平条形图
- **类别细分** — 按类别和严重级别划分的堆叠条形图
- **补救措施 MTTR 趋势** — 随时间变化的平均补丁修复天数
- **最高风险项** — 按综合风险评分排名
客户端选择器下拉菜单可将所有图表切换为特定客户端的视图。日期范围:30 / 60 / 90 天。
### IOC 扩展引擎
自动丰富来自恶意软件/威胁源的 IP、域、URL 和文件哈希。缓存 24 小时。
```
GET /api/v1/ioc/lookup?value=8.8.8.8 Live enrichment (IP/hash/domain/URL)
GET /api/v1/ioc/cache Recent cache entries
```
IOC 查找小部件也内置于仪表板的详细信息窗格中 —— 在“快速操作”部分输入任何值即可。
| API 密钥 | 来源 | 扩展内容 |
|---------|--------|---------|
| `ABUSEIPDB_API_KEY` | [abuseipdb.com](https://www.abuseipdb.com) | IP 信誉评分 + 国家 |
| `GREYNOISE_API_KEY` | [greynoise.io](https://www.greynoise.io) | IP 分类 (benign/malicious/unknown) |
| `VIRUSTOTAL_API_KEY` | [virustotal.com](https://www.virustotal.com) | 哈希/域名/URL 检测率 |
### SIEM Webhook 推送
为每个客户端配置 webhook,以将新的威胁项推送到你的 SIEM 或警报平台:
```
POST /api/v1/admin/clients/{id}/webhooks Create webhook
GET /api/v1/admin/clients/{id}/webhooks List webhooks
PUT /api/v1/admin/clients/{id}/webhooks/{wid} Update
DELETE /api/v1/admin/clients/{id}/webhooks/{wid} Delete
POST /api/v1/admin/clients/{id}/webhooks/{wid}/test Send test payload
```
**支持的类型:**
| 类型 | 格式 | 认证 |
|------|--------|------|
| `generic` | 普通 JSON 正文 | — |
| `slack` | 带有严重级别颜色的 Block Kit 附件 | Webhook URL |
| `splunk_hec` | `{time, sourcetype:"phantomfeed:threat", event:{...}}` | `Authorization: Splunk {token}` |
| `sentinel` | Azure Monitor Log Analytics, HMAC-SHA256 签名 | secret 中的 `{workspace_id}:{workspace_key}` |
**示例 — Slack webhook:**
```
curl -X POST http://localhost:8000/api/v1/admin/clients/{id}/webhooks \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"webhook_type":"slack","url":"https://hooks.slack.com/T.../...","min_severity":"HIGH"}'
```
**示例 — Splunk HEC:**
```
curl -X POST http://localhost:8000/api/v1/admin/clients/{id}/webhooks \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"webhook_type":"splunk_hec","url":"https://splunk:8088/services/collector","secret":"your-hec-token","min_severity":"CRITICAL"}'
```
## 上传与导出中心
访问 **http://localhost:8000/upload.html** 以获取完整的上传与导出中心。
### 支持的上传格式
| 格式 | 扩展名 | 解析器 |
|--------|-----------|--------|
| Nessus 扫描 | `.nessus` | 自动检测;提取资产及每台主机的发现结果 |
| Qualys XML | `.xml` | `` 和 `` 元素 |
| Qualys CSV | `.csv` | QID、标题、严重级别、CVE ID 列 |
| OpenVAS XML | `.xml` | `` 根节点,包含带有 `` 子节点的 `` |
| Rapid7/InsightVM CSV | `.csv` | 资产 IP 地址、漏洞标题、严重级别列 |
| 通用 CSV/XLSX | `.csv`、`.xlsx` | 模糊列映射(自动检测主机名/IP/严重级别/CVE列) |
| IOC 列表(纯文本) | `.txt` | 每行一个 IOC;自动检测 IP、哈希、域、URL |
| IOC 列表 (JSON) | `.json` | `{type, value}` 数组或 STIX 2.1 Indicator 模式 |
| STIX 2.1 bundle | `.json` | 完整的 bundle;导入 Indicator、Malware、Threat-Actor、Vulnerability 对象 |
| 批量客户端 | `.csv` | 列:name、industry、contact_email、min_severity、vendors、products |
下载模板:`GET /api/v1/upload/templates/{assets|clients|iocs}`
### 上传 API
```
POST /api/v1/upload/scan Auto-detect and preview scan file
POST /api/v1/upload/scan/{id}/confirm Confirm and import (with optional field mapping)
POST /api/v1/upload/assets Preview asset CSV/XLSX
POST /api/v1/upload/assets/{id}/confirm Confirm asset import
POST /api/v1/upload/iocs Import IOC list (enrichment triggered in background)
POST /api/v1/upload/stix Import STIX 2.1 bundle directly
POST /api/v1/upload/clients Bulk client preview
POST /api/v1/upload/clients/{id}/confirm Confirm bulk client import
GET /api/v1/upload/history Upload log (filter by client_id)
GET /api/v1/upload/templates/{type} Download CSV template
```
### 导出 API
```
GET /api/v1/export/items.csv Threat items as CSV (severity, category, search, days filters)
GET /api/v1/export/items.json Threat items as JSON
GET /api/v1/export/iocs.txt?days=7 IOC plain text list
GET /api/v1/export/iocs.csv?days=7 IOC list as CSV with enrichment data
GET /api/v1/export/iocs.stix?days=7 IOC list as STIX 2.1 Bundle JSON
GET /api/v1/clients/{id}/export/remediation.csv Remediation tracker CSV
GET /api/v1/clients/{id}/export/remediation.xlsx Remediation tracker XLSX (color-coded)
GET /api/v1/clients/{id}/export/detection-rules.zip SPL + KQL + Sigma ZIP
POST /api/v1/clients/{id}/export/push-rules-github Push rules to GitHub repo
GET /api/v1/clients/{id}/report.html?days=30 HTML report preview with Download PDF button
```
**检测规则 ZIP** 包含:
- `splunk/` — 针对每个 CRITICAL/HIGH 项的 Splunk SPL 搜索
- `sentinel/` — Microsoft Sentinel KQL 查询
- `sigma/` — Sigma YAML 规则(可使用 sigmac 或 pySigma 进行转换)
## 快速操作 (AI 分析师)
仪表板中的每个项目都有四个**快速操作**,它们会将预构建的 prompt 发送给你本地的 Ollama 模型:
| 操作 | 生成内容 |
|--------|-----------------|
| **起草客户公告** | 准备发送给受影响客户的非技术性公告邮件 |
| **生成检测规则** | Splunk SPL、Microsoft Sentinel KQL 以及 Sigma 规则 |
| **获取 IOC 与狩猎查询** | 文件哈希、IP、域名、注册表键、YARA 片段 |
| **分析客户影响** | 暴露面评估问题及面临风险的资产类型 |
响应在 AI 面板中实时流式传输。所有操作均通过 Ollama 在本地运行 —— **零成本,不向外部发送任何数据。**
## 架构
```
phantomfeed/
├── main.py # FastAPI app, lifespan, CORS, Ollama proxy, static files
├── config.py # Feed URLs, API keys, severity mappings, settings
├── dashboard.html # Dark-mode web dashboard (served at /dashboard.html)
├── .env # Your local secrets — never commit this
├── .env.example # Template — copy to .env to get started
├── requirements.txt
│
├── db/
│ └── database.py # Async SQLite: connect, CRUD, deduplication
│
├── ingest/
│ ├── base.py # BaseFetcher: HTTP helpers, retries, normalization
│ ├── nvd.py # NVD CVE API v2
│ ├── cisa.py # CISA KEV + CSAF advisories (IT + OT)
│ ├── rss_feeds.py # Generic vendor RSS ingestion
│ ├── threat_intel.py # abuse.ch, OTX, supply chain
│ └── scheduler.py # APScheduler: per-feed poll intervals
│
└── api/
└── routes.py # All REST endpoints
```
### 添加新 Feed
1. 在 `ingest/` 中创建一个继承自 `BaseFetcher` 的类
2. 设置 `feed_id`、`feed_label`、`category` 和 `poll_interval`
3. 实现 `async def fetch(self) -> list[dict]`
4. 在 `ingest/scheduler.py` 的 `_build_fetchers()` 中注册它
对于简单的 RSS 源,只需在 `config.py` 中的 `VENDOR_RSS_FEEDS` 添加一条记录 —— 无需编写代码。
## 环境变量
将 `.env.example` 复制到 `.env` 并根据需要设置值。除服务器默认值外,所有变量都是可选的。
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `NVD_API_KEY` | *(空)* | NVD API key — [免费获取](https://nvd.nist.gov/developers/request-an-api-key)。将速率限制从 5 提升至 50 请求/30秒 |
| `OTX_API_KEY` | *(空)* | AlienVault OTX key — [免费获取](https://otx.alienvault.com)。OTX 冲所需 |
| `URLHAUS_API_KEY` | *(空)* | abuse.ch key — [免费获取](https://auth.abuse.ch/)。提升 URLhaus 访问权限 |
| `POLL_INTERVAL_FAST` | `15` | 高优先级 Feed 的轮询间隔(分钟) |
| `POLL_INTERVAL_SLOW` | `60` | 供应商/情报 Feed 的轮询间隔(分钟) |
| `HOST` | `127.0.0.1` | API 绑定地址 |
| `PORT` | `8000` | API 端口 |
| `DB_PATH` | `./phantomfeed.db` | SQLite 数据库文件路径 |
| `RETENTION_DAYS` | `90` | 清理前保留的历史记录天数 |
| `NVD_PAGE_SIZE` | `200` | 每次 NVD API 页面获取的 CVE 数量(最大 2000) |
## 第三阶段 — 市场差异化特性
### 暗网与粘贴板监控
监控暗网数据泄露来源中是否提及客户名称:
| 监控器 | 来源 | 备注 |
|---------|--------|-------|
| RansomWatch | github.com/joshhighet/ransomwatch | 勒索软件团伙受害者帖子 — 模糊名称匹配 |
| Pastebin 爬虫 | scrape.pastebin.com | 需要 Pastebin Pro 账户 |
| GitHub Gists | api.github.com/gists/public | 公开 Gist 泄露检测 |
| HIBP 域名泄露 | haveibeenpwned.com | 域名泄露查询(需要 API key) |
```
GET /api/v1/clients/{id}/darkweb-alerts List alerts (unacknowledged_only filter)
POST /api/v1/clients/{id}/darkweb-alerts/{alert_id}/acknowledge
POST /api/v1/clients/{id}/darkweb-scan Trigger immediate scan
GET /api/v1/notifications Aggregated notification center
```
暗网警报会显示在客户仪表板的通知中心和“暗网”选项卡中。
### 威胁行为者档案数据库
追踪 55 个威胁行为者及其 MITRE ATT&CK 对齐情况:
- APT1、APT10、APT28、APT29、APT32、APT34、APT38、APT40、APT41
- Lazarus Group、Sandworm、Volt Typhoon、Scattered Spider、BlackCat、LockBit、Cl0p 等
每个行为者档案包括:来源、赞助者、动机、TTP (MITRE IDs)、已知恶意软件、目标行业、近期活动。
打开 **http://localhost:8000/actors.html** 以浏览完整的档案浏览器。
```
GET /api/v1/actors List all actors (filterable by origin/motivation)
GET /api/v1/actors/{id} Full dossier
GET /api/v1/actors/{id}/items Threat items linked to this actor
GET /api/v1/clients/{id}/actor-alerts Actors targeting client's industry
```
### MISP 集成
从/向 MISP 实例拉取和推送威胁事件:
```
MISP_URL=https://your-misp-instance
MISP_API_KEY=your_api_key
MISP_VERIFY_SSL=true
```
```
GET /api/v1/misp/status Connection status
POST /api/v1/misp/sync Trigger MISP event pull (background)
GET /api/v1/misp/events Recently pulled MISP events
POST /api/v1/misp/push/{item_id} Push a PhantomFeed item to MISP
```
### 自动化高管简报演示文稿
生成包含 AI 撰写的摘要和 matplotlib 图表的 12 页 PowerPoint 简报演示文稿。
```
GET /api/v1/clients/{id}/deck.pptx?days=30 Download PPTX (supports ?token= for window.open)
GET /api/v1/clients/{id}/deck-preview JSON slide outline for preview
```
幻灯片:标题 → 执行摘要 (Ollama AI) → 威胁全景 → 前 5 大威胁 → CISA KEV → 威胁行为者 → 供应商风险条形图 → 合规影响 → 资产暴露面 → 补救措施环形图 → 建议措施 (AI) → 联系方式
需要:`pip install python-pptx matplotlib Pillow`(包含在 requirements.txt 中)
### 同行基准测试引擎
计算 0-100 分的安全态势评分及行业百分位排名:
| 组件 | 权重 | 指标 |
|-----------|--------|--------|
| SLA 合规性 | 30 分 | 在 SLA 截止日期前关闭的补救措施百分比 |
| MTTR | 30 分 | 平均修复时间与行业中位数的对比 |
| 未解决的严重项 | 20 分 | 反向计算的未解决 CRITICAL 项计数 |
| 补丁部署速度 | 20 分 | 过去 30 天内修补的项目 / 总未解决项目 |
涵盖 9 个行业的基准线:科技、金融、医疗保健、政府、零售、能源、教育、制造业、法律。
```
GET /api/v1/clients/{id}/posture Current score, grade, percentile, component breakdown
GET /api/v1/clients/{id}/posture/history Historical score snapshots
GET /api/v1/benchmarks/{industry} Industry baseline statistics
GET /api/v1/benchmarks All clients ranked by score
```
### CMMC 2.0 动态差距评估
横跨 14 个领域的全部 110 项 NIST SP 800-171 Rev 2 / CMMC Level 2 实践。
打开 **http://localhost:8000/cmmc.html** 以使用完整的交互式差距评估界面。
- 从活动的威胁情报自动推导状态 (compliance_tags 映射)
- 每项实践可手动覆盖并添加备注
- 批量更新和 CSV 导出
- 领域级别评分和总体合规百分比
```
GET /api/v1/clients/{id}/cmmc/assessment
PATCH /api/v1/clients/{id}/cmmc/practices/{practice_id}
POST /api/v1/clients/{id}/cmmc/bulk-update
GET /api/v1/cmmc/practices?domain=Access+Control
```
### 桌面演练生成器
具有 8 种场景类型的 AI 驱动桌面演练:
`ransomware` · `supply_chain` · `data_breach` · `insider_threat` · `ddos` · `phishing` · `zero_day` · `cloud_breach`
每次演练包括:场景概述、5 个演练目标、分阶段的局势说明+注入点+讨论问题+预期行动、总结性问题。可导出为 PDF (reportlab) 和 PPTX (python-pptx)。
```
GET /api/v1/clients/{id}/tabletops
POST /api/v1/clients/{id}/tabletops/generate {scenario_type, custom_prompt}
GET /api/v1/clients/{id}/tabletops/{id}/export.pdf
GET /api/v1/clients/{id}/tabletops/{id}/export.pptx
GET /api/v1/tabletop/scenario-types
```
### 供应链风险图
使用 D3.js 力导向风险图跟踪供应商软件暴露面。
打开 **http://localhost:8000/supplychain.html** 以查看交互式图表视图。
```
GET /api/v1/clients/{id}/vendors List vendors with risk levels
POST /api/v1/clients/{id}/vendors Add vendor {vendor_name, products, criticality}
DELETE /api/v1/clients/{id}/vendors/{vendor_id} Remove vendor
POST /api/v1/clients/{id}/vendors/scan Trigger background risk scoring
GET /api/v1/clients/{id}/supply-chain-graph D3.js {nodes, links} graph data
```
供应商通过扫描威胁源中的名称/产品匹配进行风险评分。红色 = 高风险,琥珀色 = 中等风险,绿色 = 低风险。
### 数据泄露成本与 ROI 计算器
使用 IBM《2024年数据泄露成本报告》模型计算每个威胁项的预期财务损失:
| 行业 | 平均泄露成本 |
|----------|---------------------|
| 医疗保健 | $9.77M |
| 金融 | $6.08M |
| 科技 | $5.10M |
| 能源 | $4.72M |
| 制造业 | $4.20M |
```
GET /api/v1/clients/{id}/risk-portfolio Full portfolio: total exposure, patched vs unpatched, ROI ratios, top 20 items
GET /api/v1/breach-cost/industries IBM 2024 baseline by industry
```
风险投资组合显示在客户仪表板的“风险投资组合”选项卡中,包含 `$` 暴露金额和补丁 ROI 比率。
## 页面
| URL | 描述 |
|-----|-------------|
| `/dashboard.html` | 主要威胁 Feed — 实时、可过滤、配备 AI 分析师 |
| `/analytics.html` | 图表:趋势、供应商、类别、MTTR、热力图 |
| `/actors.html` | 威胁行为者档案浏览器,附带 ATT&CK 热力图 |
| `/cmmc.html` | CMMC 2.0 差距评估 — 110 项实践,14 个领域 |
| `/supplychain.html` | 供应链风险图 (D3.js 力导向) |
| `/upload.html` | 扫描上传中心和导出工具 |
| `/admin.html` | 客户管理、资产、用户、导出 |
| `/client_dashboard.html?client_id={id}` | 包含所有第三阶段功能的专属客户门户 |
| `/fedramp.html` | FedRAMP 20x 合规仪表板 (KSI, OSCAL, 扫描器, SIEMs) |
## FedRAMP 20x 合规功能
PhantomFeed 包含一套完整的 FedRAMP 20x 持续监控功能套件。
### 第 1 节 — 自动化扫描器拉取
| 扫描器 | 认证方式 | 备注 |
|---------|-------------|-------|
| Tenable.io | `X-ApiKeys` 请求头 (accessKey + secretKey) | Export API + workbench 回退机制 |
| Tenable.sc | Session token (`/rest/token`) | 本地部署;设置 `extra_config.mode=sc` |
| Rapid7 InsightVM | HTTP Basic 认证 | 分页的资产 + 漏洞端点 |
| Qualys VMDR | Basic 认证 + `X-Requested-With` | XML 检测 API |
| CrowdStrike Spotlight | OAuth2 client_credentials | 两阶段查询 + 详情获取 |
所有凭证在静止时均经过 **Fernet 加密**。在 `.env` 中设置 `PHANTOMFEED_ENCRYPTION_KEY`:
```
PHANTOMFEED_ENCRYPTION_KEY=
# 生成: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
```
扫描器 API 端点(前缀:`/api/v1/clients/{id}/`):
| 方法 | 路径 | 描述 |
|--------|------|-------------|
| GET | `scanners` | 列出扫描器配置(凭证已掩码) |
| POST | `scanners` | 添加扫描器配置 |
| PATCH | `scanners/{scanner_id}` | 更新配置 |
| DELETE | `scanners/{scanner_id}` | 删除扫描器及其发现结果 |
| POST | `scanners/{scanner_id}/poll` | 触发立即轮询 |
| GET | `scan-findings` | 列出发现结果(可按严重级别、扫描器过滤) |
| GET | `scan-findings/summary` | 严重级别计数 + 扫描器状态 |
### 第 2 节 — SIEM 集成
| SIEM | 认证方式 | 备注 |
|------|-------------|-------|
| Splunk | Session key (`/services/auth/login`) | 保存的搜索作业轮询 |
| Microsoft Sentinel | Azure AD client_credentials OAuth2 | Log Analytics KQL 查询 |
| IBM QRadar | `SEC` token 请求头 | 带分页的 Offenses API |
| Elastic Security | `ApiKey` 请求头 | 检测信号 + 回退警报 API |
SIEM 端点:与扫描器模式相同,位于 `/api/v1/clients/{id}/siems/...`
### 第 3 节 — OSCAL 输出引擎
| 文档 | 格式 | 描述 |
|----------|--------|-------------|
| POA&M | XML | 将开放的补救项导出为 OSCAL 行动计划和里程碑 |
| SAR | XML | 将扫描发现结果导出为 OSCAL 评估结果 |
| VDR | JSON | 带有资产映射的 CVE 标记漏洞 |
| OAR | JSON | 安全态势评分、授权决策、CM 活动日志 |
| SSP (部分) | XML | 系统特征 + 8 个控制实施桩 |
| Bundle | ZIP | 将所有 5 份文档打包为一次下载 |
OSCAL 端点:`GET /api/v1/clients/{id}/oscal/{type}.{ext}` 和 `/oscal/bundle.zip`
### 第 4 节 — KSI 验证引擎
七项关键安全指标每 6 小时自动验证一次:
| KSI | 类别 | 通过阈值 |
|-----|----------|----------------|
| KSI-1 | 漏洞管理 | 没有开放超过 15/30 天的 CRITICAL/HIGH CVE |
| KSI-2 | 补丁时效性 | ≥90% 的补丁安装率 |
| KSI-3 | 持续监控 | 所有扫描器均在间隔时间 + 2 小时内完成轮询 |
| KSI-4 | 事件检测 | ≥1 个带有近期数据的活跃 SIEM |
| KSI-5 | POA&M 及时性 | 0 项逾期的 CRITICAL 补救措施 |
| KSI-6 | 供应链 | ≥80% 的供应商在 30 天内接受了评估 |
| KSI-7 | 暗网暴露面 | 没有超过 48 小时未确认的警报 |
KSI API:`GET /api/v1/clients/{id}/ksi`、`POST /api/v1/clients/{id}/ksi/validate`
### 第 6 节 — 审计日志
每次 API 调用都会记录到 `audit_log` 表中(事件类型、用户、客户端、方法、路径、状态、IP、持续时间)。导出为 CSV:
- `GET /api/v1/audit` — 全局审计日志(管理员)
- `GET /api/v1/clients/{id}/audit` — 每个客户端的审计日志
- `GET /api/v1/clients/{id}/audit.csv` — CSV 导出
## 参与贡献
欢迎提交 PR 和 Issue。如果你添加了新的 Feed 源、修复了某个解析器或改进了仪表板 —— 请发起一个 Pull Request。如果某个 Feed 失效或返回了错误数据,请附带 Feed ID 和你观察到的数据样本发起一个 Issue。
## 许可证
MIT — 你可以随意使用它。
标签:AI风险缓解, CISA KEV, GPT, HTTP/HTTPS抓包, ICS安全, Llama3, LLM评估, Ollama, OT安全, PKINIT, Python, SCADA安全, SOC工具, 供应商安全通告, 威胁情报, 安全仪表盘, 安全运营, 实时处理, 实时威胁监控, 密码管理, 工控安全, 开发者工具, 开源, 态势感知, 情报聚合, 扫描框架, 无后门, 暗色模式UI, 本地大模型, 本地部署, 漏洞发现, 漏洞管理, 离线AI分析, 自动化情报收集, 计算机取证, 逆向工具, 隐私计算, 零API费用