KDD-CUP99 网络入侵检测数据集的处理与研究

对于入侵检测的研究,需要大量有效的实验数据。数据可以通过抓包工具来采集,如Unix下的Tcpdump,Windows下的libdump,或者专用的软件snort捕捉数据包,生成连接记录作为数据源。本文使用的是基于数据挖掘的入侵检测技术研究中使用的KDDCup99的网络入侵检测数据集。

原文链接 https://blog.gongyan.me/2017/04/kdd-cup99/ 转载请注明,有问题欢迎联系我gongyanc@outlook.com


1 KDDCup99网络入侵检测数据集介绍

该数据集是从一个模拟的美国空军局域网上采集来的9个星期的网络连接数据,分成具有标识的训练数据和未加标识的测试数据。测试数据和训练数据有着不同的概率分布,测试数据包含了一些未出现在训练数据中的攻击类型,这使得入侵检测更具有现实性。
在训练数据集中包含了1种正常的标识类型normal和22种训练攻击类型,如表1-1所示。另外有14种攻击仅出现在测试数据集中。

表1-1 KDDCup99入侵检测实验数据的标识类型

标识类型含义具体分类标识
Normal正常记录Normal
DOS拒绝服务攻击back、land、neptune、pod、smurf、teardrop
Probing监视和其他探测活动ipsweep、nmap、portsweep、satan
R2L来自远程机器的非法访问ftp_write、guess_passwd、imap、multihop、phf、spy、warezclient、warezmaster
U2R普通用户对本地超级用户特权的非法访问buffer_overflow、loadmodule、perl、rootkit

数据特征:KDDCup99训练数据集中每个连接记录包含了41个固定的特征属性和1个类标识,如图1-1所示,标识用来表示该条连接记录是正常的,或是某个具体的攻击类型。在41个固定的特征属性中,9个特征属性为离散(symbolic)型,其他均为连续(continuous)型。

2 数据预处理

聚类算法中要使用计算距离的方法对数据进行聚类,而连接记录的固定特征属性中有两种类型的数值:离散型和连续型。对于连续型特征属性,各属性的度量方法不一样。一般而言,所用的度量单位越小,变量可能的值域就越大,这样对聚类结果的影响也越大,即在计算数据间距离时对聚类的影响越大,甚至会出现“大数”吃“小数”的现象。因此为了避免对度量单位选择的依赖,消除由于属性度量的差异对聚类产生的影响,需要对属性值进行标准化。对于离散型特征属性本文中并不作标准化处理,而是放在聚类算法中计算距离时处理。所以数据标准化是针对连续型特征属性的。设训练数据集有n条网络连接记录,每个记录中有22个连续型属性向量记作Xij(1≤i≤n,11≤j≤41)。对Xij数据预处理分为两步:数值标准化和数值归一化。

表1-4以2秒时间窗口计算的流量特征

特征名描述类型
count过去的2秒内与当前连接有着相同的目的地址的连接连续
serror_rate出现SYN错误的连接次数连续
rerror_rate出现REJ错误的连接次数连续
same_srv_rate建立相同服务的连接次数连续
diff_srv_rate建立不同服务的连接次数连续
srv_count过去2秒时间内出现和当前连接服务相同的连接次数连续
srv_serror_rate出现SYN错误的连接次数连续
srv_rerror_rate出现REJ错误的连接次数连续
srv_diff_host_rate连接不相同主机的次数连续

2.1 数值标准化

设 $X'_{ij}$ 为 $X_{ij}$ 数值标准化后的值。

$X'_{ij} = \frac{ X_{ij}-AVG_j }{ STAD_j }$

$AVG_j = \frac{ 1 }{ n }(X_{1j}+X_{2j}+...+X_{nj})$

$STAD_j = \frac{ 1 }{ n }(\lvert X_{1j}-AVG_j \lvert +\lvert X_{2j}-AVG_j \lvert +...+ \lvert X_{nj}-AVG_j \lvert )$

2.2 数值归一化

设 $X'' _{ij}$为 $X_{ij}$归一化后的值。

$ X''_{ij} = \frac{ X'_{ij}-X _{min} } { X_{max} - X_{min} } $

$X_{min} = min{ X'_{ij} }$

$X_{max} = max{ X'_{ij} }$

其中下标变量1<=i<=n, 11<=j<=41

数值归一化处理过程及归一化后数据实例如图2-1

0.02.6104176374e-070.00105713002195
0.00.00.0
0.00.00.0
0.00.00.0
0.01565557729940.00.0
0.00.01.0
0.00.03529411764710.0352941176471
1.00.00.11
0.00.00.0
0.01

3. 样本分析

KDD99数据集总共由500万条记录构成,它还提供一个10%的训练子集和测试子集。样本类别分布表如下:

标签类别训练集(10%)测试集(Corrected)
1NORMAL9727860593
2PROBE41074166
3ipsweep1247306
4mscan/1053
5nmap23184
6portsweep1040354
7saint/736
8satan15891633
9DOS391458229853
10apache2/794
11back22031098
12land219
13mailbomb/5000
14neptune10720158001
15pod26487
16processtable/759
17smurf280790164091
18teardrop97912
19udpstorm/2
20U2R52228
21buffer_overflow3022
22httptunnel/158
23loadmodule92
24perl32
25ps/16
26rootkit1013
27sqlattack/2
28xterm/13
29R2L112616189
30ftp_write83
31guess_passwd534367
32imap121
33multihop718
34named/17
35phf42
36sendmail/17
37snmpgetattack/7741
38snmpguess/2406
39spy2/
40warezclient1020/
41warezmaster201602
42worm/2
43xlock/9
44xsnoop/4
  • 训练集和测试集分别为KDD99数据集中的10%训练样本和corrected 的测试样本;
  • “/”表示该种攻击类型只在测试集(或训练集)中出现,而未在训练集(或测试集)中出现;

如上表,同DARPA98一样,KDD99将攻击类型分为4类,然后又细分为39小类,每一类代表一种攻击类型,类型名被标记在训练数据集每一行记录的最后一项。
从表中可以看出,训练集中共出现了22个攻击类型,而剩下的17种只在测试集中出现,这样设计的目的是检验分类器模型的泛化能力,对未知攻击类型的检测能力是评价入侵检测。

4 KNN算法

4.1 算法介绍

kNN算法的指导思想是“近朱者赤,近墨者黑”,由你的邻居来推断出你的类别。计算步骤如下:

  1. 算距离:给定测试对象,计算它与训练集中的每个对象的距离
  2. 找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
  3. 做分类:根据这k个近邻归属的主要类别,来对测试对象分类

4.2 距离或相似度的衡量

什么是合适的距离衡量?距离越近应该意味着这两个点属于一个分类的可能性越大。距离衡量包括欧式距离、夹角余弦等。本实验使用欧式(Euclidean)距离。

4.3 类别的判定

投票决定:少数服从多数,近邻中哪个类别的点最多就分为该类。
加权投票法:根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)

4.4 K值的设定

k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)
k值通常是采用交叉检验来确定(以k=1为基准)
经验规则:k一般低于训练样本数的平方根

4.5 判定方式的选择

投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。

4.6 衡量距离的选择

高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。
变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变进行标准化。

4.7 数据处理

kdd99_1.png

5 ROC曲线

kdd99_2.png

附录:源代码

项目链接

# coding=utf-8
from __future__ import division
import numpy as np
import matplotlib.pyplot as plt


def classify(input_vct, data_set):
    data_set_size = data_set.shape[0]
    diff_mat = np.tile(input_vct, (data_set_size, 1)) - data_set  # 扩充input_vct到与data_set同型并相减
    sq_diff_mat = diff_mat**2  # 矩阵中每个元素都平方
    distance = sq_diff_mat.sum(axis=1)**0.5  # 每行相加求和并开平方根
    return distance.min(axis=0)  # 返回最小距离


def file2mat(test_filename, para_num):
    """
    将表格存入矩阵,test_filename为表格路径,para_num为存入矩阵的列数
    返回目标矩阵,和矩阵每一行数据的类别
    """
    fr = open(test_filename)
    lines = fr.readlines()
    line_nums = len(lines)
    result_mat = np.zeros((line_nums, para_num))  # 创建line_nums行,para_num列的矩阵
    class_label = []
    for i in range(line_nums):
        line = lines[i].strip()
        item_mat = line.split(',')
        result_mat[i, :] = item_mat[0: para_num]
        class_label.append(item_mat[-1])  # 表格中最后一列正常1异常2的分类存入class_label
    fr.close()
    return result_mat, class_label


def roc(data_set):
    normal = 0
    data_set_size = data_set.shape[1]
    roc_rate = np.zeros((2, data_set_size))
    for i in range(data_set_size):
        if data_set[2][i] == 1:
            normal += 1
    abnormal = data_set_size - normal
    max_dis = data_set[1].max()
    for j in range(1000):
        threshold = max_dis / 1000 * j
        normal1 = 0
        abnormal1 = 0
        for k in range(data_set_size):
            if data_set[1][k] > threshold and data_set[2][k] == 1:
                normal1 += 1
            if data_set[1][k] > threshold and data_set[2][k] == 2:
                abnormal1 += 1
        roc_rate[0][j] = normal1 / normal  # 阈值以上正常点/全体正常的点
        roc_rate[1][j] = abnormal1 / abnormal  # 阈值以上异常点/全体异常点
    return roc_rate


def test(training_filename, test_filename):
    training_mat, training_label = file2mat(training_filename, 32)
    test_mat, test_label = file2mat(test_filename, 32)
    test_size = test_mat.shape[0]
    result = np.zeros((test_size, 3))
    for i in range(test_size):
        result[i] = i + 1, classify(test_mat[i], training_mat), test_label[i]  # 序号, 最小欧氏距离, 测试集数据类别
    result = np.transpose(result)  # 矩阵转置
    plt.figure(1)
    plt.scatter(result[0], result[1], c=result[2], edgecolors='None', s=1, alpha=1)
    # 图1 散点图:横轴为序号,纵轴为最小欧氏距离,点中心颜色根据测试集数据类别而定, 点外围无颜色,点大小为最小1,灰度为最大1
    roc_rate = roc(result)
    plt.figure(2)
    plt.scatter(roc_rate[0], roc_rate[1], edgecolors='None', s=1, alpha=1)
    # 图2 ROC曲线, 横轴误报率,即阈值以上正常点/全体正常的点;纵轴检测率,即阈值以上异常点/全体异常点
    plt.show()


if __name__ == "__main__":
    test('training.csv', 'test.csv')

转载于:https://www.cnblogs.com/gongyanc/p/6703532.html

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: kdd-cup99网络入侵检测数据集是一个用于网络安全领域的数据集,其中包含了多种网络入侵攻击类型的数据。对于这个数据集的分类,可以使用机器学习算法进行分类,例如支持向量机、决策树、随机森林等。分类的目的是将正常的网络流量和恶意的网络流量区分开来,以便于网络安全人员进行有效的防御和应对。同时,对于不同类型的网络入侵攻击,也可以使用不同的分类算法进行分类,以提高分类的准确率和效率。 ### 回答2: KDD Cup 99数据集是一个用于网络入侵检测数据集,其中包含了网络流量的数据。对于这个数据集的分类,主要可以分为四个类别:正常流量、DoS攻击、U2R(用户到根)攻击和R2L(远程到本地)攻击。 正常流量是指用户正常访问网络时产生的流量,其特征通常是数据包数较少,数据包大小较小,流量波动较小,访问的目的性强。 DoS攻击指的是拒绝服务攻击,攻击者通过发送大量的恶意数据包,来耗尽系统资源,导致正常用户无法正常访问系统。DoS攻击的特征是数据包数非常大,数据包大小较小,流量波动较大,访问的目的性较弱。 U2R攻击指的是用户到根攻击,攻击者通过获取系统权限来进行恶意行为。U2R攻击的特征是数据包数较少,数据包大小较大,流量波动较小,访问的目的性强。 R2L攻击指的是远程到本地攻击,攻击者通过获取某个远程系统的权限,来进入本地系统进行恶意行为。R2L攻击的特征是数据包数较少,数据包大小较大,流量波动较小,访问的目的性较弱。 综上所述,对于KDD Cup 99数据集的分类,需要根据流量的不同特征进行分析,从而确定流量的类别,以进行有效的网络入侵检测。 ### 回答3: KDD-CUP99网络入侵检测数据集是公认的网络入侵检测领域的标准数据集之一。该数据集由MIT林肯实验室和DARPA合作开发,包括正常和异常网络流量数据,以模拟网络被攻击或未被攻击的情况。该数据集由42个网络特征变量组成,包括TCP,UDP和ICMP包个数、目的地IP地址、源IP地址、不同标记类型的错误个数、入站与出站概率等。其目的在于通过对网络数据的深入分析,识别潜在的网络威胁,预测和防范网络安全事故的发生。 在对KDD-CUP99数据集的分类进行研究时,一般采用机器学习中的分类算法。分类算法的目标是将输入的网络流量数据进行划分,将其分为正常行为和异常行为两个类别。其中,异常行为包括DoS攻击、Probing攻击、R2L和U2R攻击。这四种攻击方式的特点分别是:DoS攻击是一种大量流量的攻击方式,旨在耗尽资源;Probing攻击是对网络的轻量级扫描,旨在发现网络的弱点;R2L攻击试图利用远程主机的漏洞,将恶意代码插入目标网络中;U2R攻击是一种利用异常代码发送数据包来比较权限和优先级的攻击。 目前,对于KDD-CUP99数据集的分类研究主要集中在三个方面。一是研究分类算法,如KNN、支持向量机(SVM)、决策树等,通过比较算法和数据预处理方法,找出最佳的分类算法。二是对网络流量数据进行特征选择和维度规约,减少数据集规模、降低计算难度,提高分类准确率。三是对数据集进行增广和更新,使得分类算法能够适应新型的网络攻击方式和策略。 总之,KDD-CUP99数据集的分类研究对于预测网络威胁、保护网络安全至关重要。分类算法的准确率和算法效率直接影响网络安全,因此,未来还需要加强对数据集研究及算法创新,提高网络入侵检测能力,保障网络安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值