基于CICIDS2017数据集的网络入侵检测实战:从特征工程到模型优化

1次阅读
没有评论

共计 1586 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景与数据集价值

在网络安全领域,高质量的标注数据集是训练有效入侵检测系统的关键。CICIDS2017 由加拿大网络安全研究所发布,包含真实的网络流量和标注的攻击类型(如 DDoS、Brute Force 等),其价值主要体现在:

基于 CICIDS2017 数据集的网络入侵检测实战:从特征工程到模型优化

  • 真实性:采集自真实网络环境,包含正常流量和多种攻击模式
  • 全面性:覆盖网络层到应用层特征(如流量包长、协议类型、TCP 标志位等)
  • 时效性:相比 KDD99 等老旧数据集,更能反映现代网络威胁

但原始数据存在两个主要问题:

  1. 严重类别不平衡:正常流量占比 78.5%,而 Web 攻击仅 0.03%
  2. 特征冗余:80 个特征中存在高度相关性特征(如 Flow DurationTotal Packets

技术实现方案

PySpark 特征工程

使用 PySpark 处理原始 PCAP 文件,关键步骤包括:

from pyspark.sql import functions as F

# 会话重建(按源 / 目的 IP+ 端口分组)df_session = df.groupBy(
    'Source IP', 'Destination IP', 
    'Source Port', 'Destination Port'
).agg(F.count('Packet Length').alias('packet_count'),
    F.mean('Packet Length').alias('avg_packet_size'),
    # 其他统计特征...
)

特征选择对比

针对高维特征,我们测试三种方法:

  1. 卡方检验:适合离散型特征,但忽略特征间交互
  2. 互信息:能捕捉非线性关系,计算成本较高
  3. 递归特征消除(RFE):依赖基模型性能,效果稳定

实验结果显示,RFE+XGBoost 组合取得最佳 AUC(0.992)

样本均衡处理

采用 SMOTE-ENN 混合策略:

from imblearn.combine import SMOTEENN

smoenn = SMOTEENN(
    sampling_strategy='minority',
    random_state=42
)
X_res, y_res = smoenn.fit_resample(X, y)

模型训练与评估

XGBoost 实现

import xgboost as xgb

params = {
    'max_depth': 6,
    'learning_rate': 0.1,
    'objective': 'binary:logistic'
}
dtrain = xgb.DMatrix(X_train, label=y_train)
model = xgb.train(
    params, dtrain,
    early_stopping_rounds=10,
    evals=[(dtest, 'eval')]
)

LSTM 时序建模

网络流量本质是时间序列,LSTM 的优势在于:

  • 自动学习长期依赖(如 DDoS 攻击的脉冲模式)
  • 处理变长流量会话(通过 Padding 解决)
  • 端到端训练避免手工特征偏差

安全指标聚焦

在入侵检测中需特别关注:

  • False Positive Rate (FPR 误报率):避免正常流量被误判
  • False Negative Rate (FNR 漏报率):防止攻击被漏检

我们的最佳模型达到 FPR<0.5% 且 FNR<2%。

生产环境建议

特征漂移监控

部署后需持续监测:

  • 特征分布变化(KS 检验)
  • 预测置信度下降
  • 新出现的攻击模式(通过聚类分析)

模型解释性

使用 SHAP 分析特征重要性:

import shap

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_sample)
shap.summary_plot(shap_values, X_sample)

资源与复现

完整代码已发布在 Colab:[项目链接]
数据集下载地址:[CICIDS2017 官网]

通过本方案,我们实现了可解释、低误报的入侵检测系统。未来可探索图神经网络(GNN)对网络拓扑的建模能力,进一步提升检测精度。

正文完
 0
评论(没有评论)