jadoon200/sentinel
GitHub: jadoon200/sentinel
SENTINEL 是一个将 OSINT 威胁情报与机器学习入侵检测相融合的平台,通过统一的 MITRE ATT&CK 知识图谱实现告警与真实攻击活动的关联,并以严格的跨数据集评估方法论保证模型在真实网络环境中的可靠性。
Stars: 0 | Forks: 0
# SENTINEL
**网络威胁情报融合平台** — 将开源威胁情报 (OSINT) 与基于 ML 的网络入侵检测相关联,其运作方式与真实的 SOC 和情报融合中心完全一致。
## 架构
```
┌─────────────────────────┐ ┌──────────────────────────┐
│ Layer 1 · OSINT intel │ │ Layer 2 · Intrusion det. │
│ NVD / CISA KEV / OTX / │ │ CIC-IDS flows → LightGBM │
│ ATT&CK / RSS → NLP → │ │ + autoencoder → alerts │
│ threat knowledge graph │ │ tagged w/ ATT&CK techn. │
└───────────┬─────────────┘ └────────────┬─────────────┘
└────────────┬───────────────────┘
▼
┌─────────────────────────┐
│ Layer 3 · Fusion │
│ correlation engine + │
│ dashboard & briefings │
└─────────────────────────┘
```
## 与众不同之处
- **严谨的评估纪律。** 每个模型报告的指标都是在网络环境变更后依然有效的数值,而不是单纯追求亮眼的 AUC:跨数据集 (2017 → 2018) 迁移、针对未见攻击类别的时间序列分割、多种子后端基准测试,以及如实记录的*负面*结果(隐蔽的频谱信标、僵尸网络召回率)。完整记录见 [docs/EVAL.md](docs/EVAL.md) 和 [docs/MODEL_CARD.md](docs/MODEL_CARD.md)。
- **统一的 ATT&CK 图谱,加权评分融合。** OSINT × NLP × IDS 被融合进一个以技术为索引的单一知识图谱中 —— 攻击活动关联、告警上下文以及基于 KEV 权重的简报全都基于相同的 ATT&CK 技术 ID 进行匹配对接。这种对接并非原始标签的简单重叠:每个 告警↔攻击活动 的匹配项都带有经过校准的融合强度 = 技术稀有度 (IDF) × 攻击活动新近度 × 佐证度,因此,一个具体且活跃的关联性将胜过偶然的标签重合。
## 核心结果
所有数据均来自 [docs/EVAL.md](docs/EVAL.md),如实呈现。
- **跨网络迁移,从失败 → 修复(核心研究成果)。**
一个在 2017 年数据上训练的 IDS 在其内部数据集中具备完美的可区分度 (ROC-AUC **1.0000**),但在任何可用的阈值下,它对 2018 年不同网络上的*同类攻击*的检测率却为*零* (**召回率 @ 1% FPR 为 0.000**) —— 绝对阈值的设定在 2018 年的分数分布中落在了错误的位置。每一种**无标签**修复手段都失败了:CORAL 协方差对齐、迁移稳定的特征选择,以及在目标数据上训练的 autoencoder,其召回率都停留在 ~0。**Few-shot 是解决之道** —— 只需 50 个带标签的目标流量,就能在无污染的留出数据集上,**针对三种不同的攻击类别(暴力破解、DoS、Bot)恢复 0.95–0.99 的召回率**;Bot 的 2017 盲测基线表现甚至*不如随机猜测* (AUC 0.40),而 50 个标签将其提升至 AUC 0.997。跨网络 IDS 迁移本质上是一个 few-shot *打标*问题,而不是表征对齐问题。打标预算很小且经过实际测量(`make eval-label-efficiency`,5 个随机种子):**约 50 个标签可达到 ≥0.88 召回率,约 100 个可达到 ≥0.97**,并且*主动*(基于不确定性)选择的表现反而不如随机选择 —— 因为发生迁移崩塌的模型的置信度无法挑选出富含信息的流量,所以随机均衡采样胜出。
- **保形告警预算控制(网络内部)。** 一个无标签的在线控制器会根据目标网络自身的良性流量重新推导工作点,在网络内部发生漂移期间将告警率维持在 1% 的预算内(FPR 为 1.10%,而静态 p99 阈值则漂移至 5.96%),同时针对稀有攻击仍能持续告警(Infiltration 0.84,XSS 0.70)—— 这是应对网络*内部*漂移的解决方案,并已针对上述跨网络场景测试到了其极限。该功能已实现在流量重放服务中(`make replay` / `python -m sentinel.ids.replay --conformal`),而不仅仅是一项离线研究 —— 并且启用它不会给集成模型带来任何损失:7/7 的未见攻击类别依然保持覆盖(`make eval-ensemble --conformal`),因为百分位/监督专家模型承担了被预算上限削减的体积型攻击类别。
- **主机融合威胁汇总。** 单流告警会汇总为单主机威胁:每台主机都会显示哪些检测器达成了共识、其合并后的 ATT&CK 技术、一个透明的风险评分,以及与之融合的真实世界 CTI 攻击活动 —— 每个攻击活动关联都由经过校准的融合强度(稀有度 × 新近度 × 佐证度)进行评分,从而确保汇总结果排序依据的是有意义的关联性,而非关键词碰撞。具体示例和表格详见 [docs/EVAL.md](docs/EVAL.md)。
- **IDS 时间序列分割的严谨性。** LightGBM 基线在数据集内部可获得高达 1.0000 的 ROC-AUC,但其*默认*阈值在未见的周四至周五攻击类别上直接崩溃至 F1 0.001 —— 这依然是阈值校准问题。仅通过良性流量(无攻击标签)重新校准阈值,即可将 F1 恢复至 0.800。
- **五检测器集成,覆盖各类攻击。** 各个检测器在设计上就覆盖了不同的攻击类别:监督模型 LightGBM(已见类别 ≈ 1.0),仅使用良性数据训练的 autoencoder(Infiltration 0.84 / DDoS 0.71 / XSS 0.67),单主机时序模型(XSS 1.00 / Web Brute Force 0.94),主机画像发散检测器(PortScan 0.998),以及一个提升 CIC Bot 通道召回率(从 ~0 提升至 5/5 @1.6% FPR)的数据大小离散度信标检测器。在 CTU-13(7 个僵尸网络家族,1,470 个通道)上进行交叉验证后,它**无法泛化**(0.010 —— 因为该特征是 ARES 特有的):这是一个经过测量的局限性,而非主观臆断。
- **SQL 注入,基于其 payload 特征。** SQLi 对于*无监督*的流量检测器来说是不可见的(12 个流量,均未出现在训练集中,在流量大小/时间上看起来像良性流量)—— 一个校准过的监督模型可以标记这 12 个流量,但仅在数据集内部的流量上有效。稳健的 SQLi 检测需要引入一个 payload(WAF 风格)检测器:基于请求字符串的字符 n-grams + 逻辑回归,映射至 T1190 并进行了**跨语料库**验证(在一个公开 payload 来源上训练,在另一个上测试),F1 达到 **0.984 / 0.998** —— 这是真正的泛化,而非死记硬背。它通过 WAF 重放(`make waf-replay`)接入平台 → 生成的 T1190 告警会与攻击活动融合,并显示在威胁情报流中。
- **集成覆盖,而非单模型召回。** 没有任何一个单一检测器能覆盖所有未见攻击类别(表现最好的无监督模型平均召回率仅为 0.268),但五检测器集成方案实现了**对 7/7 未见攻击类别召回率 ≥ 0.93 的覆盖**,每一类都由其专门的专家模型负责检测(`make eval-ensemble`)—— 该系统捕获到了任何单一模型都无法独立发现的威胁。
- **技术映射器,混合检索。** 对全量的企业级 ATT&CK 目录(697 项技术)进行 Zero-shot 映射,并在 10,411 个 TRAM 句子上进行了基准测试:BM25 + 稠密倒数排名融合,结合丰富化的流程文档,在父级层面达到了 hit@5 **0.690** 的成绩 —— 在双编码器成本下,击败了昂贵 130 倍的交叉编码器重排序。
- **MLX 与 torch 后端采用。** autoencoder 的 MLX 移植版在经过 10 个种子基准测试后,成为了 Apple silicon 上的自动选择默认项:召回率持平,训练速度提升 3.3 倍,且不会与 LightGBM 发生 OpenMP 冲突(torch 依然是 Linux/CI 环境下的备选方案)。
## 技术栈
Python 3.12 (conda) · SQLAlchemy/Alembic · PostgreSQL · Prefect · httpx · MLflow · LightGBM/PyTorch · MLX (可选, Apple silicon) · FastAPI · React/TypeScript · Docker Compose · GitHub Actions
所有数据源均为免费获取:[NVD CVE API](https://nvd.nist.gov/developers/vulnerabilities)、[CISA KEV](https://www.cisa.gov/known-exploited-vulnerabilities-catalog)、[MITRE ATT&CK](https://attack.mitre.org/)、**28 个无需密钥的 CTI RSS/Atom 订阅源**(厂商研究博客 + CERT — Talos、Unit42、Mandiant、CrowdStrike、Securelist、Project Zero、NCSC-UK 等)、[AlienVault OTX](https://otx.alienvault.com/)(可选免费密钥)、[CIC-IDS2017](https://www.unb.ca/cic/datasets/ids-2017.html)、[CSE-CIC-IDS2018](https://www.unb.ca/cic/datasets/ids-2018.html)、公开的 SQLi payload 语料库 (HttpParamsDataset, Kaggle SQLiV2) 以及 [TRAM](https://github.com/center-for-threat-informed-defense/tram)。一次典型的数据刷新会从约 29 个来源摄取约 600 份报告进入图谱;运行 `make refresh` 即可执行完整的 摄取 → 富化 → 重放 pipeline(对 cron 友好)。
## 快速开始
```
# 1. 创建 + 激活 sentinel 环境,安装依赖
make env
conda activate sentinel
make install
# 2. 启动 Postgres(+ MLflow)并运行 migrations
make up
# 3. 运行 OSINT ingestion flow(无需 API keys)
make ingest
# 4. 对已导入的报告进行 NLP technique 标注 + campaign 关联
make enrich
# 5. 检查
make check
```
通过 `.env` 进行配置 — 参见 [.env.example](.env.example)。
### IDS 模型
从 `intrusion-detection.distrinet-research.be/WTMC2021/Dataset/dataset.zip` 下载修正后的 CIC-IDS2017 数据集压缩包并存入 `data/cicids2017/`,然后执行:
```
make train # LightGBM binary baseline (--split temporal for the unseen-family eval)
make train-anomaly # benign-only autoencoder anomaly detector (MLX / torch-MPS)
make train-sequence # per-host sequence model (MLX gated recurrence)
make train-profile # host-profile fan-out detector (PortScan)
make replay # persist top detections as ATT&CK-tagged alerts
make eval-cross # cross-dataset 2017 → 2018 generalization (downloads a 2018 day)
make eval-domain # label-free domain-adaptation fixes vs few-shot (2017 → 2018)
make eval-cross-family # cross-family stress test: few-shot across brute-force / DoS / Bot
```
### API + dashboard
```
make api # read-only knowledge-graph API on :8000 (needs make up)
make ui # React dashboard dev server on :5173 (needs make api running)
make briefing # print the auto-generated daily threat briefing
```
API endpoints:`/health`、`/stats`、`/campaigns` (+ `/{id}`)、`/reports`、`/alerts` (+ `/{id}/context` 用于技术融合评分)、`/hosts` 和 `/hosts/simulated`(主机融合威胁汇总)、`/techniques` (+ `/{id}`)、`/trending`、`/feed-drift`、`/briefing` 以及 `/attack-navigator-layer`(导出告警/攻击活动技术覆盖范围的 ATT&CK Navigator 文件)。
Dashboard 是一个以问题为导向的三标签页视图,基于上述 endpoints 运行:
- **Threat feed** — 融合视图。针对单主机的威胁汇总:每台主机都会显示五个检测器中有哪些达成了共识、其合并后的 ATT&CK 技术、一个透明的风险评分,以及与之融合的 CTI 攻击活动;可展开为一条从左到右的证据链(检测器 → 主机 + 技术 → 匹配的真实世界攻击活动,带有融合强度指示器以及每次匹配中各自的稀有度/新近度细分),并提供一个“模拟检测”按钮用于展示留出数据集的检测结果。
- **Landscape** — 趋势技术、订阅源漂移 (PSI)、每日简报以及 ATT&CK Navigator 导出。
- **Model report card** — 诚实的评估记录,包括跨网络迁移失败的情况*及其* few-shot 修复方案,此外还有一个 **“Try the mapper”** 面板:粘贴任何 CTI 段落,实时的 zero-shot 映射器就会对最接近的 ATT&CK 技术进行排名(`POST /map-techniques`)。它仅检查粘贴的文本 —— 不会抓取或扫描任何 URL —— 因此 API 实质上保持了只读状态。
### 公开部署 API
推理路由会运行模型,因此该 API 自带了优雅降级防护机制 —— 可配置的 CORS 源、请求大小上限、单客户端速率限制,以及一个有限并发上限(在负载过高时返回 `503` 而不是耗尽内存)—— 所有这些默认均在本地安全,并可通过 `SENTINEL_API_*` 环境变量进行调优。请参阅 [docs/DEPLOY.md](docs/DEPLOY.md) 了解环境变量配置,以及在部署时需要执行的 reverse-proxy / TLS / 容量规划步骤。
标签:Apex, 凭据扫描, 威胁情报, 安全, 开发者工具, 机器学习, 测试用例, 版权保护, 网络安全, 超时处理, 运行时操纵, 逆向工具, 隐私保护