TeleVoyant/threat-hunting-platform-federated-coordinator
GitHub: TeleVoyant/threat-hunting-platform-federated-coordinator
一个安全加固的联邦学习聚合服务器,让多个组织在不共享原始日志的前提下协作训练威胁检测模型。
Stars: 0 | Forks: 0
# apt-fl-coordinator
一个独立、安全加固的**联邦聚合服务器**,用于协作式
威胁检测模型。多个威胁狩猎平台在各自的
遥测数据上本地训练 XGBoost,仅共享(差分隐私的)**树结构** —— 绝不
共享原始日志 —— 然后这个中立的协调器将这些矩阵**组合**成一个全局
模型并进行**重新分发**。任何原始安全数据都不会跨越组织的
边界。
它是*用于检测基于凭证的横向移动 APT 的威胁狩猎软件*项目的跨组织部分,被提取到独立的代码仓库中,以便中立的联盟可以独立于任何参与组织的平台运行它。
## 它的功能
```
Org A platform ──┐ (1) train locally + DP (4) fetch global model
Org B platform ──┤ sign contribution verify coordinator sig
Org C platform ──┘ submit over mTLS ──▶ [ apt-fl-coordinator ] ──▶ redistribute
(2) verify (nonce, sig,
hash, freshness)
(3) trust-validate +
federated-bagging merge
```
- **接收** — 组织提交带有签名证明的 XGBoost 模型;服务器在
持久化这些字节之前会运行 7 步验证(组织/轮次绑定、SHA-256 完整性、±5 分钟时效性、一次性
nonce、Ed25519 签名)。
- **组合** — 根据需求,服务器会根据公共验证集对每个接受的贡献进行信任验证,
丢弃低信任度/被投毒的模型,并通过
**联邦 bagging** 合并幸存者(树集成按照信任度 × 数据大小的比例进行拼接,
上限为 500 棵树)。
- **提供** — 聚合后的全局模型以**协调器签名**的形式提供,因此组织在加载前可以
证明其真实且未被篡改。
## 安全模型
| 威胁 | 防御 |
|---|---|
| **MITM / 篡改** | 双向 mTLS + Ed25519 消息签名 + SHA-256 模型绑定 |
| **重放** | 每个组织/轮次的一次性 nonce,原子性消耗,+ ±5 分钟时间戳时效性 |
| **伪造全局模型** | 协调器对每个全局模型进行签名;客户端在加载前进行验证 |
| **冒充 / 女巫攻击** | CA 门控注册(操作员批准),每个组织一个客户端证书,CRL 吊销 |
| **模型投毒** | 信任管理器:在公共验证集上进行结构 + 准确率 + 骤降检查;信任加权聚合;信任度低于 0.3 的组织被排除 |
| **否认** | 每个贡献的签名证明都会被持久化;哈希链审计日志 |
| **数据暴露** | 只有经过 DP 噪声处理的树结构会离开组织;协调器永远不会看到原始遥测数据 |
| **DoS / 滥用** | 最大负载限制,每个(组织,轮次)仅接受一次贡献,容器加固 |
有关确切的通信格式,请参阅 [PROTOCOL.md](PROTOCOL.md),有关威胁模型和披露政策,请参阅 [SECURITY.md](SECURITY.md)。
## 快速开始 (Docker)
```
# 1. Operator JWT secret (Docker secret — 永不提交 / 永不放入 env)
openssl rand -base64 48 > secrets/fl_jwt_secret
# 2. Operator roster — 生成 api_key + hash,并将 hash 放入 config/fl_users.yml
cp config/fl_users.example.yml config/fl_users.yml # then edit api_key_hash
# 3. (可选) 用于 trust scoring 的 public validation set
python examples/gen_validation.py config/validation.svm
# 4. 引导 federation CA + coordinator TLS cert (一次性)
docker compose run --rm coordinator \
python -m coordinator.init_ca --ca-dir /app/data/ca --hostname fl.example.com
# 5. 启动它 (要求 mTLS, read-only, non-root, caps dropped)
docker compose up -d
```
通过带外方式将 `data/ca/ca_cert.pem` 分发给参与的组织(这是它们的信任
锚点)。组织在本地生成 Ed25519 密钥对,然后您使用它们的公钥进行注册;
注册会返回经 CA 签名的客户端证书 + 协调器的公钥。
## 操作员 + 组织 API (前缀 `/fl`)
| 方法 | 路径 | 身份 | 用途 |
|---|---|---|---|
| POST | `/orgs/enroll` | 操作员 (admin) | 注册组织,签发其客户端证书 |
| GET | `/orgs` | 操作员 | 列出组织 + 信任分数 |
| POST | `/orgs/{id}/block` · `/unblock` · DELETE `/orgs/{id}` | 操作员/管理员 | 生命周期管理 / 吊销 |
| POST | `/rounds/start` | 操作员 | 开启一轮训练 |
| GET | `/rounds/{id}/challenge` | 组织 (mTLS) | 一次性 nonce |
| POST | `/rounds/{id}/contribute` | 组织 (mTLS) | 提交签名的模型矩阵 |
| POST | `/rounds/{id}/aggregate` | 操作员 | 信任验证 + 组合已接受的矩阵 |
| GET | `/rounds/{id}/global-model` | 组织 (mTLS) | 下载协调器签名的全局模型 |
| GET | `/audit` | 操作员 | 哈希链审计追踪 |
参考参与者客户端位于 [`client_ref/`](client_ref/fl_client.py)。
## 目录结构
```
flproto/ vendored, self-contained protocol core (attestation, CA, libsvm)
coordinator/ the server: api, store, security/RBAC, mTLS, aggregation, trust, audit
client_ref/ reference org client (train -> DP -> sign -> submit -> verify)
tests/ unit (crypto/merge/replay) + end-to-end (full round) — runnable scripts
examples/ validation-set generator + end-to-end walkthrough
```
## 开发 / 测试
```
python -m venv venv && . venv/bin/activate
pip install -r requirements.lock.txt
PYTHONPATH=. OMP_NUM_THREADS=1 python tests/test_unit.py
PYTHONPATH=. OMP_NUM_THREADS=1 python tests/test_e2e.py
```
## 贡献
欢迎提交 Issues 和 PR —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。通信协议是
带版本的([PROTOCOL.md](PROTOCOL.md)),因此独立的客户端实现可以保持一致。
## 许可证
[Apache-2.0](LICENSE)。
标签:PE 加载器, XGBoost, 安全协调, 差分隐私, 模型聚合, 联合建模, 联邦学习, 请求拦截, 逆向工具