ariyaadinatha/intel-hub
GitHub: ariyaadinatha/intel-hub
一款自托管的威胁情报新闻聚合器,利用 Gemini 对安全资讯进行 AI 丰富并基于关键词匹配发送 Discord 告警。
Stars: 0 | Forks: 0
# Intel-Hub — 威胁情报新闻聚合器
聚合来自 RSS 的安全新闻、研究、CVE 和勒索软件 feed,使用 **Gemini** 对每篇文章进行丰富(摘要、关键点、类别、行业/国家标签、IOC 提取),并在文章匹配到您的关键词(例如 `Indonesia`、`finance`、`APT41`、`Fortinet`)时发送 **Discord 警报**。
## 快速开始(Docker)
```
cp .env.example .env
# 编辑 .env:设置 GEMINI_API_KEY 和 DISCORD_WEBHOOK_URL
docker compose up -d --build # or: docker-compose up -d --build
```
打开 **http://localhost:8000**。SQLite 数据库存储在 `tifeed-data` 命名卷中,因此文章/feed/关键词在重建和重启后依然存在。Compose 会自动读取 `.env`;修改它需要执行 `docker compose up -d` 来重新创建容器。
## 快速开始(本地 Python)
```
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
# 编辑 .env:设置 GEMINI_API_KEY 和 DISCORD_WEBHOOK_URL
uvicorn app.main:app --port 8000
```
打开 **http://localhost:8000**。首次运行时会植入八个知名 feed(The Hacker News、BleepingComputer、Krebs、SecurityWeek、Dark Reading、CISA、SANS ISC、Unit 42);后台 worker 每隔 `FETCH_INTERVAL_MINUTES`(默认为 30)轮询一次,并使用 Gemini 对新文章进行丰富。
## 功能
- **Dashboard** — 每篇文章的 AI 摘要、关键点、类别徽章、行业和国家标签、可折叠的 IOC 列表(IP、域名、哈希、CVE — 正则表达式 + Gemini,支持 defang 处理),以及指向原始来源的链接。支持按搜索文本、类别、行业、国家进行过滤。
- **CVE 风险丰富** — 针对文章中提到的每个 CVE,会查询 NVD(CVSS 分数/严重程度)、FIRST EPSS(被利用概率)以及 CISA KEV 目录(已知被利用标志)。Vulnerabilities 栏和每周简报会为每个 CVE 显示“CVSS 9.8 · EPSS 89% · KEV ✓”,因此优先级反映的是风险,而不仅仅是覆盖数量。这三个来源均是免费的;可选的 `NVD_API_KEY` 可加快 CVSS 的回填速度。EPSS 和 KEV 每天刷新;查询结果会缓存在 `cves` 表中。
- **Story clustering** — 来自不同 feed 且报道同一事件(共享 CVE 或标题高度重合,7 天时间窗口内)的文章会被分组为一个 story:dashboard 会显示一张卡片,带有“Also covered by …”备注,并链接到每个媒体版本的链接,并且警报规则每个 story 只会向 Discord 发送一次提醒(重复的匹配会被记录为已抑制,在警报历史中显示为 🔇)。
- **Feeds 标签页** — 添加任何 RSS/Atom URL,通过开关启用/禁用,删除;显示最后抓取时间和错误信息。
- **Alerts 标签页** — 创建命名的警报规则,每个规则都有各自的触发关键词列表(例如规则 **SEA country** 包含 `indonesia, indonesian, sea, apac, vietnam`;规则 **Perimeter products** 包含 `fortinet, fortigate, ivanti`)。如果任何关键词与新文章匹配(针对标题、内容、摘要、标签和 IOC 进行不区分大小写的全词匹配)——该规则将针对每篇文章触发一次,并且 Discord 嵌入内容会显示规则名称以及匹配到的确切关键词。规则可以启用/禁用,关键词也可以在内联中进行添加/删除。
- **勒索软件受害者追踪器** — 每个周期轮询 [ransomware.live](https://www.ransomware.live) 以获取新的泄露站点受害者(通常比新闻报道早几天),并将每个受害者与您的**警报规则**进行匹配(受害者名称、域名、组织、行业、国家 — 国家代码会进行扩展,因此 `indonesia` 会匹配 `ID`)。保留一条包含您第三方供应商名称/域名的规则,当有供应商出现在泄露站点时,您当天就会收到 Discord 提醒。在 Ransomware 标签页中浏览/过滤受害者;关注列表中的命中项会显示在每周简报中。可通过 `RANSOMWARE_TRACKER_ENABLED=0` 禁用。
- **Triage** — 四个针对每个 story 的标记:★ 收藏、🕒 稍后阅读、🔬 已调查、✓ 已读。在任何 story 卡片上切换它们(点击进入源文章会将该 story 标记为已读;已读 story 会以暗淡颜色渲染);侧边栏的 Triage 部分会过滤出收藏 / 稍后阅读 / 已调查 / 未读,并带有实时计数。状态是按 story 存储的,因此它涵盖了集群中的每一篇重复文章。
- **IOC 导出** — `GET /api/iocs?since=24h&format=csv` 为您的 SIEM/EDR/TIP 提供机器可读的 feed,包含每个提取出的指标及其上下文(首次/最后出现时间、源文章、CVE 风险分数)。格式:`json`、`csv`、`txt`(每行一个值,便于制作黑名单)、`stix`(带有确定性 ID 的 STIX 2.1 bundle,因此重新拉取不会产生重复对象)。使用 `type=ips,domains,urls,hashes,cves,emails` 和 `since=24h|7d|2w|` 进行过滤。快速导出链接位于 dashboard 右侧栏的底部。
- **每周简报** — 在每个 `DIGEST_DAY` 的 UTC 时间 `DIGEST_HOUR`(默认为周一 08:00)向 Discord webhook 发送简报:包括由 Gemini 撰写的执行摘要、本周热门 story(按警报命中数和跨 feed 报道数排名)、热门 CVE、类别/行业/国家计数以及警报规则活动。可从 Alerts 标签页预览或按需发送。
- **维护**(Feeds 标签页)— 通过 SQLite 的在线备份 API 进行**按需备份**(在 pipeline 运行时是安全的);存储在 Docker 卷的 `data/backups/` 下,可从 UI 下载/删除。**旧新闻清理**会删除超过所选时效的文章(以及非关注列表的泄露站点受害者),首先会提供预览计数;默认情况下标记为 ⭐/🕒/🔬 的 story 会被保留,之后会对数据库进行 VACUUM 以回收磁盘空间。
## 配置(`.env`)
| 变量 | 默认值 | 用途 |
|---|---|---|
| `GEMINI_API_KEY` | — | 启用 AI 丰富功能([获取密钥](https://aistudio.google.com/apikey)) |
| `GEMINI_MODEL` | `gemini-2.5-flash` | 使用的 Gemini 模型 |
| `DISCORD_WEBHOOK_URL` | — | 接收关键词警报的地址 |
| `FETCH_INTERVAL_MINUTES` | `30` | Feed 轮询间隔 |
| `DIGEST_ENABLED` | `1` | 开启/关闭每周 Discord 简报 |
| `DIGEST_DAY` / `DIGEST_HOUR` | `monday` / `8` | 每周简报时间(UTC) |
| `MAX_ENRICH_PER_CYCLE` | `25` | 每个周期的 Gemini 调用次数(出于速率限制安全考虑) |
| `DATABASE_PATH` | `tifeed.db` | SQLite 文件位置 |
如果没有 Gemini 密钥,聚合器仍然可以工作:文章会被收集,IOC 会通过正则表达式提取,但摘要/标签会显示为“等待 AI 丰富”。如果没有配置 webhook,警报会被记录在数据库中,但不会被发送。
## API
`GET /api/articles`(过滤器:`search`、`category`、`sector`、`country`、`feed_id`、`limit`、`offset`) · `GET/POST/PATCH/DELETE /api/feeds` · `GET/POST/PATCH/DELETE /api/keywords` · `GET /api/alerts` · `POST /api/alerts/test` · `POST /api/refresh` · `GET /api/meta`
标签:AI自动化, IOC提取, Python, Web仪表盘, 大模型分析, 威胁情报, 安全新闻聚合, 开发者工具, 无后门, 漏洞追踪, 请求拦截, 逆向工具