Press "Enter" to skip to content

基于NSL-KDD数据集的网络入侵检测分析

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

引言

 

在网络安全维护中,入侵检测系统(IDS)用于检测网络异常和攻击,其对潜在
的攻击行为能够做出反应并防御攻击者。

 

入侵检测系统(IDS)可以分为三种类型:基于网络的入侵检测系统(NIDS),
基于主机的入侵检测系统(HIDS)和基于混合的入侵检测系统(hybrid IDS)。HIDS可以检测单台计算机上的恶意活动,而NIDS可以通过监视多个主机并检查网络
流量来识别入侵。基于混合的IDS通过分析应用程序日志,系统调用,文件系统修改
(密码文件,二进制文件,访问控制列表和功能数据库等)以及其他主机状态和活动
来检测入侵。

 

入侵检测系统通常与其他技术(例如路由器和防火墙)一起使用,如此可以将来
自每个设备的数据关联起来,并根据这些IDS监视的内容做出相应决策。

 

入侵检测方法有三种,包括基于签名的检测(也称为误用检测),基于异常的检
测和混合入侵检测。所谓误用检测,就是先定义异常系统行为,收集非正常操作的行
为特征,然后将所有其他行为定义为正常。而异常监测则先通过一个学习阶段,总结
正常的行为特征成为自己的先验知识,系统运行时将采集后的信息进行预处理后,与
正常行为模式比较,如果差异不超出预设阀值,则认为是正常的,出现较大差异则判
定为入侵。

 

可以看出,误用检测可以简单地将已知攻击添加到模型中,但是无法识别攻击特
征库中没有事先指定的攻击行为。而异常检测能够检测新的和以往未发现的入侵,但
是误报率较误用检测高,且模型设计较为困难。

 

长期以来,入侵检测领域的研究主要集中在基于异常和基于误用的检测技术上。尽管基于误用的检测由于其可预测性和较高的准确性而通常在商业产品中受到青睐,
但在学术研究中,由于异常检测在解决新型攻击方面的理论潜力,通常被认为是一种
更强大的方法。

 

异常检测的一个主要挑战是需要大量的数据信息,而在互联网系统中,网络流,
日志和系统事件等会生成大量数据。通过利用安全分析和入侵检测数据查找隐藏的攻
击模式和趋势,识别异常和可疑活动,最终可以实现有效而高效的入侵检测,进而加
强网络防御。

 

本文从NSL-KDD数据集入手,通过机器学习的方法进行异常检测分析,为网络
异常检测提供一个可参考的依据。

 

NSL-KDD

 

采用机器学习进行网络入侵检测分析自然不能缺少相应的数据集,在网络异常检
测中,可参考的有KDD Cup 1999、NSL-KDD、UNSW-NB15、CSE-CIC-IDS等数据
集,本次网络入侵检测分析先从NSL-KDD开始。

 

NSL-KDD源于KDD-99数据集,KDD-99是从一个模拟的美国空军局域网上采集
来的9个星期的网络连接数据,其中包含了在军事网络环境中模拟的多种入侵行为,
该数据集被用于1999年举办的KDD CUP竞赛。由于该数据集存在一些问题,比如
KDD数据集中的一个重要缺陷是存在大量冗余记录。来自New Brunswick大学的一
些研究员对该数据集进行了清理,最终整理后的版本即为NSL-KDD数据集。

 

NSL-KDD包含四种入侵类型和正常行为,其中在训练集中,四大类入侵行为中
共包含24种子类型,在测试集中共包含38种子类型。由此可见,测试集中包含14种
未曾在训练集中出现的网络攻击类型,这样的设计更加符合真实的网络入侵检测环境。

 

 

DOS( Denial of Service Attack)

 

smurf:发送大量IP包,耗尽带宽。

 

pod:发送大量畸形ping包,导致系统崩溃,对目标IP不停的ping 。

 

teardrop:发送大量的、过大的错位IP碎片到被攻击的机器。造成操作系
统崩溃。

 

land:发送精心构造的、具有相同源地址和目标地址的欺骗数据包,致使
缺乏相应防护机制的目标设备瘫痪。

 

back:针对Apache Web服务器的反向拒绝服务攻击,其中客户端请求包含
许多反斜杠的URL。

 

neptune:SYN在一个或多个端口上淹没拒绝服务。

 

Probing(Probing Attack)

 

ip sweep:对多个主机地址执行端口扫描或ping并监视。

 

nmap:使用nmap工具进行nmap网络映射,包括SYN 包(TCP连接第一
个包)。

 

port sweep:监视扫描许多端口,以确定在单个主机上支持哪些服务。

 

satan:寻找已知弱点的Satan网络探测工具。

 

R2L(remote to local Attack)

 

ftp_write:远程ftp用户创建.rhost文件写匿名ftp目录中并获取本地登录
名。

 

guess_passwd:远程管理在服务器上的电子邮件/猜测密码。

 

imap:使用imap端口的imap远程缓冲区溢出获得系统权限。

 

multihop:用户第一次闯入一台机器的多步活动。

 

spy:用户为了寻找重要信息而闯入机器的多天场景,用户试图避开检测。使用几种不同的 攻击方法获取访问。

 

warezclient:用户下载之前由WarezMaster通过匿名ftp发布的非法软
件。

 

warezmaster:匿名上传非法软件到ftp服务器(通常是copywrited软件的
非法副本)。

 

phf:利用的CGI脚本,允许客户机在配置错误的Web服务器上执行任意命
令。

 

U2R(User to Root Attack)

 

rootkit:一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定
的文件、进程和网 络链接等信息。

 

buffer overflow:缓存溢出攻击,利用它执行非授权指令,甚至可以取得
系统特权,进而进 行各种非法操作。

 

load module:为普通用户重置ifs并创建root权限的shell。

 

perl:Perl 攻击,在Perl脚本中将用户ID设置为根,并创建根shell。

 

特征

描述

 

NSL-KDD数据中的特征比较具有代表性,且特征含义明确清晰,对后续的网络
异常检测工业落地具有一定的参考价值。NSL-KDD数据集中样本包含以下41种特征:

 

TCP连接基本特征

 

duration:连接持续时间,以秒为单位,连续类型。它的定义是从TCP连
接以3次握手建立算起,到FIN/ACK连接结束为止的时间;若为UDP协议类
型,则将每个UDP数据包作为一条连接。

 

protocol_type:协议类型,离散类型,共有3种:TCP,UDP,ICMP。

 

service:目标主机的网络服务类型,离散类型,共有70种。

 

flag:连接正常或错误的状态,离散类型,共11种。

 

src_bytes:从源主机到目标主机的数据的字节数,连续类型。

 

dst_bytes:从目标主机到源主机的数据的字节数,连续类型。

 

land:若连接来自/送达同一个主机/端口则为1,否则为0,离散类型。

 

wrong_fragment:错误分段的数量,连续类型。

 

urgent:加急包的个数,连续类型。

 

TCP连接的内容特征

 

对于U2R和R2L之类的攻击,由于它们不像DoS攻击那样在数据记录中具有频繁
序列模式,而一般都是嵌入在数据包的数据负载里面,单一的数据包和正常连接没有
什幺区别。为了检测这类攻击,Wenke Lee等从数据内容里面抽取了部分可能反映
入侵行为的内容特征,如登录失败的次数等。

 

hot:访问系统敏感文件和目录的次数,。例如访问系统目录,建立或
执行程序等。

 

num_failed_logins:登录尝试失败的次数,连续。

 

logged_in:成功登录则为1,否则为0,离散,0或1。

 

num_compromised:compromised条件出现的次数,连续。

 

root_shell:若获得root shell则为1,否则为0,离散,0或1。

 

su_attempted:若出现“su root”命令则为1,否则为0,离散,0或1。

 

num_root:root用户访问次数,连续。

 

num_file_creations:文件创建操作的次数,连续。

 

num_shells:使用shell命令的次数,连续。

 

num_access_files:访问控制文件的次数,连续。例如对 /etc/passwd 或
.rhosts 文件的访问。

 

num_outbound_cmds:一个FTP会话中出站连接的次数,连续。

 

is_hot_login:登录是否属于“hot”列表,是为1,否则为0,离散。例如超
级用户或管理员登录。

 

is_guest_login:若是guest登录则为1,否则为0,离散。

 

基于时间的网络流量统计特征

 

由于网络攻击事件在时间上有很强的关联性,因此统计出当前连接记录与之前一
段时间内的连接记录之间存在的某些联系,可以更好的反映连接之间的关系。

 

这类特征又分为两种集合:

 

 

一个是same host特征,只观察在过去两秒内与当前连接有相同目标主机的
,例如相同的连接数,在这些相同连接与当前连接有相同的服务的连接

等;

 

另一个是same service特征,只观察过去两秒内与当前连接有相同服务的连
接,例如这样的连接有多少个,其中有多少出现SYN错误或者REJ错误。

 

 

count:过去两秒内,与当前连接具有相同的目标主机的连接数,连续。

 

srv_count:过去两秒内,与当前连接具有相同服务的连接数,连续。

 

serror_rate:过去两秒内
,在与当前连接具有相同目标主机的连接中,出
现“SYN” 错误的连接的百分比,连续。

 

srv_serror_rate:过去两秒内,在与当前连接具有相同服务的连接中,出
现“SYN” 错误的连接的百分比,连续。

 

rerror_rate:过去两秒内,在与当前连接具有相同目标主机的连接中,出
现“REJ” 错误的连接的百分比,连续。

 

srv_rerror_rate:过去两秒内,在与当前连接具有相同服务的连接中,出
现“REJ” 错误的连接的百分比,连续。

 

same_srv_rate:过去两秒内,在与当前连接具有相同目标主机的连接中,
与当前连接具有相同服务的连接的百分比,连续。

 

diff_srv_rate:过去两秒内,在与当前连接具有相同目标主机的连接中,与
当前连接具有不同服务的连接的百分比,连续。

 

srv_diff_host_rate:过去两秒内,在与当前连接具有相同服务的连接中,
与当前连接具有不同目标主机的连接的百分比,连续。

 

基于主机的网络流量统计特征

 

基于时间的流量统计只是在过去两秒的范围内统计与当前连接之间的关系,而在
实际入侵中,有些Probing攻击使用慢速攻击模式来扫描主机或端口,当它们扫描的
频率大于2秒的时候,基于时间的统计方法就无法从数据中找到关联。所以Wenke
Lee等按照目标主机进行分类,使用一个具有100个连接的时间窗,统计当前连接之
前100个连接记录中与当前连接具有相同目标主机的统计信息

 

dst_host_count:前100个连接中,与当前连接具有相同目标主机的连接
数,连续。

 

dst_host_srv_count:前100个连接中,与当前连接具有相同目标主机相同
服务的连接数,连续。

 

dst_host_same_srv_rate:前100个连接中,与当前连接具有相同目标主
机相同服务的连接所占的百分比,连续。

 

dst_host_diff_srv_rate:前100个连接中,与当前连接具有相同目标主机
不同服务的连接所占的百分比,连续。

 

dst_host_same_src_port_rate:前100个连接中,与当前连接具有相同目
标主机相同源端口的连接所占的百分比,连续。

 

dst_host_srv_diff_host_rate:前100个连接中,与当前连接具有相同目标
主机相同服务的连接中,与当前连接具有不同源主机的连接所占的百分比,
连续。

 

dst_host_serror_rate:前100个连接中,与当前连接具有相同目标主机的
连接中,出现SYN错误的连接所占的百分比,连续。

 

dst_host_srv_serror_rate:前100个连接中,与当前连接具有相同目标主
机相同服务的连接中,出现SYN错误的连接所占的百分比,连续。

 

dst_host_rerror_rate:前100个连接中,与当前连接具有相同目标主机的
连接中,出现REJ错误的连接所占的百分比,连续。

 

dst_host_srv_rerror_rate:前100个连接中,与当前连接具有相同目标主
机相同服务的连接中,出现REJ错误的连接所占的百分比,连续。

 

数据分析与模型训练

 

在本次网络异常检测中,以Normal、DOS、Probing、R2L、U2R五种类型作为
分类结果。查看五种类型在训练集和测试集的分布:

 

Counter({'normal': 67343, 'dos': 45927, 'probe': 11656, 'r2l':
995, 'u2r': 52})
Counter({'normal': 9710, 'dos': 7636, 'r2l': 2574, 'probe': 2423,
'u2r': 200})

 

 

训练集数据部分特征统计信息:

 

           duration     src_bytes     dst_bytes           land  \
count  125973.00000  1.259730e+05  1.259730e+05  125973.000000   
mean      287.14465  4.556674e+04  1.977911e+04       0.000198   
std      2604.51531  5.870331e+06  4.021269e+06       0.014086   
min         0.00000  0.000000e+00  0.000000e+00       0.000000   
25%         0.00000  0.000000e+00  0.000000e+00       0.000000   
50%         0.00000  4.400000e+01  0.000000e+00       0.000000   
75%         0.00000  2.760000e+02  5.160000e+02       0.000000   
max     42908.00000  1.379964e+09  1.309937e+09       1.000000  

 

测试集数据部分特征统计信息:

 

           duration     src_bytes     dst_bytes          land 
count  22543.000000  2.254300e+04  2.254300e+04  22543.000000     
mean     218.868784  1.039591e+04  2.056110e+03      0.000311        
std     1407.207069  4.727969e+05  2.121976e+04      0.017619       
min        0.000000  0.000000e+00  0.000000e+00      0.000000        
25%        0.000000  0.000000e+00  0.000000e+00      0.000000       
50%        0.000000  5.400000e+01  4.600000e+01      0.000000      
75%        0.000000  2.870000e+02  6.010000e+02      0.000000        
max    57715.000000  6.282565e+07  1.345927e+06      1.000000  

 

对训练集和测试集的样本特征进行分析得到,protocol_type、service、flag三
个特征为Object离散类型,之后需要对三个非数值型特征采用One-Hot方式编码:

 

Training set:
Feature 'protocol_type' has 3 categories
Distribution of categories in protocol_type:
tcp 102689
udp 14993
icmp 8291
Name: protocol_type, dtype: int64
Feature 'service' has 70 categories
Distribution of categories in service:
http 40338
private 21853
domain_u 9043
smtp 7313
ftp_data 6860
Name: service, dtype: int64
Feature 'flag' has 11 categories
Distribution of categories in flag:
SF 74945
S0 34851
REJ 11233
RSTR 2421
RSTO 1562
Name: flag, dtype: int64

 

通过对样本标签的分析得到样本类别的分布不均衡:

 

Distribution of categories in label:
normal 67343
dos 45927
probe 11656
r2l 995
u2r 52
Name: label, dtype: int64

 

采用SMOTE或ADASYN算法进行样本过采样,一般来说,由于重采样的算法特
性,用SMOTE合成的样本分布比较平均,降低了过拟合风险,但是没有考虑邻近样
本的类别信息。ADASYN的特性是自动决定每个正样本需要生成多少合成样本,当一
个少数类样本周围多数类样本越多,则算法会为其生成越多的样本,而不是像
SMOTE那样对每个正样本合成相同数量的样本,但是因此其更易受到离群点的影
响。过采样后的样本类别分布如下:

 

Counter({'r2l': 67363, 'normal': 67343, 'u2r': 67336, 'probe':
67246, 'dos': 67194})

 

尝试对连续型特征数值进行最大最小值归一化,但归一化后结果反而不好,故本
次训练不采用该方法。

 

采用LightGBM进行训练,采用网格搜索方法优化超参数,并对样本赋予相应权
重,测试结果如下:

 

auc score is 0.7864969170030608  
  
  precision    recall  f1-score   support
0      0.962     0.791     0.868      7636  
1      0.694     0.970     0.809      9710  
2      0.821     0.748     0.783      2423  
3      0.980     0.168     0.287      2574  
4      0.677     0.105     0.182       200  
  
    accuracy                          0.786     22543  
   macro avg      0.827     0.557     0.586     22543  
weighted avg      0.831     0.786     0.761     22543  
  
roc_auc_score  is 0.9295090360807869  
f1_score  is 0.5857057621935915  

 

模型训练曲线:

 

 

特征重要性排序:

 

 

LightGBM树状图:

 

 

参考文献

 

Tavallaee M, Bagheri E, Lu W, et al. A detailed analysis of the KDD
CUP 99 data set[C]//2009 IEEE symposium on computational
intelligence for security and defense applications. IEEE, 2009: 1-6.

 

Wang L, Jones R. Big data analytics for network intrusion detection:
A survey[J]. International Journal of Networks and
communications, 2017, 7(1): 24-31.

 

Moustafa N, Slay J. The significant features of the UNSW-NB15 and
the KDD99 data sets for network intrusion detection
systems[C]//2015 4th international workshop on building analysis
datasets and gathering experience returns for security (BADGERS).
IEEE, 2015: 25-31.

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注