abikomberi25/aegisdrift-security-drift-platform
GitHub: abikomberi25/aegisdrift-security-drift-platform
AegisDrift 是一个结合机器学习、生存分析和图关联的安全控制漂移检测平台,用于识别跨域配置漂移并将其关联为可解释的复合安全事件。
Stars: 0 | Forks: 0
# 🛡️ AegisDrift — 安全控制漂移与错误配置检测平台
**赛道:** 配置治理与风险管理
**状态:** 黑客马拉松原型 — 功能完备,已完成端到端验证
## 📖 目录
1. [问题所在](#-the-problem)
2. [AegisDrift 的功能](#-what-aegisdrift-does)
3. [架构概览](#-architecture-overview)
4. [技术栈](#-tech-stack)
5. [核心创新](#-key-innovations)
6. [数据集与数据生成](#-dataset--data-generation)
7. [快速开始设置](#-quick-start-setup)
8. [仪表板指南](#-dashboard-walkthrough)
9. [开发过程中发现并修复的 Bug](#-bugs-found--fixed-during-development)
10. [已知局限与范围限制](#-known-limitations--scope-restrictions)
11. [未来增强](#-future-enhancements)
12. [合规框架对齐](#-compliance-framework-alignment)
13. [仓库说明](#-repository-notes)
14. [验证状态](#-verified-state)
## 🔍 问题所在
大型企业通常运行着 200 多项涵盖云基础设施(AWS、Azure)、本地防火墙、终端 agent 和身份平台的安全控制。每项控制都有一个明确的**基线** —— 即安全、已批准的配置。但是每天,部署、热修复、自动伸缩事件和人工干预都会改变这些配置。大多数变更都是无害的。有些则会悄悄削弱安全性。当无人察觉时,这种无声的漂移就会成为漏洞利用的途径。
**本问题所针对的真实事件模式:**
- 一条自动部署流水线将数据库加密算法从 AES-256 降级为 AES-128。由于该流水线已预先获批,因此未触发任何告警。4 个月后在合规审计中才发现该问题。
- 一名工程师在凌晨 2:47 禁用了 CloudTrail 日志记录,声称“为了在调试时减少噪音”,事后却忘记重新启用。攻击者趁此盲区窃取了数据 —— 当时不存在任何审计追踪记录。
- 为了进行供应商集成,一项防火墙规则被“暂时”放宽。两年后,该端口依然处于开放状态,外部扫描工具发现了一个暴露的管理控制台。
- 补丁冲突后,30 台服务器上的终端安全 agent 被静默禁用,但仪表板仍显示“100% 覆盖率”,因为该 agent 仅上报了“已安装”状态,却未检查其是否真正在*运行*。
**为何此问题棘手:** 配置每天变更 100 多次,且大多数变更是合法的(CI/CD 部署、自动伸缩、已批准的维护)。真正的挑战不在于检测*是否*发生了变更,而在于区分正常噪音与危险漂移,并识别出几个原本单独看可以忽略的变更如何叠加成一条真实的攻击路径(例如:在同一短时间窗口内,由同一执行者禁用了日志记录 + 放宽了防火墙 + 降级了加密)。
## 💡 AegisDrift 的功能
AegisDrift 会摄取并规范化跨三个域的控制状态,学习基线配置,检测并确定高风险漂移的优先级,将相关事件关联为复合事件,将违规行为映射至合规框架,并生成可解释、按步骤排列的修复指导 —— 所有这些都通过实时的 SOC 风格仪表板呈现。
**核心能力:**
- 基于规则的漂移检测,结合严重性加权评分
- 基于 ML 的异常检测,捕获规则遗漏的情况
- 生存分析,预测“临时”变更是否会转为永久变更
- 跨域关联,形成复合事件
- 基于图的爆炸半径 / 攻击路径分析
- 从分析师决策中学习的自适应反馈循环
- LLM 生成的事件叙述,包含 MITRE ATT&CK 映射和修复步骤
- 针对安全数据的自然语言搜索
- 映射至 NIST、CIS 和 GDPR 的合规对标
## 🏗️ 架构概览
```
+-----------------------------------+
| React SOC Dashboard |
| (Vite + TypeScript + Tailwind) |
+-----------------+-------------------+
| (proxied via /api)
v
+-----------------------------------+
| FastAPI REST API |
| (backend/main.py + SQLite) |
+--------+--------+--------+---------+
| | |
+-----------------+ | +-----------------+
v v v
+------------------+ +------------------+ +------------------+
| Drift Engine | | ML Anomaly | | Graph Engine |
| (detector.py) | | (anomaly_det.py) | | (correlation.py) |
+------------------+ +------------------+ +------------------+
```
后端和前端通过代理的 REST API(`/api/*`)进行通信,所有状态均持久化存储在 SQLite 中。
## 🧰 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | FastAPI、Python、SQLAlchemy |
| 数据库 | SQLite |
| 机器学习 | scikit-learn (Isolation Forest) |
| 生存分析 | lifelines (Kaplan-Meier) |
| 图分析 | NetworkX |
| LLM 集成 | Anthropic Claude API(包含脱机安全的后备叙述) |
| 前端 | React、TypeScript、Vite |
| 样式 | Tailwind CSS |
| 图表 | Recharts |
*(特意将规模限定在黑客马拉松体量的技术栈内 —— 关于生产版本需要增加的内容,请参阅 [已知局限](#-known-limitations--scope-restrictions)。)*
## 🚀 核心创新
以下是将 AegisDrift 与简单的差异比对告警工具区分开来的功能:
### 1. 针对临时漂移的生存分析
大多数工具将“此临时变更已过期”作为二进制标志。AegisDrift 在历史回滚模式上拟合 Kaplan-Meier 生存模型,以估算**过期的临时变更转为永久变更的概率** —— 这直接针对了现实中“1周临时”变更悄然成为永久配置的模式。
### 2. 跨域关联与爆炸半径
漂移事件按执行者和受影响系统在 2 小时的滑动窗口内进行分组。跨越 2 个或更多域(例如:日志记录 + 防火墙 + 终端)的组将被标记为**复合事件**,而非孤立的告警。NetworkX 有向图用于对资产/控制依赖关系进行建模,从而计算**爆炸半径** —— 即如果特定控制被攻破,哪些下游系统将变得可访问。
### 3. 自适应反馈循环
分析师可以批准或拒绝标记的漂移。在对同一模式多次批准后,系统会将其提议为**学习到的基线**,并自动抑制未来的匹配项 —— 从而随着时间的推移减少告警疲劳,且不会让系统对真正严重的漂移视而不见(即使获得批准,严重级别的事件也会被限制为仅能部分抑制)。
### 4. LLM 生成的事件叙述
对于每个复合事件,平台都会生成一条证据链摘要、MITRE ATT&CK 技术映射以及按步骤排列的修复步骤(例如,先修复日志记录,然后修复防火墙,最后修复加密)。已知的事件模式使用预先编写、在演示中稳定的叙述;对于未知事件,则会触发实时的 Anthropic API 调用,并在不可用时提供安全的后备方案。
### 5. 自然语言安全搜索
分析师可以使用纯英文进行查询(例如 "what did developer-charlie change"、"critical drifts from the last 24 hours"),而无需学习查询语法;如果 LLM 调用失败,则提供基于关键字匹配的后备方案。
## 📊 数据集与数据生成
由于问题说明中没有提供预构建的数据集,AegisDrift 包含了一个合成数据生成器(`backend/data_generator.py`),可生成逼真的 90 天模拟环境:
| 数据 | 数量 |
|---|---|
| 基线控制 | 70 项,涵盖 Cloud、Logging 和 Endpoint 域 |
| 变更事件 | 600 条,覆盖 90 天的模拟时间窗口 |
| 资产 | 14 台服务器,分布在 prod、staging 和 dev 环境中 |
| 变更请求 | 带有回滚截止时间的已批准工单 |
| 维护窗口 | 定期每周窗口 + 基于日历的窗口 |
**达成的异常组合(已验证):**
- ~6% 严重风险漂移(例如,禁用日志记录、降级加密)
- ~10% 高风险漂移(例如,放宽防火墙、禁用防篡改保护)
- ~12% 中等风险漂移
- ~45% 良性变更(已批准的 CI/CD、自动伸缩、维护)
- ~12% 模糊漂移(已批准的临时变更已过期)
- ~15% 基线匹配(无漂移)
**3 个精心设计的“典型”攻击场景**,每个场景在同一时间窗口内都伴随着逼真的良性近似噪音,因此关联引擎必须真正从噪音中甄别出信号:
1. **横向移动** — 通过被盗的开发者密钥,禁用日志记录 + 公开开放 SSH 端口 22 + 停止终端 agent。
2. **勒索软件准备** — 通过被盗的服务账户,停止终端 agent + 加密降级为 AES-128 + 公开开放 RDP 端口 3389。
3. **数据外泄窗口** — 通过恶意的管理员账户,禁用 CloudTrail + 公开开放数据库端口 + 禁用防篡改保护。
**关联引擎还自然检测到了 3 起额外的事件**(非预设脚本),涉及重复出现的执行者模式 —— 这是一个强有力的信号,表明关联逻辑能够推广到硬编码场景之外。
时间戳包含逼真的集群效应(工作时间加权、部署高峰期),而非均匀随机分布,这使得时间关联逻辑有真实的结构可供分析。
## ⚡ 快速开始设置
### 前置条件
- Python 3.10+
- Node.js 18+
### 1. 后端设置
在项目根目录下:
```
pip install -r requirements.txt
```
**重要:** 请务必在 `backend/` 目录*内*运行后端 —— 其模块使用直接导入,且并未被打包为可安装的包。
```
cd backend
uvicorn main:app --host 127.0.0.1 --port 8000 --reload
```
验证其是否正在运行:
```
http://127.0.0.1:8000/api/health
```
交互式 API 文档:`http://127.0.0.1:8000/docs`
*项目自带预填充的 SQLite 数据库(`backend/dev.db`),因此无需运行任何设置脚本即可立即获取数据。*
### 2. 前端设置
在单独的终端中:
```
cd frontend
npm install
npm run dev
```
打开 [http://localhost:3000](http://localhost:3000)。
### 3.(可选)启用实时 LLM 调用
默认情况下,已知事件使用预先编写的叙述,未知事件则回退到通用模板 —— 即便没有任何 API 密钥,应用程序也能完全正常运行。若要针对未知事件启用实时 Claude 生成的叙述:
```
# macOS/Linux
export ANTHROPIC_API_KEY="your-key-here"
# Windows PowerShell
$env:ANTHROPIC_API_KEY = "your-key-here"
```
请在启动 `uvicorn` *之前*进行设置。
### 4.(可选)重新生成数据集
若要清除并重新生成整个模拟环境,请在 `backend/` 目录内,严格按照以下顺序执行:
```
python seed_db.py
python run_detector.py
python run_ml.py
python run_correlation.py
```
预期的最终状态:检测到 498 项漂移(137 项被抑制),6 起复合事件,67 项带有生存评分的临时漂移。
## 🖥️ 仪表板指南
| 页面 | 显示内容 |
|---|---|
| **SOC 概览** | 实时健康评分、活跃事件数、抑制效率、按域划分的风险分布 |
| **控制健康** | 每个资产/域的合规矩阵(通过 / 降级 / 失败) |
| **漂移时间线** | 按时间顺序排列、可过滤的漂移日志,对临时变更提供 Kaplan-Meier“转为永久变更的可能性(%)”评分 |
| **复合事件** | 深入查看关联的多域事件,包含 LLM 叙述、MITRE 映射和修复步骤 |
| **合规态势** | NIST / CIS / GDPR 对齐记分卡 |
| **自适应基线** | 误报减少趋势和有效的学习抑制规则 |
| **网络攻击图** | 交互式拓扑图 —— 点击节点查看下游爆炸半径 |
| **AI 搜索** | 针对所有漂移数据的自然语言查询界面 |
## 🐛 开发过程中发现并修复的 Bug
透明地记录下来,因为这些反映了真实的工程迭代,而不仅仅是首次构建:
1. **批准操作清除了 ML/生存数据** — 批准漂移此前会触发对所有漂移记录的全部删除并重建,导致丢失所有 Isolation Forest 评分和 Kaplan-Meier 预测,并静默地重新打开已解决的事件。**已修复**:重构检测器,改为原地更新现有记录。
2. **已批准的变更可能完全掩盖严重风险** — 此前,任何带有“已批准”工单的变更无论严重程度如何都会被抑制为零分 —— 这再现了问题简报中描述的失败模式(一条已批准的流水线掩盖了真实风险长达数月)。**已修复**:对高风险漂移(规则严重性 ≥ 8)的抑制程度进行封顶,仅提供部分折扣,并且无论批准状态如何,都将高风险事件排除在 ML 训练数据之外。
3. **硬编码的绝对文件路径** — 数据库和种子生成脚本最初使用的是特定于机器的 Windows 路径。**已修复**:改用相对于脚本位置的路径,以实现完全的可移植性。
4. **关联引擎创建了低价值的“复合事件”** — 分组未按严重性进行过滤,因此常规的被抑制变更可能会与一项真实的漂移捆绑在一起,并被标记为“复合事件”。**已修复**:在事件组被判定为复合事件之前添加了最低的组合风险阈值。
5. **相对时间搜索查询使用了错误的时钟** — 类似于 "last 24 hours" 的自然语言查询是针对真实的系统时钟计算的,而不是数据集的模拟时间线,因此返回了零结果。**已修复**:引入了一个共享的 `SIMULATED_TODAY` 常量,在生存分析和搜索过滤中保持一致地使用。
6. **跨平台 zip 打包问题** — 早期提交的压缩包存储了 Windows 风格的反斜杠路径,这在 macOS/Linux 上解压时会静默失败,无法创建文件夹。**已修复**:通过明确使用正斜杠路径分隔符生成压缩包。
## ⚠️ 已知局限与范围限制
这是一个黑客马拉松原型,为了赶时间特意缩小了范围。如实记录如下:
- **仅支持 3 个控制域**(Cloud、Logging、Endpoint)— Azure、Okta、Kubernetes 和 GitHub Actions 已被排除在范围之外;但数据模型已结构化,未来可以添加它们。
- **使用 SQLite,而非 PostgreSQL** — 足够用于演示,但不适用于并发的多用户生产负载。
- **无身份验证/授权层** — 超出了黑客马拉松原型的范围;但在任何实际部署之前是必须添加的。
- **模拟数据,而非实时集成** — 所有遥测数据均为合成生成,并非从真实的云/安全 API 获取。
- **分析页面上的趋势图仅供说明** — 30 天健康趋势和误报减少曲线是演示数据,并非源自长期的实际运行部署。
- **Kaplan-Meier 生存模型是在模拟的历史租约数据集上拟合的**(80 个已回滚 / 40 个仍处于活跃状态的样本),而非基于多年的真实组织历史。
- **已知事件模式使用预写叙述** — 确保演示的可靠性;只有新颖/自然发生的事件才会调用实时 LLM 调用。
- **关联使用固定的 2 小时时间窗口和简单的执行者+资产分组**,而非事件之间更复杂的因果推断。
- **无自动化修复** — 平台仅建议并对修复进行排序,但不会直接应用修复。
## 🔮 未来增强
明确规划为路线图,尚未实现:
- **多云扩展** — Azure NSG、GCP、Kubernetes、GitHub Actions、Okta,通过跨供应商控制本体进行统一,以便将等效的控制(例如 AWS Security Groups、Azure NSG 与 Palo Alto 规则)识别为同一概念。
- **自主修复** — 在严格的护栏下自动回滚低风险、预先获批的漂移类别,并在超过一定严重性阈值时强制要求人工批准。
- **威胁情报融合** — 将漂移与实时 CVE 订阅源和已知的入侵指标相关联,以动态调整风险评分。
- **因果/贝叶斯关联** — 用基于条件概率的关联代替简单的时间窗口分组,以更好地区分巧合事件与协调的多域活动。
- **生产级数据层** — PostgreSQL、适当的 authn/authz、审计日志、多租户支持。
- **可解释 AI 层** — 呈现驱动每个 ML 异常标志的具体特征,以增强分析师信任度和审计可辩护性。
- **执行者级别的风险画像** — 追踪哪些个人、流水线或服务账户在历史上导致了最多的严重漂移,从而优先安排培训或自动化护栏。
- **基础设施数字孪生** — 一个安全的模拟环境,用于在应用配置变更之前对其进行测试。
## 📋 合规框架对齐
每个漂移事件和复合事件都会映射至:
- **NIST SP 800-53** — CM-2 (基线配置)、CM-3 (配置变更控制)、CM-6 (配置设置)、SI-4 (信息系统监控)
- **CIS Benchmarks** — 涵盖云、终端和网络域的安全配置管理
- **MITRE ATT&CK** — T1562 (削弱防御)、T1556 (修改身份验证过程)、T1036 (伪装)、T1021 (远程服务)、T1048 (数据外泄)
- **GDPR** — 第 32 条 (处理安全)、第 25 条 (设计和默认的数据保护)
## 📦 仓库说明
以下内容已通过 `.gitignore` 明确排除,并会自动重新生成:
- `frontend/node_modules/` — 通过 `npm install` 恢复
- `backend/__pycache__/` 和 `backend/ml/__pycache__/` — 运行时自动重新生成
- 任何虚拟环境文件夹(例如,`.venv/`、`env/`)
`backend/dev.db` 作为预填充快照包含在内,因此克隆后仪表板会立即显示真实数据,而无需首先运行设置脚本。
## ✅ 验证状态
- 从 600 个模拟的变更事件中检测到 498 项漂移,137 项被抑制(抑制率为 27.5%)
- 6 起关联的复合事件(3 起预设脚本 + 3 起自然检测到)
- 67 项带有 Kaplan-Meier 生存评分的临时漂移
- 完整的流水线(seed → detect → ML → correlate)已在全新克隆中测试通过
- 后端和前端均已独立验证,实现了端到端运行
标签:Apex, DLL 劫持, 云安全态势管理, 前端应用, 图数据分析, 大语言模型, 安全合规, 异常检测, 机器学习, 特权检测, 网络代理, 自动化攻击, 逆向工具