KumarVishal91/AI-Powered-Behavioral-Anomaly-Detection-for-CyberSecurity
GitHub: KumarVishal91/AI-Powered-Behavioral-Anomaly-Detection-for-CyberSecurity
面向网络安全的行为异常检测系统,通过 Isolation Forest 无监督基线评分与 Random Forest 监督分类相结合,并借助 SHAP 提供可解释告警,帮助 SOC 分析师从海量事件中高效发现和分类细微异常行为。
Stars: 0 | Forks: 0
# 面向网络安全的 AI 行为异常检测
一个 AI 系统,通过学习每个用户和服务账户的“正常”行为特征,对任何偏离该特征的
活动进行标记、分类和解释,从而检测入侵和凭证被盗用等异常活动。
本项目作为完整的 SOC(安全运营中心)分析师工作流构建:
数据生成 → 特征工程 → 检测 → 分类 →
解释 → 仪表盘。
## 面临的问题
大多数现实世界中的安全漏洞看起来并不像是黑客破门而入——它们看起来更像是一次
*来自稍微异常地点的有效登录*,一个服务账户突然运行了它从未运行过的命令,或者
一个用户在凌晨 3 点访问了某项资源,而他们以前从未在非工作时间工作过。单独来看,
这些事情都不能说明任何问题。异常检测的难点不在于发现明显恶意的活动——而在于
在海量的数千个账户中,从单个实体自身的正常模式中发现细微的偏差,同时不产生
过多的误报,以免分析师开始忽略每一个警报(这是安全行业中一个非常现实的问题,
被称为“警报疲劳”)。
这带来了本项目旨在解决的四个具体挑战:
1. **没有关于“正常”的统一定义。** 对某位员工来说正常的行为(例如,因为出差
每周从三个不同的国家登录)对另一位员工来说则是高度异常的。一刀切的规则
(“标记所有来自美国以外的登录”)要么会产生过多的误报,要么会漏掉真实的威胁。
2. **带标签的攻击数据非常稀缺。** 当你只有少数几个已确认的历史案例时,你无法
训练一个纯监督模型来识别“内部威胁”——真实的攻击很少见,而且打标签的成
本很高。你的大部分数据只是正常的、无标签的活动。
3. **冷启动。** 一个全新的员工账户或新配置的服务账户根本没有历史记录。它仍然
需要从第一天起就受到监控,但目前还没有任何东西可以与它进行比较。
4. **黑盒警报无法被采取行动。** 一名收到“风险评分:87”但没有给出任何解释的
分析师必须手动挖掘日志来弄清楚*为什么*——这既缓慢又容易出错。警报需要
能够自我解释。
本项目通过两阶段模型设计以及可解释性来解决上述所有四个问题,具体如下。
## 解决方案(两个模型,而非一个)
### 阶段 1 — 基线异常评分(无监督)
在来自*所有*事件的行为特征上训练 **Isolation Forest**,不使用任何标签。Isolation Forest 的工作原理
是随机划分数据,并测量需要多少次分割才能隔离出给定点——根据定义,异常是
“少而不同”的,因此它们比正常点能在更少的分割中被隔离出来。这为每个事件提供了
一个 **0–100 的风险评分**,纯粹基于它与整个群体相比在统计上有多异常。
这解决了问题 #2(不需要标签)和问题 #3(冷启动)——一个全新的实体的第一个事件
仍然会与全局群体基线进行评分比较,即使它自身没有任何历史记录。
### 阶段 2 — 异常类型分类(监督)
一旦基线模型对事件进行了标记,**Random Forest 分类器**——仅在(相对较少的)
已确认异常集合上进行训练——就会预测*七种攻击类别中的哪一种*它与最相似:
| 类别 | 通常的表现形式 |
|---|---|
| Brute force | 短时间窗口内出现大量失败/快速的认证尝试 |
| Impossible travel | 在上一次登录后极短的时间内从新位置登录,这在物理上是不可能的 |
| Credential stuffing | 在多个账户中尝试使用重用/泄露的凭证 |
| Lateral movement | 实体访问了远远超出其正常足迹的资源 |
| Device spoofing | 声称登录的设备指纹是该实体从未使用过的 |
| Low-and-slow exfiltration | 随着时间推移分散进行低于阈值的渐进式数据访问,以逃避检测 |
| Insider drift | 合法账户的行为缓慢地偏离其自身的基线 |
Ground-truth 标签**仅用于训练和评估此分类器**——在生产场景的推理阶段绝不会作为
输入使用,因为真实的攻击者显然不会宣布他们的攻击类别。
### 阶段 3 — 可解释性 (SHAP)
对于每个被标记的事件,针对分类器计算 **SHAP (SHapley Additive exPlanations)** 值,
以准确显示是哪些输入特征推动了预测,以及推动了多少。这将“风险评分:87”变成了
**“被标记原因:新设备 (+18),非工作时间访问 (+12),不可能的旅行 (+9)”**——
通过让每个警报自我解释而不是要求手动挖掘日志,直接解决了问题 #4。
## Tech Stack
| 层级 | 工具 | 原因 |
|---|---|---|
| 数据生成 | Python (`pandas`, `numpy`) | 以可控且已知的每种攻击类型注入率,模拟真实的实体级行为档案——这使得评估成为可能(没有真实标签,你就无法衡量检测率) |
| 特征工程 | `pandas` | 将原始事件日志转换为因果的、实体级的滚动特征(见下文) |
| 基线模型 | `scikit-learn` — `IsolationForest` | 无监督异常评分;无需标签,处理冷启动 |
| 分类器 | `scikit-learn` — `RandomForestClassifier` | 通过 `class_weight="balanced"` 很好地处理类不平衡,在有限数据下表现稳健,并且与 SHAP 的 `TreeExplainer` 天然契合 |
| 可解释性 | `shap` | 每个警报的特征归因;如果未安装 `shap` 则回退到加权特征重要性,确保仪表盘永远不会崩溃 |
| 预处理 | `scikit-learn` — `StandardScaler` | 在 Isolation Forest 之前对特征进行标准化,因为它是基于距离/分割的 |
| 序列化 | `joblib` | 将训练好的模型保存到磁盘,这样仪表盘就不会在每次加载时重新训练 |
| 仪表盘 | `Streamlit` | 快速、纯 Python 的方式来构建一个具有过滤、图表和下钻功能的交互式分析控制台——无需单独的前端 |
| 编排 | `pipeline.py` | 运行端到端整个流程并生成适合仪表盘使用的产物的单一入口点 |
## 特征工程 — 系统的核心
正是这些特征使得系统真正具备“行为”特征,而不仅仅是基于规则。每个特征的计算都是
**因果性**的——仅使用特定实体在当前事件*之前*发生的数据——因此不存在来自未来的
数据泄漏,系统也保持了对生产流式场景的适用性。关键特征包括:
- **时间**:一天中的小时、星期几、事件是否发生在非工作时间窗口
- **新颖性标志**:对于*该特定实体的历史*而言,这是否是一个新 IP、新地理位置、新资源或新设备(MAC/指纹)?
- **Impossible travel**:地理速度检查——与上一个事件相比,位置不同,且在
难以置信的极短时间间隔内发生
- **行为偏差**:会话持续时间表示为相对于该实体自身滚动平均值和标准差的 z-score(前提是存在足够的历史数据)
- **命令模式**:运行的命令数量,以及序列中是否出现任何特权/高风险命令(提权、删除、配置更改、导出)
- **累积上下文**:该实体迄今为止拥有多少个会话,以及历史上其资源访问的多样性如何
这种实体级、滚动历史的设计使得模型具备“序列感知”能力——对个体随时间变化的模式
很敏感——而无需在生产环境中使用完整的序列模型(如 LSTM)。
## 快速开始
```
pip install -r requirements.txt
python pipeline.py # generates data, trains models, scores everything
python -m streamlit run dashboard/app.py # launches the analyst dashboard
```
在 `pipeline.py` 至少运行一次之前,仪表盘将无法加载——
它需要存在 `data/scored_baseline.csv`(来自 `models/baseline_model.py`)和
`models/classifier_model.joblib`(来自 `models/classifier_model.py`)。
## 架构
```
data/generate_synthetic_data.py → per-entity behavioural profiles + injected
attack patterns at a controlled ~1.5% rate
models/feature_engineering.py → causal, per-entity rolling features
(new IP? new geo? off-hours? command
pattern deviation?)
models/baseline_model.py → Isolation Forest: unsupervised "how normal
is this event for this entity" risk score
models/classifier_model.py → Random Forest: supervised "which anomaly
type does this resemble", + SHAP-based
per-alert feature attribution
pipeline.py → runs the whole flow end-to-end and saves
dashboard-ready artifacts
dashboard/app.py → Streamlit analyst console: ranked alert
queue, entity investigation view,
detection-rate-vs-budget curve,
model health panel
```
## 使用不同参数重新生成数据
```
python data/generate_synthetic_data.py --n_entities 500 --days 45 --anomaly_rate 0.02 --out data/access_logs.csv
python pipeline.py
```
## 结果
来自流水线在合成数据集上的实际运行结果:
**基线模型**
- 正常事件的平均风险评分:**23.8** / 100
- 真实异常的平均风险评分:**74.7** / 100 —— 分离明显,确认了无监督模型捕捉到的是真实的信号而非噪声
- 在 1% 警报预算下的检测率:**捕获了 203 / 347 个已知异常(约 58.5%)** —— 意味着如果分析师每天只能审查风险最高的前 1% 的事件,他们仍然能捕获超过一半的真实异常,而无需任何标签进行训练
**分类器**
- 总体准确率:在 87 个保留测试事件上达到 **98%**
- Macro F1(在所有 7 种异常类型中平均计算,因此稀有类别的权重与常见类别相同):**0.986**
- 各类别性能:
| 异常类型 | Precision | Recall | F1 | Support |
|---|---|---|---|---|
| Brute force | 1.00 | 0.93 | 0.96 | 28 |
| Credential stuffing | 0.88 | 1.00 | 0.94 | 15 |
| Device spoofing | 1.00 | 1.00 | 1.00 | 2 |
| Impossible travel | 1.00 | 1.00 | 1.00 | 3 |
| Insider drift | 1.00 | 1.00 | 1.00 | 17 |
| Lateral movement | 1.00 | 1.00 | 1.00 | 15 |
| Low-and-slow exfiltration | 1.00 | 1.00 | 1.00 | 7 |
该分类器在此合成数据集上表现接近完美,这是符合预期的——
注入的模式比真实世界的流量更干净(参见下文的*已知局限性*)。唯一的薄弱环节是
**Credential stuffing**,其精确率降至 0.88,这意味着一些非凭证填充事件被
错误地归类到该类别下——这很合理,因为 Credential stuffing 和 Brute force 具有重叠的
行为特征(快速、重复的认证尝试)。
*注意:如果你使用不同的随机种子或不同的 `--anomaly_rate` 重新生成合成数据,
具体数字会略有不同。*
## 如何解读结果
- **检测率** —— 在所有已知的注入异常中,基线模型在给定的“警报预算”(例如
风险最高的前 1% 事件)内捕获了多大比例?这模拟了每天只能审查有限数量警报的
真实分析师。
- **误报率** —— 在所有被标记的事件中,实际上有多少比例是正常的?如果太高,
分析师就会停止信任该系统。
- **Macro F1(分类器)** —— 在所有七种异常类型中进行平均,因此稀有类别(如
Device spoofing)不会在分数中被常见类别淹没。
## 已知局限性
- **冷启动**:全新的实体没有历史记录,因此早期事件会与全局群体基线进行评分,
直到它们积累了自身的行为档案(约 5–10 个会话)。
- **概念漂移**:合法的角色变更在一段时间内可能类似于“Insider drift”;模型目前
不会自动衰减陈旧的“正常”状态。
- **类不平衡**:罕见的异常类型(例如 Device spoofing)的训练样本非常少,
因此分类器在这些类别上的置信度较低。
- **合成数据**:注入的模式比真实世界的噪声更干净——预计在真实流量上的误报率
将高于此处显示的结果。
## 可能的扩展
- 将 Isolation Forest 替换为基于每个实体会话历史的序列模型(LSTM/GRU/Transformer),
以进行真正的时间模式学习。
- 添加实体-资源访问的图视图,以捕获单个事件特征遗漏的 Lateral movement。
- 流式/在线评分(例如,通过 Kafka + 滚动特征存储),用于实时部署,而不是批量评分。
标签:Apex, Kubernetes, 人工智能, 安全运营中心, 异常分析, 机器学习, 用户模式Hook绕过, 网络安全, 网络映射, 行为异常检测, 逆向工具, 隐私保护