问题陈述
我们的任务是构建一个网络入侵检测器,即一个能够区分“坏”连接(被称为入侵或攻击)和“好”的正常连接的预测模型。
入侵检测系统(IDS) 是一种软件应用程序,它使用各种机器学习算法来检测网络入侵。IDS 监控网络或系统的恶意活动,并保护计算机网络免受用户(包括可能的内部人员)的未授权访问。入侵检测器的学习任务是构建一个预测模型(即分类器),能够区分“坏连接”(入侵/攻击)和“好(正常)连接”。攻击主要分为四类:
- #DOS:拒绝服务攻击,例如 SYN 洪水。
- #R2L:来自远程机器的未授权访问,例如猜测密码。
- #U2R:对本地超级用户权限的未授权访问,例如各种“缓冲区溢出”攻击。
- #Probing:监视和其他探测,例如端口扫描。
您可以从 Kaggle 下载本项目使用的数据集(数据集名称为 Intrusion Detection System Using Machine Learning)。
数据集描述: 数据文件:
- kddcup.names:特征列表。
- kddcup.data10percent:数据集的 10% 子集。
- trainingattacktypes:入侵类型列表。
特征:
描述
—
连接的持续时间(秒数)
协议类型,例如 TCP、UDP 等
目标上的网络服务,例如 HTTP、telnet 等
从源到目标的数据字节数
从目标到源的数据字节数
连接的正常或错误状态
如果连接来自/去往同一主机/端口则为 1;否则为 0
“错误”分片数量
紧急包的数量
表 1:单个 TCP 连接的基本特征。
描述
—
“热”指标的数量
尝试登录失败的次数
如果成功登录则为 1;否则为 0
“受损”状况的数量
如果获得了 root shell 则为 1;否则为 0
如果尝试了“su root”命令则为 1;否则为 0
“root” 访问次数
文件创建操作的数量
shell 提示符的数量
访问控制文件的操作数量
ftp 会话中的出站命令数
如果登录属于“热”列表则为 1;否则为 0
如果登录是“访客”登录则为 1;否则为 0
表 2:领域知识建议的连接内的内容特征。
描述
—
过去两秒内与当前连接相同主机的连接数
注意:以下特征是指这些同主机的连接。
具有“SYN”错误的连接百分比
具有“REJ”错误的连接百分比
连接到同一服务的连接百分比
连接到不同服务的连接百分比
过去两秒内与当前连接相同服务的连接数
注意:以下特征是指这些同服务的连接。
具有“SYN”错误的连接百分比
具有“REJ”错误的连接百分比
连接到不同主机的连接百分比
表 3:使用两秒时间窗口计算的流量特征。
应用的各种算法: 高斯朴素贝叶斯、决策树、随机森林、支持向量机、逻辑回归。
使用的方法: 我们在 KDD 数据集上应用了上述提到的各种分类算法,并比较它们的结果以构建一个预测模型。
步骤 1:导入和设置数据
代码:导入库和读取特征列表。
Python
“
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import time
from sklearn.modelselection import traintest_split
from sklearn.preprocessing import MinMaxScaler
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import Decis