北京治疗最好白癜风医院的偏方 http://baidianfeng.39.net/a_bdfzlff/141026/4503325.html网络在现代生活中扮演着重要的角色,网络安全已经成为一个重要的研究领域。入侵检测系统(IDS)是一种重要的网络安全技术,它监控着网络中软硬件的运行状态。尽管经过几十年的发展,现有的入侵检测系统在提高检测精度、降低误报率、检测未知攻击等方面仍面临挑战。为了解决上述问题,许多研究者致力于开发使用机器学习方法的IDS。
机器学习方法能够自动发现正常数据和异常数据之间的本质区别,具有较高的准确性。此外,机器学习方法具有很强的泛化能力,因此也能够检测未知的攻击。
IDS的分类
IDS的分类方法有两种:基于检测的方法和基于数据源的方法。在基于数据源的方法中,IDS可以分为基于主机的方法和基于网络的方法。这种方法的主要缺点是需要领域知识来设置、维护这些系统和监视推论。在基于检测的方法中,IDS可以分为滥用检测和异常检测。
图1:IDS系统分类
为什么选择深度学习?
深度学习是机器学习的一个分支,它的性能是显著的,已经成为一个研究热点。当有足够的训练数据时,基于深度学习的入侵检测系统可以达到令人满意的检测水平,并且深度学习模型具有足够的泛化能力来检测攻击变体和新攻击。此外,他们很少依赖领域知识;因此,它们易于设计和构造。
与传统的机器学习技术相比,深度学习方法更擅长处理大数据。此外,深度学习方法可以从原始数据中自动学习特征表示,然后输出结果;它们以端到端的方式运行,而且很实用。
在本文中,我们将专注于使用深度学习网络和时间序列原则的机器学习方法。利用深度学习解决时间序列问题的基本要求是“数据”。这些数据可以是单变量/多变量时间序列数据,即数据是按时间顺序记录的。
图2:IDS中使用的不同类型的机器学习算
该方法将攻击检测问题归结为异常检测问题。这背后的原因是,攻击通常很少发生,但是当它们发生时,它们的签名(更确切地说是分布)与正常操作条件下的签名非常不同。签名的这种变化反映在时间序列数据中。我们使用自编码器模型来学习正常状态数据的分布。使用此模型,我们可以确定传入数据是否具有显著不同的签名。
什么是自编码器?
自编码器是神经网络,包括两个对称组件,一个编码器和一个解码器,如图3所示。编码器从原始数据中提取特征(也称为潜在表示),而解码器从这些潜在表示中重建输入数据。在训练期间,编码器的输入与解码器的输出之间的差异逐渐减小。在此训练过程中,从编码器出来的潜在表示逐渐趋向于表示原始数据的本质。重要的是要注意,整个过程不需要监督信息。存在许多著名的自编码器变体,如去噪自编码器,变分自编码器和稀疏自编码器。
图3:自编码器的结构
自编码器主要用于减少特征空间,而特征/潜在表示则位于工作流的下游,以训练不同类型的模型。自编码器在捕获输入特征空间的复杂多元分布方面也做得非常好。由于此特性,它们被广泛用于异常检测任务中。
由于这是一个时间序列问题,因此我们使用LSTM网络。它们是RNN(循环神经网络)的一种变体,目的是在长序列上保持时间相关特征。这些网络要求每个样本的形状为(时间步长,特征)。时间步长是可调的数字。因此,输入数据是一个3D形状的数组(样本数,时间步长,特征)。
数据集说明
为了建模入侵检测学习任务,我们使用KDD99数据集。KDD99数据集是最广泛的IDS(入侵检测系统)基准数据集。它从一个名为DARPA的原始数据集中提取了41维特征,该数据集包含原始TCP(传输控制协议)数据包和标签。由于原始数据包对于机器学习模型没有多大用处。因此,策划了一个新的数据集,称为KDD99数据集。
KDD99的标签与DARPA相同。KDD99有四种类型的特性,即基本特征、内容特征、基于主机的统计特征和基于时间的统计特征。可以从以下网站下载此数据集:kdd.ics.uci.edu/databases/kddcup99/kddcup99.html
在上面的链接中,有几个版本的数据集。在这个工作中,我们使用完整版本的数据集来训练和测试。
训练数据:kddcup.data.gz测试数据:corrected.gz未标记的数据(生产数据):kddcup.newtestdata_10_percent_unlabeled.gz列名称:kddcup.names我们在训练集上训练模型,调整决策参数(例如分类器阈值),并在测试集(也称为验证集)上测量有效性指标。最后,我们使用生产集(无标签的数据集)来识别异常。
导入Python库
数据预处理
让我们首先导入所需的训练文件。
图4:训练数据文件中的不同字段
该训练数据集具有万行,其中只有约20%是正常的。数据帧的最后一列是“结果”列,它指定连接是正常还是攻击。有不同类型的攻击,例如反向dos,buffer_overflowu2r,ftp_writer2l,guess_passwdr2l等。在测试集中,除了训练集中存在的攻击外,还存在一些新的攻击。这些新攻击是训练集中现有攻击的变体。这样做是为了衡量模型对未见攻击的有效性。但是,我们不打算将不同类型的攻击分类为JSut异常。
下面的直方图显示,该数据集比正常实例具有更多的异常。
这个训练数据集有多万行,其中只有20%是正常的。dataframe的最后一列是“result”列,它指定连接是正常还是攻击。有各种不同类型的攻击,如backdos、buffer_overflowu2r、ftp_writer2l、guess_passwdr2l等。在测试集中,除了训练集中出现的攻击外,还出现了一些新的攻击。这些新的攻击是训练集中现有攻击的变体。这样做是为了衡量模型对未见攻击的有效性。然而,我们并不打算将不同类型的攻击分类,并将它们都视为异常。
下面的柱状图显示,数据集比正常实例有更多的异常。
图5:直方图显示了不同攻击类型的实例
接下来,我们将研究在名为“service”字段下的数据中呈现的不同服务类型。
print(differenttypesofservices:{}.format(df[service].unique()))
数据中存在的不同类型的services
在这里,我们可以看到数据包含不同类型的服务。通过对不同服务的数据进行分析,发现它们在正常情况下的分布是不同的。因此,我们只考虑“