Day 121 — 异常检测与安全交叉 · 图解
Isolation Forest 算法原理
┌─────────────────────────────────┐
│ Isolation Forest 流程 │
└─────────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 原始数据 │ → │ 随机采样 │ → │ 构建隔离树 │ → │ 计算异常 │
│ │ │ (256个) │ │ (100棵) │ │ 分数 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
单棵隔离树的构建过程:
[随机特征: x, 切分点: 5.2]
│
┌─────────┴─────────┐
│ │
[x ≤ 5.2] [x > 5.2]
│ │
┌─────┴─────┐ ┌─────┴─────┐
│ │ │ │
[随机特征:y] [叶节点] [随机特征:y] [叶节点]
切分点:3.1 切分点:7.8
│ │
┌──┴──┐ ┌──┴──┐
│ │ │ │
[叶] [叶] [叶] [叶]
异常点:路径短(2-3次分割即被隔离)
正常点:路径长(需要多次分割)
异常分数计算
异常分数公式:
s(x, n) = 2^( -E(h(x)) / c(n) )
其中:
┌─────────────────────────────────────────────────┐
│ h(x) = x 的路径长度(从根到叶的边数) │
│ E(h(x)) = 多棵树的平均路径长度 │
│ c(n) = BST 平均路径长度(归一化因子) │
│ c(n) = 2H(n-1) - 2(n-1)/n │
│ H(i) = ln(i) + 0.5772 (欧拉常数) │
└─────────────────────────────────────────────────┘
分数解读:
┌──────────────────────────────────────┐
│ s → 1.0 ████████████████ 高度异常 │
│ s → 0.5 ████████ 正常 │
│ s → 0.0 ░░░░ 非常正常 │
└──────────────────────────────────────┘
网络流量异常检测流程
┌─────────────────────────────────────────────────────────┐
│ 网络流量异常检测 │
└─────────────────────────────────────────────────────────┘
原始流量 特征工程
┌────────┐ ┌──────────────┐
│ src_ip │ ┌──────────┐ │ packets │
│ dst_ip │ → │ 解析器 │→ │ bytes │
│ port │ │ │ │ duration │
│ proto │ └──────────┘ │ syn_ratio │
│ bytes │ │ byte_per_sec │
└────────┘ └──────┬───────┘
│
▼
┌──────────────────────────────────────────────┐
│ Isolation Forest │
│ │
│ 正常流量 ──→ 高异常分数 (>0) ──→ 🟢 放行 │
│ 异常流量 ──→ 低异常分数 (<0) ──→ 🔴 告警 │
└──────────────────────────────────────────────┘
常见异常模式:
┌────────────────┬──────────────────────────────┐
│ DDoS 攻击 │ 高 SYN 比 + 短持续时间 + 小包 │
│ 端口扫描 │ 大量不同目标端口 + RST 响应多 │
│ 数据泄露 │ 上行流量异常大 + 长持续时间 │
│ 暴力破解 │ 大量登录失败 + 短间隔重复请求 │
└────────────────┴──────────────────────────────┘
日志异常检测管道
┌─────────────────────────────────────────────────────────────┐
│ 日志异常检测管道 │
└─────────────────────────────────────────────────────────────┘
原始日志 解析 特征提取
┌────────┐ ┌────────┐ ┌──────────────────┐
│2024-01 │ │time │ │ total_count │
│-15 15: │ → │level │ → │ error_rate │
│23 ERROR│ │module │ │ message_entropy │
│auth ...│ │message │ │ unique_modules │
└────────┘ └────────┘ │ top_module_ratio │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ 滑动窗口 (60s) │
│ 每 10s 滑动一次 │
└────────┬─────────┘
│
▼
┌──────────────────┐
│ Isolation Forest │
└────────┬─────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 🟢 正常 │ │ 🟡 注意 │ │ 🔴 告警 │
│ 静默记录 │ │ 监控加强 │ │ 立即通知 │
└──────────┘ └──────────┘ └──────────┘
异常检测方法对比
┌─────────────────┬──────────┬──────────┬──────────┬──────────┐
│ 方法 │ 时间复杂度│ 需要标注 │ 高维友好 │ 实时性 │
├─────────────────┼──────────┼──────────┼──────────┼──────────┤
│ Isolation Forest│ O(tψlogψ)│ ❌ │ ✅ │ ⭐⭐⭐ │
│ LOF │ O(n²) │ ❌ │ ⚠️ │ ⭐⭐ │
│ One-Class SVM │ O(n³) │ ❌ │ ⚠️ │ ⭐ │
│ Autoencoder │ O(训练) │ ❌ │ ✅ │ ⭐⭐⭐ │
│ DBSCAN │ O(nlogn) │ ❌ │ ⚠️ │ ⭐⭐ │
│ 统计方法(Z-Score)│ O(n) │ ❌ │ ❌ │ ⭐⭐⭐⭐ │
└─────────────────┴──────────┴──────────┴──────────┴──────────┘
推荐选择:
通用场景 → Isolation Forest(首选)
局部异常 → LOF
序列数据 → Autoencoder / LSTM
快速筛选 → Z-Score / IQR