benderla/network-attack-detection
GitHub: benderla/network-attack-detection
基于Isolation Forest无监督学习算法的网络流量异常检测项目,无需预定义攻击特征即可从大规模网络流中识别可疑流量模式。
Stars: 0 | Forks: 0
一个机器学习项目,利用
Isolation Forest 在 CIC-IDS2017 网络安全数据集上检测异常网络流量。
# 使用 Isolation Forest 进行网络攻击检测
机器学习 | 网络安全 | 网络异常检测 | Python
## 项目概述
该项目模拟了安全分析师如何在不依赖预定义攻击特征的情况下发现异常网络活动。
展示的关键能力:
• 大规模网络流分析(约 70 万条流)
• Isolation Forest 异常检测
• 网络指标的特征重要性分析
• 可疑流量模式可视化
• SOC 风格的异常调查工作流
本项目探索了使用 CIC-IDS2017 入侵检测数据集识别可疑网络流量的机器学习技术。
目标是演示异常检测模型如何识别偏离正常行为并可能表明恶意活动的网络流量。
## 示例可视化
下面是一个异常检测结果的示例,突出了模型识别出的最可疑网络流。

## 动机
网络安全分析师必须在海量的流量数据中识别恶意活动。传统的基于规则的系统难以检测新型攻击。本项目探讨了异常检测是否能在不依赖预定义特征的情况下揭示可疑活动。
## 技术
- Python
- Pandas
- NumPy
- Scikit-learn
- Matplotlib
- Jupyter Notebook
## 检测流程
CIC-IDS2017 数据集
↓
数据清洗与特征选择
↓
Isolation Forest 模型
↓
异常评分
↓
最可疑网络流
↓
安全调查
## 数据来源
Canadian Institute for Cybersecurity (CIC)
CIC-IDS2017 入侵检测数据集
https://www.unb.ca/cic/datasets/ids-2017.html
## 数据集
CIC-IDS2017 入侵检测数据集
CIC-IDS2017 数据集包含数百万条标记的网络流记录,既包含良性活动也包含多种网络攻击类型。
- DoS Hulk
- DoS GoldenEye
- Slowloris
- Slowhttptest
- Heartbleed
每条记录代表一个网络流,具有描述包计数、字节率、持续时间和连接行为的统计特征。
由于大小限制,数据集文件不包含在此存储库中。
下面提供了下载说明。
## 存储库内容
attack_detection_model.ipynb – 包含数据准备、模型训练、异常检测和可视化的完整笔记本。
src/ – 用于预处理和模型训练的支持脚本
outputs/ – 生成的异常检测结果和可视化
## 方法
该项目应用使用 Isolation Forest 的无监督异常检测方法,以识别偏离正常行为的网络流。
执行的步骤:
1. 加载并清洗网络流数据集
2. 在良性流量上训练 Isolation Forest 模型
3. 根据异常可能性对所有流进行评分
4. 识别最可疑的网络活动
5. 可视化异常流和可疑目标端口
## 机器学习方法
### Isolation Forest
Isolation Forest 是一种无监督异常检测算法,通过随机划分特征空间来识别离群点。
正常观测值需要许多分区才能隔离,而异常值需要较少的分割,因此能更快被检测到。
该方法非常适合大型数据集以及标记攻击数据可能有限的情况。
本项目使用的模型配置:
- n_estimators: 100
- contamination: 0.01
- random_state: 42
## 工作流
1. 数据摄取
2. 数据清洗与预处理
3. 特征分析
4. Isolation Forest 模型训练
5. 异常评分
6. 可视化与调查
## 关键发现
异常检测模型突出了与正常网络行为偏差最大的流。
对可疑流的分析显示,其模式与数据集中存在的攻击行为一致,包括异常的连接持续时间和流量速率。
端口分析有助于识别与可疑活动最相关的网络服务。
## 评估
由于模型是无监督的,因此将异常分数与数据集中的已知攻击标签进行比较,以确认检测到的流与恶意活动模式相对应。
异常检测模型的示例输出:

## 模型输出
该模型将大约 1% 的网络流标记为异常,这与训练期间使用的 contamination 参数一致。
## 运营用例
在真正的安全运营中心 (SOC) 中,此类异常检测模型用于帮助分析师优先调查网络活动。
异常检测不再仅依赖已知的攻击特征,而是突出偏离正常行为的流量模式。然后,可以将这些异常与其他遥测源相关联,例如:
• 防火墙日志
• 端点检测警报
• 身份验证事件
• 威胁情报指标
安全分析师可以查看得分最高的异常,以识别:
• 端口扫描活动
• 拒绝服务流量模式
• 异常的连接持续时间
• 异常的包大小或传输量
这种方法能够更早地检测到可能绕过传统基于规则的检测系统的前所未见或不断演变的攻击技术。
## 结果
Isolation Forest 模型成功地找出了与正常流量行为显著偏离的网络流。
关键观察结果包括:
- 数据集中与已知攻击类型相关的多个异常流
- 异常高的连接持续时间和包速率
- 特定目标端口上的集中可疑活动
## 模型性能摘要
| 指标 | 结果 |
|------|------|
| 数据集大小 | ~700,000 条网络流 |
| 模型 | Isolation Forest |
| 异常率 | 1% |
| 调查的最可疑流 | 20 |
| 检测到的攻击类型 | DoS, Slowloris, Heartbleed |
| 关键指标 | 异常包速率,长持续时间 |
## 可视化
笔记本中包含的可视化,例如:
- 最可疑网络流
- 可疑目标端口
这些可视化帮助分析师快速识别异常流量模式。
## 这为何重要
现代网络产生海量流量,使得手动分析变得不切实际。
基于机器学习的异常检测可以帮助安全分析师更早地识别可疑行为,并确定大型网络数据集内调查的优先级。
## 展示的技能
- 数据清洗与预处理
- 无监督机器学习
- 异常检测
- 探索性数据分析
- 数据可视化
- 网络安全数据分析
## 未来改进
• 结合额外的网络元数据,例如源 IP 信誉
• 应用图分析来识别可疑通信集群
• 将模型部署为实时异常检测流水线
• 将 Isolation Forest 与其他无监督模型(LOF, Autoencoders)进行比较
## 快速开始
1. 克隆存储库
git clone https://github.com/benderla/network-attack-detection.git
2. 安装依赖项
pip install pandas numpy scikit-learn matplotlib
3. 启动笔记本
jupyter notebook attack_detection_model.ipynb
## 命令行检测
该项目还包含一个简单的脚本,用于在不使用笔记本的情况下运行异常检测。
运行:
python src/run_detection.py
这将训练 Isolation Forest 模型并生成一个包含最可疑网络流的文件。
输出文件:
outputs/top_anomalies.csv
## 复现性
要复现此项目:
1. 安装 Python 3.9+
2. 安装所需的库:
pip install pandas numpy scikit-learn matplotlib
3. 打开笔记本:
attack_detection_model.ipynb
4. 按顺序运行单元格以加载数据集、训练模型并生成异常检测可视化。
## 示例代码
```
from sklearn.ensemble import IsolationForest
model = IsolationForest(
n_estimators=100,
contamination=0.01,
random_state=42
)
model.fit(X_train)
```
MIT 许可证
## 作者
Lee
标签:Apex, CIC-IDS2017, Isolation Forest, NoSQL, Python, Scikit-learn, 信安, 异常检测, 恶意流量识别, 无后门, 无监督学习, 机器学习, 流量监测, 网络安全, 网络安全数据集, 网络流量分析, 逆向工具, 隐私保护, 隔离森林