jayelbotvibe-web/threat-intel-arbiter

GitHub: jayelbotvibe-web/threat-intel-arbiter

一个基于组织上下文的轻量级威胁情报优先级排序工具,以单一 Go 二进制将 MISP 和 CISA KEV 数据转化为可操作的评分与分诊建议。

Stars: 0 | Forks: 0

# Threat Intel Arbiter **基于组织上下文感知的威胁优先级排序,结合 SSVC v2.1 决策树分诊与 ATT&CK 标签。** [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Go Version](https://img.shields.io/badge/Go-1.25+-00ADD8?logo=go)](https://go.dev/) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/f3/f32cb7498932ad5968e5799f0e1bdacc1aaee001f14d08db264065e70df347b3.svg)](https://github.com/jayelbotvibe-web/threat-intel-arbiter/actions/workflows/test.yml) 单一 Go 二进制文件。仅一个运行时依赖:modernc.org/sqlite(纯 Go SQLite 驱动)。使用 Go 1.25+ 可在 60 秒内部署完毕。 ![Dashboard Screenshot](https://static.pigsec.cn/wp-content/uploads/repos/cas/f6/f69358512e39a3e09681e04482c8a7e278d1f244f88ac02f14c3cbb57e8ae137.jpg) Threat Intel Arbiter 将来自 MISP 和 CISA KEV 的原始威胁情报转化为针对特定组织的、经过评分和解释的操作。它只回答一个问题: 每个警报都包含:**严重程度** + **置信度** + **操作** + **解释**,并附带完整的风险评分明细。 **👥 适用人群:** 已经在运行 MISP 但没有专用 TIP 或漏洞优先级排序层的 SOC 团队。如果您淹没在 MISP 订阅源中,并且需要进行 CVE 到技术栈的匹配,但又不想搭建 OpenCTI 或 Nucleus,那么这款工具适合您。如果您没有运行 MISP,这款工具目前还派不上用场 —— 纯 KEV 模式已在路线图中。 ## 产品简介 - ✅ **威胁优先级排序引擎** — 根据您的技术栈、行业部门和暴露面进行威胁评分 - ✅ **多数据源** — 目前支持 MISP + CISA KEV,路线图中包含 NVD + GitHub Advisory - ✅ **SSVC v2.1 分诊** — CMU/CISA 决策树(Act / Attend / Track* / Track)附带可追溯的决策分支路径 - ✅ **ATT&CK 标签** — 自动将威胁映射到 MITRE ATT&CK 技术 - ✅ **EDR 集成** — 实时将 IOC 推送到 CrowdStrike Falcon - ✅ **多用户仪表板** — admin/reader 角色,内联编辑,支持从 CMDB 导入 CSV - ✅ **全量拉取,本地过滤** — 从 MISP 拉取所有数据,并在内部根据您的上下文进行匹配 ## 什么不是 - ❌ 威胁情报平台 — [MISP](https://www.misp-project.org/) 已经做这件事了 - ❌ 漏洞扫描器 — Nessus、Qualys 等已经做这件事了 - ❌ SIEM 或 SOAR - ❌ CMDB — 它是从 CMDB 中导入数据的 - ❌ 基于 IOC 的威胁情报工具 — 优先级排序是由 CVE 驱动的。IOC(IP、域名、哈希)会被提取用于 EDR 推送,但不会用于匹配或评分。这是一个以 MISP 作为传输渠道的 CVE 优先级排序引擎。 ### 为什么不使用 SOAR / ThreatConnect / Nucleus? 这些平台非常重量级 —— 它们需要专门的基础设施、专职管理员和数周的适应期。Threat Intel Arbiter 是一个**仅 16MB 的单一二进制文件**,可在 60 秒内部署到任何机器上。如果您已经在运行 MISP,并且需要在不搭建另一个平台的情况下获取已排序优先级的警报,这就是轻量级的替代方案。它不会取代您的 SIEM 或工单系统 —— 它是为它们提供输入数据的。 ## 架构 [![Threat Intel Arbiter Architecture](https://static.pigsec.cn/wp-content/uploads/repos/cas/6c/6c12d81dbea087a80f257f646ade967ade8a2fb79f2fc2e0d618e4dd9aa9abdf.jpg)](https://jayelbotvibe-web.github.io/threat-intel-arbiter/architecture.html) *[点击图表 → 交互式架构页面](https://jayelbotvibe-web.github.io/threat-intel-arbiter/architecture.html),其中包含每个组件的详情抽屉。* 六阶段流水线:数据接入 → 规范化 → 缓冲 → 关联与评分 → 持久化 → 响应与展示 —— 全部封装在单一 Go 二进制文件中。 | 阶段 | 功能描述 | |---|---| | **Ingestion(接入)** | 拉取完整的 MISP API 数据流(无预过滤)+ CISA KEV 目录 | | **Normalization(规范化)** | 去重、属性解析、IOC 提取、元数据丰富 | | **Match & Score(匹配与评分)** | 在本地运行匹配器 —— 技术栈、行业部门契合度、KEV 因子、严重程度模型、置信度模型 | | **Explainer(解释器)** | 从相同的评分结构体生成人类可读的决策依据 | | **Routing(路由分发)** | 根据严重程度、置信度和 TLP 路由至 Slack、Teams、邮件、CrowdStrike、SIEM | **匹配器在本地根据您的上下文运行:** 技术栈(精确/模糊 CVE 匹配)、行业契合度(NIS 行业威胁)、KEV 提升权重(被主动利用)、CVSS/EPSS 严重程度模型,以及基于数据源可靠性 + 匹配质量 + 时效性的置信度评分。 ## 快速开始 ``` # 前提条件:Go 1.25+,一个正在运行的 MISP 实例 go build -o arbiter ./cmd/arbiter/ # 设置你的 tech stack cp config/techstack.csv.example config/techstack.csv # 运行 export MISP_API_KEY="your-misp-api-key" export ARBITER_ADMIN_KEY="your-admin-key" ./arbiter --config ./config/ ``` 打开 **http://localhost:8080** —— 使用用户名 `admin` 和首次启动时打印到 stdout 的密码进行登录。 ## 工作原理 Threat Intel Arbiter Pipeline *单一二进制文件流水线 —— 全量拉取,本地过滤,匹配组织上下文,评分,解释,路由。* 1. **拉取** —— 从 MISP 获取所有事件(无 galaxy/tag/CVE 预过滤)。MISP 充当对等节点、ISAC、OSINT 订阅源、商业和政府数据源的聚合渠道。过滤会在本地根据您的上下文进行。 2. **规范化** —— 提取 CVE、CVSS、标签、威胁行为者、参考资料,以及用于 EDR 集成的 IOC(IP、域名、哈希)。规范的 ThreatEvent 模型与数据源无关。 3. **过滤** —— 通过 MISP 警告列表(noticelists)和公告列表(warninglists)丢弃 TLP:RED、有争议的 CVE 和已知的误报。(分析师误报标记/反馈循环已在路线图中。) 4. **匹配** —— 可插拔的匹配器:CVEMatcher(版本感知)、SectorMatcher(分类标签)、KEVMatcher(主动利用)。 5. **评分** —— 4 个维度:可能性 × 影响 × 暴露面 ÷ 最大值,置信度作为独立的维度。 6. **解释** —— 从计算得分的相同结构体中提取人类可读的明细。没有单独的代码路径。 7. **路由** —— 根据严重程度 + 置信度。紧急+高 → #sec-alerts。中 → 每周摘要。低 → 仅记录日志。IOC → CrowdStrike Falcon EDR。 ### 为什么全量拉取,本地过滤 仲裁器**不**按 galaxy、tag 或 CVE 查询 MISP。它调用: ``` GET /events/restSearch?returnFormat=json&limit=100 ``` 在 MISP API 层面进行预过滤会遗漏威胁:未追踪的行为者在您的技术栈中利用 CVE、没有 galaxy 标签但包含与行业相关分类的事件,或者您未订阅但仍包含相关 CVE 的数据源。MISP 是一个威胁情报聚合渠道,而不是过滤网关。 ### 为什么 MISP 优先 以 MISP 为优先意味着 v1 版本带来了完整的产品体验 —— 所有四个风险维度都有数据支撑。SectorMatcher 使用 MISP 分类法。置信度评分使用 sighting(目击事件)和社区信任度。解释引擎除了“CVSS 很高”(所有工具都已具备的功能)之外,还有更多实质内容可以解释。 仅依靠 NVD 将产生较单薄的产品,与 CVSS 过滤器没有区别。MISP 数据为我们提供了差异化优势。v2 将增加 NVD 和 GitHub Advisory,以覆盖没有 MISP 的组织。 ## Web 仪表板 内置单页应用程序 —— 无需框架,无需构建步骤,纯粹由二进制文件提供服务的 HTML/CSS/JS。 ![Dashboard Screenshot](https://static.pigsec.cn/wp-content/uploads/repos/cas/f6/f69358512e39a3e09681e04482c8a7e278d1f244f88ac02f14c3cbb57e8ae137.jpg) | 屏幕 | 描述 | |---|---| | **Alerts(警报)** | 可搜索/可过滤的表格。点击任意行可查看包含解释、CVSS、匹配的应用程序和操作标签的完整风险明细。 | | **Tech Stack(技术栈)** | 可内联编辑。版本(点击编辑)、关键程度(下拉菜单)、是否面向互联网(下拉菜单)。通过自定义确认对话框添加/删除应用程序。 | | **Import CSV(导入 CSV)** | 从 CMDB(ServiceNow、Ivanti、Snipe-IT 等)拖放批量上传。增量检测显示添加/删除的内容。 | | **Users(用户)** | 仅限管理员。创建/编辑/删除具有 admin/reader 角色的用户帐户。 | | **Settings(设置)** | 配置管理员 API 密钥、Slack/Teams/邮件 webhook URL、CrowdStrike 凭据。 | ### 用户帐户 | 角色 | 权限 | |---|---| | **admin** | 完全访问权限:警报、技术栈 CRUD、CSV 导入、用户管理、设置 | | **reader** | 只读:警报列表、警报详情、技术栈视图。无写入权限。 | - Session cookie 认证(HttpOnly、SameSite=Strict),有效期 12 小时 - 密码哈希:Argon2id,登录时支持传统的 SHA-256 透明升级 - Session token:在 SQLite 中静态存储为 SHA-256 哈希值 - 首次启动时使用随机的一次性密码(打印到 stdout)生成默认管理员帐户。您**必须在首次登录时更改它** —— 不存在长期保留的默认凭据。 - 通过 `X-Arbiter-Key` 请求头进行程序化访问(API 密钥始终具有管理员权限) ## 部署 ``` go build -o arbiter ./cmd/arbiter/ # → ~16MB static binary # → 复制到任何 Linux/macOS/Windows 机器 # → 设置 4 个 env vars。运行。完成。 ``` - 零基础设施:无需 Docker、Postgres、Redis、Python、Node - SQLite 是单一文件 —— 备份 = `cp data/arbiter.db data/arbiter.db.bak` - 交叉编译:`GOOS=linux GOARCH=amd64 go build` ## 延伸阅读 | 文档 | 涵盖内容 | |---|---| | [系统设计](docs/design.md) | 完整架构、评分公式、数据库 schema、定位策略 | | [EDR — CrowdStrike Falcon](docs/edr-crowdstrike.md) | IOC 提取、OAuth2、批处理、去重、模拟模式 | | [架构图](https://jayelbotvibe-web.github.io/threat-intel-arbiter/architecture.html) | 交互式 6 阶段流水线 —— 点击任意区块查看详情 | | [API 参考](#api) | 完整的 endpoint 参考(见下文) | | [安全策略](SECURITY.md) | 威胁模型、缓解措施、漏洞报告 | ## v1 数据源 - **MISP** ★ 主要来源 — REST API,HMAC-SHA256 认证。每 15 分钟拉取一次。追踪 NEW/MODIFIED/DELETED 事件。提取所有 galaxy、分类法和 sighting 数据。 - **CISA KEV** ★ 次要来源 — 公开 JSON,无需认证。每天拉取。每个条目都是确认被主动利用的漏洞。 v2 路线图:NVD API、GitHub Advisory、供应商订阅源、RSS 连接器。 ## 设计决策 | 决策 | 原因 | |---|---| | 全量拉取,本地过滤 | 在 MISP 处预过滤会遗漏威胁。匹配引擎拥有完整的组织上下文。 | | 从第一天起就采用规范的 ThreatEvent | 增加一个数据源 = 添加 1 个规范化器。如果没有这个 = 重写引擎。 | | 具有 admin/reader 角色的多用户认证 | SOC 团队需要独立的登录凭据。自包含于 SQLite 中,无需外部 IdP。 | | 使用 Argon2id 而非 bcrypt | golang.org/x/crypto 是慢速 KDF 中最接近标准库的方案。自描述的哈希格式支持传统的 SHA-256 透明升级。 | | 单一二进制文件,每个组织一个 | 几分钟内即可部署。多租户将在 v2 中支持。 | | 通过 IOC 进行 EDR 集成,而不仅仅是警报 | 闭环从检测到预防。实时将 IOC 提供给 CrowdStrike Falcon。 | ## 技术栈 | 组件 | 技术 | 原因 | |---|---|---| | 语言 | Go 1.25+ | 单一二进制文件,标准库涵盖约 95% 的功能 | | HTTP | net/http | 标准库 | | 数据库 | SQLite (modernc.org/sqlite) | 纯 Go,零配置,基于文件 | | 认证 | golang.org/x/crypto/argon2 + crypto/sha256 | Argon2id 密码哈希 + session token | | **依赖项** | **1** | modernc.org/sqlite(及其传递依赖) | ## 文件结构 ``` threat-intel-arbiter/ ├── cmd/arbiter/main.go # Entry point ├── internal/ │ ├── source/ # MISP + KEV connectors + normalizers │ ├── model/ # Canonical ThreatEvent, Match, Alert, OrgContext │ ├── filter/ # Warning list filter │ ├── match/ # CVEMatcher, SectorMatcher, KEVMatcher + version subsystem │ ├── risk/ # 4-dim scoring + explainability + dedup │ ├── notify/ # Slack, Teams, Email, Webhook, CrowdStrike routers │ ├── api/ # HTTP server, auth, dashboard │ ├── store/ # SQLite layer │ └── config/ # JSON config loading + CSV parsing ├── config/ # Example config files ├── docs/ # Design document, architecture diagrams, EDR docs └── data/ # SQLite database (created at runtime) ``` ## API 参考 所有 endpoint 都需要认证(session cookie 或 `X-Arbiter-Key`)。`/health` 是唯一的 endpoint。 ### 认证 | Endpoint | 方法 | 描述 | |---|---|---| | `/login` | GET | 登录页面 (HTML) | | `/auth/login` | POST | `{username, password}` → session cookie + `{role, username}` | | `/auth/logout` | POST | 清除 session | | `/auth/session` | GET | 当前的 `{username, role}` | ### 警报与数据 | Endpoint | 方法 | 描述 | |---|---|---| | `/api/alerts` | GET | 列出警报。查询参数:`?severity=`、`?status=`、`?q=`、`?app=` | | `/api/alerts/:id` | GET | 包含 explanation、action、routed_to 的单个警报 | | `/api/techstack` | GET | 包含所有字段的完整技术栈 | | `/api/stats` | GET | 按严重程度统计的警报数 + 追踪的应用程序 | | `/health` | GET | 公开。MISP 状态、KEV 条目、警报计数 | ### 管理(需要管理员角色或 API 密钥) | Endpoint | 方法 | 描述 | |---|---|---| | `/admin/ack/:id` | POST | 更新警报状态:`acked`、`false_pos`、`resolved` | | `/admin/import` | POST | 上传 techstack.csv,增量检测 | | `/admin/pull` | POST | 触发立即从所有数据源拉取 | | `/admin/techstack` | POST | 添加单个应用程序 | | `/admin/techstack` | PUT | 更新单个应用程序 | | `/admin/techstack` | DELETE | 删除单个应用程序 `{name}` | | `/admin/users` | GET | 列出所有用户 | | `/admin/users` | POST | 创建用户 `{username, password, role}` | | `/admin/users` | PUT | 更新用户角色/密码 | | `/admin/users` | DELETE | 删除用户(无法删除最后一个管理员) | ## 许可证 MIT — 有关全文,请参见 [LICENSE](LICENSE)。 由 [@jayelbotvibe](https://github.com/jayelbotvibe-web) 构建 ⭐ 如果觉得有用,请**给本仓库点 Star**。如需提交 Bug 或功能请求,请[开启一个 issue](https://github.com/jayelbotvibe-web/threat-intel-arbiter/issues)。 **路线图:** NVD API + GitHub Advisory 数据源,Microsoft Defender / SentinelOne EDR 连接器,多租户。
标签:EVTX分析, Go, Ruby工具, SSVC, 威胁情报, 安全运营, 开发者工具, 扫描框架, 日志审计, 漏洞优先级排序