文件存储日志中的异常检测:孤立森林、CatBoost与自编码器
机器学习能有效识别文件存储日志中的威胁,这些日志每天记录数百万次读取、写入和删除操作。三种算法——孤立森林、CatBoost和自编码器——分析用户活动的多维时间序列,无需标注数据即可区分正常行为与可疑模式。
数据被聚合到时间间隔中:针对每个时段,按类型统计操作强度。这生成一个特征向量,其中的偏差信号可能指示内部复制或大规模加密。
孤立森林:用随机性隔离异常
孤立森林通过随机分割特征构建树集成。异常被更快隔离,因为其特征与大多数显著不同。该算法是无监督的:无需标注,专注于从根到叶的路径。
from sklearn.ensemble import IsolationForest
if_model = IsolationForest(n_estimators=100, contamination=0.05, bootstrap=False, random_state=42)
对于时间序列,添加滞后特征:
data['prev_10min'] = (data.rolling(window='10min', min_periods=1)['events'].sum()).astype(int)
data['prev_5min'] = (data.rolling(window='5min', min_periods=1)['events'].sum()).astype(int)
data['prev_3min'] = (data.rolling(window='3min', min_periods=1)['events'].sum()).astype(int)
关键超参数:
- n_estimators:准确性与速度的平衡
- contamination:预期异常比例(0.05)
- max_samples:子样本大小(默认256)
- bootstrap:False以增加多样性
通过decision_function计算的anomaly_score被归一化为[-0.5, 0.5]。值 < -0.25为确信异常:
data['anomaly'] = np.where(if_model.decision_function(data[['events', 'prev_3min', 'prev_5min', 'prev_10min']]) > -0.25, 0, 1)
SHAP分析显示10分钟滞后占主导。优势:
- O(n log n)复杂度,适合实时处理
- 在CPU上运行,无需存储数据
- 易于部署
CatBoost用于预测正常活动
CatBoostRegressor在历史数据上训练,以预测预期强度。异常发生在|实际值 - 预测值|超过阈值时。
from catboost import CatBoostRegressor
model = CatBoostRegressor()
expected_value = model.predict()
anomaly_score = abs(actual_value - expected_value)
数据拆分方案:
- 训练(3周):正常活动
- 验证(1周):调优
- 测试(2天):异常
特征扩展上下文:
- 时间:星期几、小时
- 滞后:1小时、30分钟、10分钟、5分钟、3分钟内的事件
- 滚动:3/7天内的均值/标准差/分位数(0.8)
滚动统计计算无泄漏:
# 滚动统计
data['week_mean'] = round(data.rolling(window=7, min_periods=1)['events'].mean(), 2)
滚动学习每天在全历史池上更新模型。
自编码器:压缩与重构
神经自编码器将正常序列压缩到潜在空间,而异常重构效果差(高重构误差)。
架构:LSTM/GRU编码器 + 解码器。在正常数据上训练最小化MSE。误差阈值确定异常。
对序列的优势:捕捉长期依赖。缺点:需要GPU,对超参数敏感。
方法比较:
| 模型 | 速度 | 可解释性 | 资源 | 适应趋势 |
|--------|----------|--------------------|---------|---------------------|
| 孤立森林 | 高 | SHAP | CPU | 滞后 |
| CatBoost | 中 | 特征重要性 | CPU/GPU | 滚动学习 |
| 自编码器 | 低 | 注意力 | GPU | 序列 |
关键要点
- 孤立森林在实时应用中速度和成本效益领先
- CatBoost通过扩展特征在预测趋势上准确
- 自编码器在复杂序列上表现出色但资源密集
- 所有模型都是无监督的:无需标注即可工作
- 结合滞后和滚动统计将准确性提高15-20%
SIEM集成:模型在线更新,异常分数 > 阈值时触发警报。在合成异常上测试确认所有模型F1分数 > 0.85。
— Editorial Team
暂无评论。