使用机器学习的网络攻击检测
描述
本项目利用机器学习技术对端口扫描、拒绝服务(DoS)和恶意软件等网络攻击进行分类。输入数据采用 Netflow V9 格式,这是 Cisco 使用的标准格式。
分类使用以下模型完成:
- K-最近邻(KNN)
- 带 RBF(径向基函数)核的支持向量机分类器(SVC)
- 使用主成分分析(PCA)和支持向量机分类器(SVC)的流水线
- 袋装分类器(基于 RBF 核的 SVC)
- 随机森林分类器
- 极端随机树分类器
- 神经网络(MLPClassifier)
本项目使用 Python 实现,基于 Jupyter Notebook 以及多个常用库,包括 UMAP、Pandas、NumPy、Scikit-Learn、Matplotlib 和 Seaborn。
笔记本
笔记本可通过 此处 在 GitHub 上直接查看。或者,您也可以使用 NbViewer 通过 此链接 访问笔记本。
演示文稿
PDF 格式的 Keynote 演示文稿可通过 此处 获取。
数据集
本项目使用的数据集采用 NetFlow V9 格式(由 Cisco 记录,可参见 此处)。该数据集包含两个文件:train_net.csv 和 test_net.csv。
train_net.csv 文件提供了特定告警可能发生时的信息,而 test_net.csv 文件仅用于测试目的,不包含用于评估模型性能的目标变量。
该数据集相当庞大:
train_net.csv:约 400 万个数据包(来自 14'066 个不同的网络主机)
test_net.csv:约 200 万个数据包(来自 6'186 个不同的网络主机)
数据集特征
- FLOW_ID:流的唯一标识符
- PROTOCOL_MAP:表示流中所用协议的字符串,可能的值包括 "ICMP"、"TCP"、"UDP"、"IGMP"、"GRE"、"ESP"、"AH"、"EIGRP"、"OSPF"、"PIM"、"IPV6-ICMP"、"IPV6-IP"、"IPV6-ROUTE"、"IPV6-FRAG"、"IPV6-NONXT"、"IPV6-OPTS" 等。
- L4_SRC_PORT:流中的源端口号,可能的值范围为 0 到 65535。
- IPV4_SRC_ADDR:流中的源 IPv4 地址,以点分十进制表示法的字符串形式呈现(例如 "192.168.0.1")。
- L4_DST_PORT:流中的目的端口号,可能的值范围为 0 到 65535。
- IPV4_DST_ADDR:流中的目的 IPv4 地址,以点分十进制表示法的字符串形式呈现(例如 "192.168.0.2")。
- FIRST_SWITCHED:流开始的时间,以自纪元(1970 年 1 月 1 日)以来的秒数计量。
- FLOW_DURATION_MILLISECONDS:流的持续时间,以毫秒为单位。
- LAST_SWITCHED:流结束的时间,以自纪元(1970 年 1 月 1 日)以来的秒数计量。
- PROTOCOL:流中所用的协议,可能的值包括 1(ICMP)、6(TCP)、17(UDP)等。
- TCP_FLAGS:流中设置的 TCP 标志,以二进制字符串表示(例如 "100101")。
- TCP_WIN_MAX_IN:入站流量的最大通告窗口大小(以字节为单位)。
- TCP_WIN_MAX_OUT:出站流量的最大通告窗口大小(以字节为单位)。
- TCP_WIN_MIN_IN:入站流量的最小通告窗口大小(以字节为单位)。
- TCP_WIN_MIN_OUT:出站流量的最小通告窗口大小(以字节为单位)。
- TCP_WIN_MSS_IN:入站流量的最大分段大小(以字节为单位)。
- TCP_WIN_SCALE_IN:入站流量的窗口缩放因子。
- TCP_WIN_SCALE_OUT:出站流量的窗口缩放因子。
- SRC_TOS:源 IP 地址的服务类型(ToS)值。
- DST_TOS:目的 IP 地址的服务类型(ToS)值。
- TOTAL_FLOWS_EXP:预期流的总数。
- MIN_IP_PKT_LEN:流中 IP 数据包的最小长度(以字节为单位)。
- MAX_IP_PKT_LEN:流中 IP 数据包的最大长度(以字节为单位)。
- TOTAL_PKTS_EXP:流中预期数据包的总数。
- TOTAL_BYTES_EXP:流中预期字节的总数。
- IN_BYTES:流中接收的字节数。
- IN_PKTS:流中接收的数据包数。
- OUT_BYTES:流中发送的字节数。
- OUT_PKTS:流中发送的数据包数。
- ANALYSIS_TIMESTAMP:流被分析的时间,以自纪元(1970 年 1 月 1 日)以来的秒数计量。
- ANOMALY:一个二进制标志,指示流是否包含异常(1 = 是,0 = 否)。
- ALERT:(仅训练集可用)已在当前流上检测到的攻击类型。可能的值如下:
- None:未检测到攻击
- Port scanning:该流为端口扫描攻击
- Denial of Service:该流为 DoS 攻击
- Malware:该流为恶意软件攻击
- ID:流的唯一标识符。
数据集作者
Maria-Elena Mihailescu, Darius Mihai, Mihai Carabas, Mikolaj Komisarek, Marek Pawlicki, Witold Holubowicz, Rafal Kozik:
The Proposition and Evaluation of the RoEduNet-SIMARGL2021 Network Intrusion Detection Dataset. Sensors 21(13): 4319 (2021)
Kaggle 链接