pd241008/SentinelMesh
GitHub: pd241008/SentinelMesh
一个基于 gossip 传播和 quorum 共识的去中心化网络入侵感知框架,用于在无集中式 SIEM 的条件下集体检测分布式低速攻击。
Stars: 1 | Forks: 0
# SentinelMesh:基于 Gossip 传播的集体异常检测
**SentinelMesh** 是一个专为分布式网络入侵感知设计的去中心化异常关联框架。现代网络防御通常依赖于集中式的安全信息与事件管理(SIEM)pipeline,这会造成延迟瓶颈、产生巨大的带宽成本,并引入单点故障。
SentinelMesh 用一种轻量级、去中心化的**基于 gossip 的关联**机制取代了集中式聚合器。独立的 IDS 节点通过流行病协议交换紧凑的异常摘要,并利用 quorum 共识规则来集体升级对任何单个节点而言在统计上看起来正常的“低速慢速”攻击(例如,分布式端口扫描、凭证填充)。
## 🔍 验证与深入分析
有关 metrics pipeline 验证、已解决的结构性 bug,以及用于将真实传播信号与环境 mesh 噪声隔离的匹配反事实控制架构的详细技术复盘,请参阅 [Bug事后分析](post_mortem.md)。
## 🏛 架构
### 系统拓扑
```
graph TD
subgraph "SentinelMesh (Decentralized Gossip)"
N1((Node 1)) <-->|Constant-Size Digest| N2((Node 2))
N2 <-->|Constant-Size Digest| N3((Node 3))
N3 <-->|Constant-Size Digest| N1
N4((Node 4)) <-->|Constant-Size Digest| N2
N1 <-->|Constant-Size Digest| N4
end
subgraph "Traditional SIEM (Centralized)"
E1((Edge 1)) -->|Raw Logs/Flows| Agg[SIEM Aggregator]
E2((Edge 2)) -->|Raw Logs/Flows| Agg
E3((Edge 3)) -->|Raw Logs/Flows| Agg
E4((Edge 4)) -->|Raw Logs/Flows| Agg
end
```
### 节点工作流
```
sequenceDiagram
participant Traffic as Network Traffic
participant Local as Local Scorer (Node i)
participant Cache as Digest Cache
participant Peers as Network Peers
Traffic->>Local: Ingest local flow partition
Local->>Local: Compute O(1) EWMA z-score & tag category
Local->>Cache: Store self digest
loop Every Gossip Round
Local->>Peers: Push Digest to f random peers
Peers-->>Cache: Receive incoming peer digests
Cache->>Cache: Retain latest digest per peer in window W
alt |{peers with score > \tau_{local}}| \ge q
Cache->>Cache: Trigger Collective Alert (Quorum Escalation)!
end
end
```
## 📂 项目结构(多分支 Monorepo)
本仓库被组织为三个并行的分支,以支持模拟、机器学习验证和数据可视化。
- **`simulator/`(分支 1 - Go)**:核心离散事件模拟引擎。处理 UNSW-NB15 数据集的解析、伪随机节点分区、$O(1)$ EWMA 评分、流行病 push-gossip 交换以及 quorum 升级规则。
- **`ml-crosscheck/`(分支 2 - Python)**:独立评分器验证。使用 Isolation Forests 和 Autoencoders 等模型对 Go 评分器的升级进行交叉验证,并生成验证摘要。
- **`dashboard/`(分支 3 - Next.js)**:用于交互式扫描结果探索的前端 Web 应用。可视化跨 mesh 大小($N$)和 fanout($f$)等变量的召回率、带宽开销和收敛延迟等指标。
*辅助目录包括 `data/`(数据集和获取脚本)、`docs/`(架构和进度跟踪)、`results/`(共享输出契约)和 `paper/`(LaTeX 源码)。*
## 🚀 快速开始
### 1. 获取数据集
模拟使用标准的 UNSW-NB15 数据集。使用提供的脚本下载它:
```
./data/scripts/fetch_dataset.sh
```
### 2. 运行模拟器
导航到 simulator 分支,并使用默认配置值运行参数扫描。*(执行 CLI 正在积极开发中)*:
```
cd simulator
go run cmd/simulate/main.go --config configs/sweep_default.yaml
```
### 3. 查看结果
结果将写入 `results/sweep/`(CSV)和 `results/crosscheck/`(CSV + JSON)。启动 dashboard:
```
cd dashboard
npm install
npm run dev
# 打开 http://localhost:3000
```
然后将结果复制到 dashboard 的 public 目录中:
```
cp -r results/sweep/*.csv dashboard/public/data/
cp -r results/crosscheck/* dashboard/public/data/
```
## 🧪 测试
### 测试统计
| 分支 | 语言 | 测试 / 构建 | 详情 |
|---|---|---|---|
| 核心 Simulator | Go | **41 个测试** | 10 个包 |
| ML Crosscheck | Python | **49 个测试** | 3 个测试文件 |
| Dashboard | TypeScript | **构建** | 2 个路由,2 个图表组件 |
| **总计** | | **90 个测试 + 干净构建** | |
### 分支 1 — Simulator (Go)
跨越以下包的 **41 个测试**:
| 包 | 测试数 | 重点 |
|---|---|---|
| `dataset` | 3 | CSV 解析、流提取、错误处理 |
| `fragment` | 3 | 节点分区、碎片化、计数保留 |
| `scorer` | 5 | EWMA z-score、边界、可重复性 |
| `node` | 4 | 节点逻辑、摘要缓存、流摄取 |
| `gossip` | 4 | 流行病 push、对等节点选择、陈逐出 |
| `quorum` | 5 | 升级规则、阈值、多类别、窗口 |
| `baseline` | 3 | 独立/集中式运行、无告警情况 |
| `metrics` | 5 | 召回率、带宽、延迟、边缘情况 |
| `sweep` | 3 | 配置加载、扫描执行 |
| `tests` (集成) | 3 | 完整 pipeline、端到端扫描、基线比较 |
```
cd simulator && go test ./... -count=1
```
### 分支 2 — ML Crosscheck (Python)
跨越 3 个文件的 **49 个测试**:
| 文件 | 测试数 | 重点 |
|---|---|---|
| `test_dataset.py` | 23 | 数据加载、标签、特征、拆分、归一化、分区 |
| `test_models.py` | 15 | Isolation Forest、Autoencoder、Go EWMA 副本、分数边界 |
| `test_integration.py` | 11 | 完整 pipeline、各类别指标、CSV/JSON 报告输出 |
```
cd ml-crosscheck && pytest tests/ -v
# 或从项目根目录:
python -m pytest tests/ml-crosscheck/ -v
```
### 分支 3 — Dashboard (Next.js)
**干净构建**,没有 lint 错误。两个路由:
- `/` — 扫描概览:召回率图表、带宽图表、原始结果表
- `/crosscheck` — ML crosscheck 比较视图,包含总体和各类别表格
```
cd dashboard
npm run build
```
### 测试数据
位于 `simulator/testdata/testdata.csv` 的小型合成 CSV 数据集,包含跨 7 个攻击类别(分析、后门、dos、漏洞利用、模糊测试、通用、侦察)加上正常流量的 15 个流。被 Go 和 Python 测试套件使用。
## 📊 评估目标
基于使用分区的 UNSW-NB15 流量进行的离散事件模拟,本框架旨在衡量:
- **检测召回率**:系统恢复针对碎片化侦察的检测能力的能力(对比基线孤立的边缘节点)。
- **带宽开销**:与集中式 SIEM 相比,峰值单点负载的减少,跟踪每个节点的 payload 成本。
- **收敛延迟**:跨不同 mesh 大小的 gossip 传播的扩展行为,以离散的 gossip 轮次衡量。
标签:Gossip协议, 分布式系统, 去中心化, 响应大小分析, 异常检测, 插件系统, 日志审计, 网络安全, 逆向工具, 隐私保护