nullvaluefound/pharos

GitHub: nullvaluefound/pharos

自托管 AI 驱动的威胁情报聚合器,通过 LLM 富化和确定性聚类将分散的安全资讯提炼为结构化、可关联的威胁情报。

Stars: 0 | Forks: 0

Pharos — A beam through the noise

# Pharos **Pharos** 是一个自托管、开源的 AI 驱动新闻聚合器。它从 RSS/Atom/JSON 源拉取数据,通过 LLM 将每篇文章丰富为结构化的 JSON (MITRE 组织 / 软件 / 技术 / 战术 ID,CVE,IOC,摘要, 要点),并使用确定性关键字指纹对跨来源的同一事件报道进行聚类—— 无需向量数据库,无需 Elasticsearch,无需 繁重的 ML 技术栈。 存储**仅使用 SQLite**:一个用于近期文章的热数据库和一个用于 较旧内容的冷数据库(“archeion”)。 ## 功能 - 开箱即用的**精选默认源**:CISA + 国家 CERT,安全 厂商(Microsoft, Mandiant, CrowdStrike, Talos, Unit 42, ...),新闻 (BleepingComputer, Krebs, The Hacker News, ...),独立研究 (Project Zero, Citizen Lab, Schneier, ...),以及通过 Nitter/RSSHub 的 Twitter/X 模板。参见 [docs/DEFAULT_FEEDS.md](./docs/DEFAULT_FEEDS.md)。 - 多用户阅读器,支持按用户订阅、已读/已保存状态、书签 和已保存的搜索(“watches”)。 - 现代、响应式的 SPA Web UI(Vite + React + Tailwind)和 JSON API。 - 通过 OpenAI 结构化输出实现 LLM 驱动的富化处理。 - **一等公民 MITRE ATT&CK 支持** — 组织 ID (G####),软件 ID (S####), 技术 ID (T####, T####.###) 和战术 ID (TA####) 均经过验证、 索引、在聚类中被赋予高权重,并作为指向 attack.mitre.org 的深层链接呈现。参见 [docs/MITRE.md](./docs/MITRE.md)。 - **Constellations**:通过带权重的 Jaccard 算法在命名空间关键字 Token 上实现跨来源的事件聚类 — 完全确定性且可解释 (UI 会显示匹配了 *哪些* Token)。 - 冷/热 SQLite 分离并支持 FTS5 全文搜索。 - 可插拔的 LLM 后端位于轻量级客户端之后(默认为 OpenAI;可与 任何与 OpenAI 兼容的端点配合使用)。 - 三种部署模式:一体化 Docker,多容器 Compose,或 裸机 systemd。 ## 快速开始 ### 选项 1 — 单行命令(Docker,最快) ``` # Linux / macOS / WSL curl -fsSL https://raw.githubusercontent.com/nullvaluefound/pharos/main/scripts/quickstart.sh | bash ``` ``` # Windows iwr -useb https://raw.githubusercontent.com/nullvaluefound/pharos/main/scripts/quickstart.ps1 | iex ``` 单行命令会克隆仓库,生成 JWT 密钥,提示输入你的 OpenAI 密钥,构建 Docker 栈,并打印随机生成的 管理员密码。 ### 选项 2 — Docker(交互式) ``` git clone https://github.com/nullvaluefound/pharos.git && cd pharos ./install.sh --docker # or .\install.ps1 -Docker on Windows ``` 预检容器会拒绝让整个栈启动,前提是 `.env` 仍然 包含占位符密钥,因此你不会意外地使用 `sk-replace-me` 密钥启动。 ### 选项 3 — 原生开发(Python venv + npm) ``` git clone https://github.com/nullvaluefound/pharos.git && cd pharos ./install.sh --native --dev # or .\install.ps1 -Native -Dev on Windows source .venv/bin/activate pharos sweep # ingestion (terminal 1) pharos light # lantern (terminal 2) pharos notify # notifier (terminal 3) uvicorn pharos.api.app:create_app --factory --port 8000 # API (terminal 4) cd frontend && npm run dev # UI (terminal 5) ``` 打开 。 完整安装指南:**[docs/INSTALL.md](./docs/INSTALL.md)**。 ## 架构(一段话) 三个流水线阶段 — **ingestion**(摄取,`pharos sweep`),**lantern**(灯,`pharos light`,LLM 富化引擎),**archiver**(归档,`pharos archive`)— 以及一个 **FastAPI** 服务层。它们完全 通过 SQLite 进行通信:ingestion 插入状态为 `enrichment_status='pending'` 的行, lantern 提取它们,根据严格的 pydantic schema 验证 LLM 输出,将实体规范化为结构化表,构建 带命名空间的关键字指纹,并使用倒排索引 + 加权 Jaccard 将文章分配到一个“constellation”(星座)。archiver 将 旧行从 `hot.db` 移动到 `cold.db`,同时永久保留结构化的 JSON。 API 通过 `TEMP VIEW` 合并这两个数据库。 ``` flowchart LR Clients[Next.js UI / pharos CLI] -->|HTTPS JSON| API[FastAPI Server] API -->|read/write| HOT[(hot.db SQLite)] API -->|read| COLD[(cold.db / archeion)] Sched[Scheduler sweep] --> Fetch[Fetcher] --> Parse[Parser+Extractor] --> Dedup[Dedup] -->|insert pending| HOT HOT -->|pending rows| Lantern[Lantern light - LLM Enrichment] Lantern -->|enriched_json, overview| HOT Lantern --> FP[Fingerprint Builder] --> CL[Constellation Assigner] --> HOT Arch[Archiver] -->|move| HOT Arch --> COLD ``` 在 [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) 中阅读更多内容。 ## 文档 | 主题 | | |---|---| | 安装 | [docs/INSTALL.md](./docs/INSTALL.md) | | 架构 | [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) | | Lantern(LLM + 聚类) | [docs/LANTERN.md](./docs/LANTERN.md) | | MITRE ATT&CK 集成 | [docs/MITRE.md](./docs/MITRE.md) | | 配置参考 | [docs/CONFIGURATION.md](./docs/CONFIGURATION.md) | | API 参考 | [docs/API.md](./docs/API.md) | | 数据库模式 | [docs/SCHEMA.md](./docs/SCHEMA.md) | | CLI 参考 | [docs/CLI.md](./docs/CLI.md) | | 部署说明 | [docs/DEPLOYMENT.md](./docs/DEPLOYMENT.md) | | 开发指南 | [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md) | | 常见问题 / 设计理念 | [docs/FAQ.md](./docs/FAQ.md) | ## CLI 30 秒入门 | 命令 | 用途 | |---|---| | `pharos init` | 创建包含 schema 的 `hot.db` 和 `cold.db` | | `pharos adduser [--admin]` | 创建本地用户 | | `pharos watch -u ` | 为用户订阅一个源 | | `pharos catalog` | 显示内置的精选源目录 | | `pharos seed-feeds -u -p starter` | 为用户订阅精选预设(starter / minimal / full / everything) | | `pharos sweep` | 阶段 1:摄取调度器 | | `pharos light` | 阶段 2:lantern(LLM 富化) | | `pharos archive` | 阶段 3:archiver(热库 -> 冷库),单次执行 | | `pharos status` | 流水线状态:按 enrichment_status 统计数量 | | `pharos feeds` | 列出所有源 + 上次轮询状态 | | `pharos reprocess [--failed-only]` | 将行重置为 pending | 完整参考:[docs/CLI.md](./docs/CLI.md)。 ## 许可证 **Pharos 是专有软件。** 个人在 [Pharos Proprietary License v1.0](./LICENSE) 条款下被允许免费进行个人的自托管使用。 **任何商业、组织、政府、托管、托管服务 或面向第三方的使用都需要单独的商业许可证。** 没有自动或点击即同意的商业授予 — 每个 商业许可证均视具体情况逐案颁发。 要申请商业许可证,请在 GitHub 上开启私密咨询: 有关完整的条款、限制和 贡献者授权,请参阅 [`LICENSE`](./LICENSE)。
标签:AI安全, ATT&CK映射, Chat Copilot, Cloudflare, CVE追踪, DLL 劫持, IOC提取, JSON API, LLM富化, MITRE ATT&CK, Petitpotam, React, RSSHub, RSS阅读器, SQLite, Syscalls, Tailwind CSS, 全文搜索, 单页应用, 大语言模型, 威胁情报, 安全资讯, 安全运营, 实时处理, 开发者工具, 情报收集, 扫描框架, 新闻聚合器, 漏洞研究, 结构化数据, 网络安全监控, 自动化聚类, 自托管, 请求拦截, 逆向工具, 速率限制处理, 驱动开发