背景知识
KDD是数据挖掘与知识发现(Data Mining and Knowledge Discovery)的简称,KDD CUP是由ACM(Association for Computing Machiner)的 SIGKDD(Special Interest Group on Knowledge Discovery and Data Mining)组织的年度竞赛。竞赛主页在这里。
KDD-Cup 2007, Consumer recommendations
KDD-Cup 2006, Pulmonary embolisms detection from image data
KDD-Cup 2005, Internet user search query categorization
KDD-Cup 2004, Particle physics; plus Protein homology prediction
KDD-Cup 2003, Network mining and usage log analysis
KDD-Cup 2002, BioMed document; plus Gene role classification
KDD-Cup 2001, Molecular bioactivity; plus Protein locale prediction.
KDD-Cup 2000, Online retailer website clickstream analysis
KDD-Cup 1999, Computer network intrusion detection
KDD-Cup 1998, Direct marketing for profit optimization
KDD-Cup 1997, Direct marketing for lift curve optimization
”KDD CUP 99 dataset ”就是KDD竞赛在1999年举行时采用的数据集。从这里下载KDD99数据集。
1998年美国国防部高级规划署(DARPA)在MIT林肯实验室进行了一项入侵检测评估项目。林肯实验室建立了模拟美国空军局域网的一个网络环境,收集了9周时间的 TCPdump(*) 网络连接和系统审计数据,仿真各种用户类型、各种不同的网络流量和攻击手段,使它就像一个真实的网络环境。这些TCPdump采集的原始数据被分为两个部分:7周时间的训练数据 (**) 大概包含5,000,000多个网络连接记录,剩下的2周时间的测试数据大概包含2,000,000个网络连接记录。
一个网络连接定义为在某个时间内从开始到结束的TCP数据包序列,并且在这段时间内,数据在预定义的协议下(如TCP、UDP)从源IP地址到目的IP地址的传递。每个网络连接被标记为正常(normal)或异常(attack),异常类型被细分为4大类共39种攻击类型,其中22种攻击类型出现在训练集中,另有17种未知攻击类型出现在测试集中。
4种异常类型分别是:
- DOS, denial-of-service. 拒绝服务攻击,例如ping-of-death, syn flood, smurf等;
- R2L, unauthorized access from a remote machine to a local machine. 来自远程主机的未授权访问,例如guessing password;
- U2R, unauthorized access to local superuser privileges by a local unpivileged user. 未授权的本地超级用户特权访问,例如buffer overflow attacks;
- PROBING, surveillance and probing, 端口监视或扫描,例如port-scan, ping-sweep等。
随后来自哥伦比亚大学的Sal Stolfo 教授和来自北卡罗莱纳州立大学的 Wenke Lee 教授采用数据挖掘等技术对以上的数据集进行特征分析和数据预处理,形成了一个新的数据集。该数据集用于1999年举行的KDD CUP竞赛中,成为著名的KDD99数据集。虽然年代有些久远,但KDD99数据集仍然是网络入侵检测领域的事实Benckmark,为基于计算智能的网络入侵检测研究奠定基础。
数据特征描述
KDD99数据集中每个连接(*)用41个特征来描述:
2, tcp, smtp, SF, 1684, 363, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 104, 66, 0.63, 0.03, 0.01, 0.00, 0.00, 0.00, 0.00, 0.00, normal.
0, tcp, private, REJ, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 1, 0.00, 0.00, 1.00, 1.00, 0.03, 0.55, 0.00, 208, 1, 0.00, 0.11, 0.18, 0.00, 0.01, 0.00, 0.42, 1.00, portsweep.
0, tcp, smtp, SF, 787, 329, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0.00, 0.00, 0.00, 0.00, 1.00, 0.00, 0.00, 76, 117, 0.49, 0.08, 0.01, 0.02, 0.00, 0.00, 0.00, 0.00, normal.
上面是数据集中的3条记录,以CSV格式写成,加上最后的标记(label),一共有42项,其中前41项特征分为4大类,下面按顺序解释各个特征的含义:
1. TCP连接基本特征(共9种)
基本连接特征包含了一些连接的基本属性,如连续时间,协议类型,传送的字节数等。
(1)duration. 连接持续时间,以秒为单位,连续类型。范围是 [0, 58329] 。它的定义是从TCP连接以3次握手建立算起,到FIN/ACK连接结束为止的时间;若为UDP协议类型,则将每个UDP数据包作为一条连接。数据集中出现大量的duration = 0 的情况,是因为该条连接的持续时间不足1秒。
(2)protocol_type. 协议类型,离散类型,共有3种:TCP, UDP, ICMP。
(3)service. 目标主机的网络服务类型,离散类型,共有70种。’aol’, ‘auth’, ‘bgp’, ‘courier’, ‘csnet_ns’, ‘ctf’, ‘daytime’, ‘discard’, ‘domain’, ‘domain_u’, ‘echo’, ‘eco_i’, ‘ecr_i’, ‘efs’, ‘exec’, ‘finger’, ‘ftp’, ‘ftp_data’, ‘gopher’, ‘harvest’, ‘hostnames’, ‘http’, ‘http_2784′, ‘http_443′, ‘http_8001′, ‘imap4′, ‘IRC’, ‘iso_tsap’, ‘klogin’, ‘kshell’, ‘ldap’, ‘link’, ‘login’, ‘mtp’, ‘name’, ‘netbios_dgm’, ‘netbios_ns’, ‘netbios_ssn’, ‘netstat’, ‘nnsp’, ‘nntp’, ‘ntp_u’, ‘other’, ‘pm_dump’, ‘pop_2′, ‘pop_3′, ‘printer’, ‘private’, ‘red_i’, ‘remote_job’, ‘rje’, ‘shell’, ‘smtp’, ‘sql_net’, ‘ssh’, ‘sunrpc’, ‘supdup’, ‘systat’, ‘telnet’, ‘tftp_u’, ‘tim_i’, ‘time’, ‘urh_i’, ‘urp_i’, ‘uucp’, ‘uucp_path’, ‘vmnet’, ‘whois’, ‘X11′, ‘Z39_50′。
(4)flag. 连接正常或错误的状态,离散类型,共11种。’OTH’, ‘REJ’, ‘RSTO’, ‘RSTOS0′, ‘RSTR’, ‘S0′, ‘S1′, ‘S2′, ‘S3′, ‘SF’, ‘SH’。它表示该连接是否按照协议要求开始或完成。例如SF表示连接正常建立并终止;S0表示只接到了SYN请求数据包,而没有后面的SYN/ACK。其中SF表示正常,其他10种都是error。
(5)src_bytes. 从源主机到目标主机的数据的字节数,连续类型,范围是 [0, 1379963888]。
(6)dst_bytes. 从目标主机到源主机的数据的字节数,连续类型,范围是 [0. 1309937401]。
(7)land. 若连接来自/送达同一个主机/端口则为1,否则为0,离散类型,0或1。
(8)wrong_fragment. 错误分段的数量,连续类型,范围是 [0, 3]。
(9)urgent. 加急包的个数,连续类型,范围是[0, 14]。
2. TCP连接的内容特征(共13种)
对于U2R和R2L之类的攻击,由于它们不像DoS攻击那样在数据记录中具有频繁序列模式,而一般都是嵌入在数据包的数据负载里面,单一的数据包和正常连接没有什么区别。为了检测这类攻击,Wenke Lee等从数据内容里面抽取了部分可能反映入侵行为的内容特征,如登录失败的次数等。
(10)hot. 访问系统敏感文件和目录的次数,连续,范围是 [0, 101]。例如访问系统目录,建立或执行程序等。
(11)num_failed_logins. 登录尝试失败的次数。连续,[0, 5]。
(12)logged_in. 成功登录则为1,否则为0,离散,0或1。
(13)num_compromised. compromised条件(**)出现的次数,连续,[0, 7479]。
(14)root_shell. 若获得root shell 则为1,否则为0,离散,0或1。root_shell是指获得超级用户权限。
(15)su_attempted. 若出现”su root” 命令则为1,否则为0,离散,0或1。
(16)num_root. root用户访问次数,连续,[0, 7468]。
(17)num_file_creations. 文件创建操作的次数,连续,[0, 100]。
(18)num_shells. 使用shell命令的次数,连续,[0, 5]。
(19)num_access_files. 访问控制文件的次数,连续,[0, 9]。例如对 /etc/passwd 或 .rhosts 文件的访问。
(20)num_outbound_cmds. 一个FTP会话中出站连接的次数,连续,0。数据集中这一特征出现次数为0。
(21)is_hot_login.登录是否属于“hot”列表(***),是为1,否则为0,离散,0或1。例如超级用户或管理员登录。
(22)is_guest_login. 若是guest 登录则为1,否则为0,离散,0或1。
3. 基于时间的网络流量统计特征 (共9种,23~31)
由于网络攻击事件在时间上有很强的关联性,因此统计出当前连接记录与之前一段时间内的连接记录之间存在的某些联系,可以更好的反映连接之间的关系。这类特征又分为两种集合:一个是 “same host”特征,只观察在过去两秒内与当前连接有相同目标主机的连接,例如相同的连接数,在这些相同连接与当前连接有相同的服务的连接等等;另一个是 “same service”特征,只观察过去两秒内与当前连接有相同服务的连接,例如这样的连接有多少个,其中有多少出现SYN错误或者REJ错误。
(23)count. 过去两秒内,与当前连接具有相同的目标主机的连接数,连续,[0, 511]。
(24)srv_count. 过去两秒内,与当前连接具有相同服务的连接数,连续,[0, 511]。
(25)serror_rate. 过去两秒内,在与当前连接具有相同目标主机的连接中,出现“SYN” 错误的连接的百分比,连续,[0.00, 1.00]。
(26)srv_serror_rate. 过去两秒内,在与当前连接具有相同服务的连接中,出现“SYN” 错误的连接的百分比,连续,[0.00, 1.00]。
(27)rerror_rate. 过去两秒内,在与当前连接具有相同目标主机的连接中,出现“REJ” 错误的连接的百分比,连续,[0.00, 1.00]。
(28)srv_rerror_rate. 过去两秒内,在与当前连接具有相同服务的连接中,出现“REJ” 错误的连接的百分比,连续,[0.00, 1.00]。
(29)same_srv_rate. 过去两秒内,在与当前连接具有相同目标主机的连接中,与当前连接具有相同服务的连接的百分比,连续,[0.00, 1.00]。
(30)diff_srv_rate. 过去两秒内,在与当前连接具有相同目标主机的连接中,与当前连接具有不同服务的连接的百分比,连续,[0.00, 1.00]。
(31)srv_diff_host_rate. 过去两秒内,在与当前连接具有相同服务的连接中,与当前连接具有不同目标主机的连接的百分比,连续,[0.00, 1.00]。
注:这一大类特征中,23、25、27、29、30这5个特征是 “same host” 特征,前提都是与当前连接具有相同目标主机的连接;24、26、28、31这4个特征是 “same service” 特征,前提都是与当前连接具有相同服务的连接。
4. 基于主机的网络流量统计特征 (共10种,32~41)
基于时间的流量统计只是在过去两秒的范围内统计与当前连接之间的关系,而在实际入侵中,有些 Probing攻击使用慢速攻击模式来扫描主机或端口,当它们扫描的频率大于2秒的时候,基于时间的统计方法就无法从数据中找到关联。所以Wenke Lee等按照目标主机进行分类,使用一个具有100个连接的时间窗,统计当前连接之前100个连接记录中与当前连接具有相同目标主机的统计信息。
(32)dst_host_count. 前100个连接中,与当前连接具有相同目标主机的连接数,连续,[0, 255]。
(33)dst_host_srv_count. 前100个连接中,与当前连接具有相同目标主机相同服务的连接数,连续,[0, 255]。
(34)dst_host_same_srv_rate. 前100个连接中,与当前连接具有相同目标主机相同服务的连接所占的百分比,连续,[0.00, 1.00]。
(35)dst_host_diff_srv_rate. 前100个连接中,与当前连接具有相同目标主机不同服务的连接所占的百分比,连续,[0.00, 1.00]。
(36)dst_host_same_src_port_rate. 前100个连接中,与当前连接具有相同目标主机相同源端口的连接所占的百分比,连续,[0.00, 1.00]。
(37)dst_host_srv_diff_host_rate. 前100个连接中,与当前连接具有相同目标主机相同服务的连接中,与当前连接具有不同源主机的连接所占的百分比,连续,[0.00, 1.00]。
(38)dst_host_serror_rate. 前100个连接中,与当前连接具有相同目标主机的连接中,出现SYN错误的连接所占的百分比,连续,[0.00, 1.00]。
(39)dst_host_srv_serror_rate. 前100个连接中,与当前连接具有相同目标主机相同服务的连接中,出现SYN错误的连接所占的百分比,连续,[0.00, 1.00]。
(40)dst_host_rerror_rate. 前100个连接中,与当前连接具有相同目标主机的连接中,出现REJ错误的连接所占的百分比,连续,[0.00, 1.00]。
(41)dst_host_srv_rerror_rate. 前100个连接中,与当前连接具有相同目标主机相同服务的连接中,出现REJ错误的连接所占的百分比,连续,[0.00, 1.00]。
样本分析
前面提到KDD99数据集是由DARPA98数据集经过数据挖掘和预处理后得到的。但KDD99与DARPA98并不是一一对应的,Wende Lee等人在处理原始连接数据时将部分重复数据去除,例如进行DoS攻击时产生大量相同的连接记录,就只取攻击过程中5分钟内的连接记录作为该攻击类型的数据集。同时,也会随机抽取正常(normal)数据连接作为正常数据集。
KDD99数据集总共由500万条记录构成,它还提供一个10%的训练子集和测试子集,它的样本类别分布表如下:
标签 | 类别 | 训练集(10%) | 测试集(Corrected) |
---|---|---|---|
39种攻击 | |||
0 | NORMAL | 97278 | 60593 |
1 | PROBE | 4107 | 4166 |
ipsweep | 1247 | 306 | |
mscan | / | 1053 | |
nmap | 231 | 84 | |
portsweep | 1040 | 354 | |
saint | / | 736 | |
satan | 1589 | 1633 | |
2 | DOS | 391458 | 229853 |
apache2 | / | 794 | |
back | 2203 | 1098 | |
land | 21 | 9 | |
mailbomb | / | 5000 | |
neptune | 107201 | 58001 | |
pod | 264 | 87 | |
processtable | / | 759 | |
smurf | 280790 | 164091 | |
teardrop | 979 | 12 | |
udpstorm | / | 2 | |
3 | U2R | 52 | 228 |
buffer_overflow | 30 | 22 | |
httptunnel | / | 158 | |
loadmodule | 9 | 2 | |
perl | 3 | 2 | |
ps | / | 16 | |
rootkit | 10 | 13 | |
sqlattack | / | 2 | |
xterm | / | 13 | |
4 | R2L | 1126 | 16189 |
ftp_write | 8 | 3 | |
guess_passwd | 53 | 4367 | |
imap | 12 | 1 | |
multihop | 7 | 18 | |
named | / | 17 | |
phf | 4 | 2 | |
sendmail | / | 17 | |
snmpgetattack | / | 7741 | |
snmpguess | / | 2406 | |
spy | 2 | / | |
warezclient | 1020 | / | |
warezmaster | 20 | 1602 | |
worm | / | 2 | |
xlock | / | 9 | |
xsnoop | / | 4 |
2. “/”表示该种攻击类型只在测试集(或训练集)中出现,而未在训练集(或测试集)中出现;
如上表,同DARPA98一样,KDD99将攻击类型分为4类,然后又细分为39小类,每一类代表一种攻击类型,类型名被标记在训练数据集每一行记录的最后一项。
从表中可以看出,训练集中共出现了22个攻击类型,而剩下的17种只在测试集中出现,这样设计的目的是检验分类器模型的泛化能力,对未知攻击类型的检测能力是评价入侵检测系统好坏的重要指标。
应用和评价
KDD 99数据集的应用
建立KDD99数据集的目的就是为入侵检测系统提供统一的性能评价基准,它的应用一般局限在学术范围内,用来检验入侵检测算法的好坏。
入侵检测的方法从根本上讲就是设计一个分类器,能将数据流中的正常与异常数据区分出来,从而实现对攻击行为的报警。通常的,我们将数据集中的的10%训练集来训练分类器,然后用corrected测试集测试分类器性能,这个分类器可以是基于贝叶斯的、决策树的、神经网络的或者是支持向量机的。有关分类器的设计,请自行google相关文献。
特征选择是KDD99数据集的另一个主要应用。KDD99数据集中,每个连接有41个特征,对于一个分类器来说,要从这么多特征中提取规则是费时且不精确的,这体现在一些无关或冗余的特征往往会降低分类器模型的检测精度和速度。而且对于从原始的tcpdump数据中提取特征这一过程,也将是困难和费时的,这对于在线入侵检测系统是致命的。因此去除冗余特征或不重要特征,对于提高分类器训练速度和检测精度来说,是必要的。要说明的是对于不同的分类器来说,最优的特征子集可以是不同的。关于特征选择,以后写一篇文章详细介绍下。
KDD 99数据集的评价
前面说过,KDD 99数据集是入侵检测领域的事实Benchmark,为基于计算智能的网络入侵检测研究奠定了基础,从那以后很多学者开始研究入侵检测算法,当然不能不提到众所周知、臭名昭著的“功夫网”。实际上“功夫网”就是一个大规模的入侵检测系统,科技这把双刃剑在让我们远离恶意攻击的同时,也让我们离真相越来越远。
不评论某墙,话说KDD99从1999年创建到2010年现在也有11个年头了,因为是98年做的实验,所以还得加1年,12年。12年过去,当年的实验条件和攻击手段放到今天早已过时,而且从原来的网络层攻击进化为针对应用层的攻击,例如跨站脚本、数据库注入等等(当然,针对应用层攻击自有新的解决方案)。你可以说,要解决这个问题,重新做一遍98年那个实验,用新的设备新的攻击手段,产生新的数据集不就行了吗?事实是据我所知还没有学术组织公开新的数据集,安全软件公司里肯定有足够的数据库,当然,人家是不会共享出来的,就靠这个赚钱了呗。另一个解决办法是你自己搭建网络环境,自己做实验,就是累点,当然可行。
暂且不管数据新旧,KDD99数据集存在的一些原生的缺陷却不能被忽略。这里给出几篇介绍KDD99缺陷的文献,供大家参考:
[1] The 1998 Lincoln Laboratory IDS Evaluation A Critique. by John McHugh
[2] Testing Intrusion Detection Systems: A Critique of the 1998 and 1999 DARPA Intrusion Detection System Evaluations as Performed by Lincoln Laboratory. by John McHugh
[3] The Comparison of IP Networks. by ST Brugger
[4] KDD Cup ’99 dataset (Network Intrusion) considered harmful. by ST Brugger
郑重声明