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绕过, 网络安全, 网络映射, 行为异常检测, 逆向工具, 隐私保护