← 返回 Day 121 正文

Day 121 · 图解

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