[杜翠凤]
随着物联网技术的高速发展,物联网终端设备的大量接入以及边云架构的引入使得网络环境更加复杂,特别是在各层网络中会产生多维度、非线性的流量数据,让传统的防火墙感到无能为力。作为补充防火墙检测的动态安全防御核心机制——入侵检测,其由于能够检测物联网中潜在的入侵行为,能够有效弥补防火墙防御能力的不足。但是,随着网络技术的发展,高速传输的数据流具有无序性、动态性、突发性以及数据量大等特点[1],导致现有的入侵检测模型难以有效识别入侵行为,在海量数据检测过程中入侵系统的检测效率和检测精度都无法保证。因此,入侵系统如何从数据流不断学习知识,保证在有限的时间和内存情况下采用轻量级的框架有效识别入侵检测模型;并针对边缘侧数据分布随时间变化的动态特性,提取在线数据的有用信息,构建一个适应数据维度高、数据规模大、时效性强、检测精度高的入侵检测模型是本文重点解决的问题。
入侵检测技术是一种用于识别和响应系统中未授权活异常入侵行为的技术。该技术的作用包括:识别入侵者以及入侵者的入侵行为;监视已成功突破安全防御系统的操作;根据对抗行为的特征及时提供重要的信息,组织对抗行为的发生和事态的扩大[2~4]。因此,入侵行为检测就是通过监控网络和系统的可疑活动进行风险评估的一种技术,从而在攻击者利用漏洞攻击前对系统潜在的漏洞采取必要的措施进行保护[5~7]。当前的入侵方式包括主机入侵和网络入侵,主机入侵时通过主机的软件行为和主机的日志判断的,而网络入侵则是通过判断数据流的特征、与主机连接次数来识别外部攻击。当前基于异常入侵的检测技术很多,包括基于概率统计建模的入侵检测方法[8~9]、基于规则建模的入侵检测方法[10~11]、基于数据挖掘的入侵检测方法[12~15]、基于机器学习的入侵检测方法[16~20]。但是,不管哪一种入侵的检测,入侵检测对于实时性和准确性的要求很高。因此,入侵检测模型必须具有良好的高可用性、高精度检测性和扩展性,才能满足海量网络数据流的入侵检测场景。本文为了应对入侵模型的高可用性、高精度以及高准确性等问题,采用一种在线增量学习的方法来更新入侵检测模型,也就是通过在线不断学习新的知识的方式来应对入侵行为的动态变化进而提高入侵检测的识别精度。但是现有方法(如迁移学习)往往容易遗忘学过的知识,该方法往往在对新数据学习之后就会遗忘旧知识进而造成模型对旧数据的识别能力很低,这显然不满足当前入侵检测的应用需求。因此,本文致力于构建一个新的模型,该模型力求在学习新知识的同时尽量减少模型的“遗忘”问题,进而在旧数据和新数据中都有不错的性能,从而保证模型的稳定性和可靠性。
在线增量学习[21~23]通常采用预测误差进行选择性增量学习和配套剪枝算法,针对在线学习的新样本,根据新样本训练模型与大规模学习的离线训练模型预测的误差进行比对,借助设定的误差阈值判定新样本训练的模型是否进行增量学习,用递归的方式不断更新离线训练模型,缩短了新模型运算时间,改善模型预测的效率。总而言之,在线增量学习其实是一个自适应学习系统,该系统能够不断从新样本数据中学习新的知识,在保存大部分以前学到的新知识基础上,通过在线不断学习的方式来更新模型参数,从而减少模型对离线数据重新训练的时间。从上面的分析可知,在线增量学习包含以下三个特点:(1)能够从在线新增的样本学习到新的知识;(2)对以前学习过的数据不需要重复训练,减少了重复训练的时间;(3)在学习新知识的同时不会“遗忘”旧知识,在保留大部分旧知识的同时,也具备对新数据的识别能力。
万物互联的时代要求网络入侵检测的方法具有更加有效性和实时性[24~25],特别是海量终端的接入产生高维度、规模大的流量数据冲击下,在线入侵检测面临在线更新复杂度过高、计算量过大的问题。因此,利用网络流量分布特征的变化构建一个在线自适应的网络入侵检测模型变得尤为重要。
针对上述的需求,本文采用深度学习提取网络流量序列的多尺度特征,结合在线增量学习的思想对在线流量数据进行增量学习,采用损失函数最小化目标对原始模型进行在线更新,使得模型尽量减少旧知识“遗忘”的同时,也提升了更新后模型性能和检测的精度。
本文借鉴网络流量异常检测公开数据集的特征维度提取,将上述的网络流量数据特征分为4 大类、41 维的特征[26],4 大类包括:TCP 连接基本特征、TCP 连接内容特征、基于时间的网络流量统计特征和基于主机的网络流量统计特征。41 个特征维度如表1 所示。
续表1
对于网络流量序列的入侵检测技术而言,通过将网络流量特征维度的时空关系视为图像像素的关系,网络流量中每个特征维度视为图像中某个像素点,如此,相同类型的网络流量特征维度视为一幅幅网络流量特征的“画像”,特征维度之间的相关关系视为流量特征的“画像”表达。基于上述的思路,本文将网络流量序列的41 个特征维度输入到深度学习中,通过多个不同尺度的卷积层对网络流量序列41 个特征维度进行深浅层特征学习,获得N 维浅层特征图和P 维深层特征图;通过特征融合将不同尺度的特征信息进行拼接,获得N+P 维全局特征的特征图。具体的操作如图1 所示。
图1 基于深度学习的网络流量入侵检测特征提取
在获取入侵检测特征后,下一步就是分析上述的特征,建立大规模学习、离线训练的入侵检测模型,实现入侵行为的识别。主要思想是:利用大规模历史数据整理出来正常网络流量的特征和入侵网络行为特征,然后采用监督学习的分类器构建一个超平面实现正常流量数据和异常流量数据的划分,进而实现入侵行为的检测。当前大规模学习的行业解决方法有模型并行和数据并行。本文考虑到边云协同环境下的数据分布特征,采用数据并行的方式对大规模数据进行离线学习,针对每个地区数据分布的差异性,采用同样的分类器各自运行大规模数据的一部分,然后采用集成学习的方式将n 个分类器计算的结果按照Adaboost算法进行合并,构成大规模数据学习的离线训练模型。
(1)在第一轮训练中,将各分类器的权重初始化为同等大小的权重。
(2)在第二轮训练中,使用第一轮权重分布D1来训练数据,并基于n 各分类器获得的分类误差率em。
(3)基于分类误差率em更新第二轮训练的权重分布D2,并将第二轮的权重分布用于下一轮迭代,直至达到最大的迭代次数m,
(4)计算组合分类器
本文从在线学习的场景出发,通过模型结构和数据两方面的增量学习任务来实现模型和数据进行在线学习的同时,自动根据误差调节网络参数,从而提高模型在不同场景下入侵识别的正确率。
通过大规模离线数据学习获取入侵检测模型的参数后,由于新流量序列的数据分布有可能跟历史流量序列的数据分布具有一定的差异性,因此,前面大规模离线学习的模型参数需要进行微调。本文目的是尽量保持前面模型中的重要参数,让新模型在学习旧任务的时候保持较高的精度,减少模型的“遗忘”问题,另外,通过对模型中某些参数进行微调,保证该模型在新任务识别中具有一定的精度。本文的在线增量学习的思路如图2 所示。
图2 在线增量学习的网络入侵检测方法
为了实现上面的目的,采用EWC 的方法来实现参数的更新,并采用损失函数最小化目标来保证函数的精度并尽量减少遗忘。
其中,是优化后一个总的损失,优化后新任务的损失,表示参数差异的损失。表示用于训练旧知识数据集的重要程度,在0-1 之间,可用人工设定。那么就是说,一个优化后的总损失,不仅要考虑这种新的参数在新任务检测上的损失,还要考虑由于参数改变所造成的差异性损失。而是衡量深度神经网络模型中哪些参数是重要的,哪些参数是不是那么重要的,是参数的权重。如果这个参数很重要,那么表示这个的值相对大,那么我们将旧知识学习到的参数变化一点点得到新知识的参数的变动范围很小的,因为一点点的变化很可能导致新的模型在旧的数据上的检测精度下降的很快;相反,如果的值很小,那么我们将旧知识学习到的参数变较大得到新知识的参数的变动范围很大的,因为即使参数变化很大,由于权重很小,那么新的模型在旧的数据上的检测精度也不会下降很多。为了计算的大小,本文采用梯度更新大小的方式进行衡量,得到公式如下:
为了保证参数更新后的模型对旧知识仍有较高的性能,我们希望模型更新后新数据梯度的变化不是那么大,最后与原来梯度变化方向尽量一致,为了实现这个“一致”,那么我们在后续的新数据训练过程中,我们希望梯度的变化方向尽量与前面一致的,因此可以表达为:
那么在迭代过程中,在每一个新数据训练的时候,我们都希望旧数据在参数各个样本在训练过程中梯度的变化方向和新数据在参数各个样本在训练过程中梯度的变化方向尽量少,这样才能保证我们模型在新旧两种数据的通用性。我们求解的目标从公式3 转到公式8,整个在线增量学习的目标就变成了公式8。这里需要注意的是,求解权重的时候需要将参数的变化范围尽可能量化,也就是权重越大,参数的变化范围越小,反之亦然,因此,基于权重的大小,我们将参数的变化大小进行约束界定:
最后,基于公式8和公式9,实现模型的在线增量学习,更新入侵检测模型。
本文在实验室环境下搭建用于训练大规模离线数据的数据处理和训练的数据平台,通过搭建大数据集群的方式来实现大规模离线数据的训练。该集群共有16 台服务器,每台服务器的配置均为16GB 内存/8CPU 核心/1T 硬盘/千兆网卡。实验采用Python 编写的开源神经网络库来构建分类器,可快速、灵活实现神经网络参数的确定。
本文通过提取3 个月5789116 条网络流量数据进行分析,该流量数据中“Normal”和“Dos”两种类型的数据占比很大,其他攻击类型的占比比较少。为了实现数据的平衡性,本文将其他攻击类型的数据进行复制,让各种攻击类型的数量达到相对平衡。
在获取网络流量特征维度的技术上,采用随机的方法选取训练数据380 万条,并将其平均分到15 个服务器中分别进行深度学习并构建分类器。剩下的1 989 116 条数据用于模型验证。为了比较本文方法的有效性,本文将本文的算法与静态的离线学习入侵检测模型进行对比,以展现本文算法的优越性。离线学习入侵检测模型是采用固定周期(一周)更新模型的方法实现入侵行为特征的更新。
本文从模型的准确率和F1 值两个评估指标分别对两种算法的性能进行测试,测试的时候将1 989 116 条数据分成10 批次测试,最后将训练集和测试集的准确率和F1值进行对比,得到的结果如图3 所示。
图3 不同算法的准确率对比
从图3 可知,本文算法的训练集和测试集的准确率较高,其中训练集和测试集准确率分别为93.84%和95.31%,而离线学习入侵检测模型训练集和测试集准确率分别为91.77%和91.07%,并且随着在线增量学习的训练,模型性能的表现更加出色。由此可见,本文模型能够通过在线增量学习环节有效应对数据分布差异的变化,自动根据误差调节网络参数,从而提高模型在不同场景下入侵识别的准确率。
从图4 可知,本文算法的训练集和测试集的F1 值较离线学习入侵检测模型训练集和测试集的F1 值高,而且随着批次的迭代,本文算法的F1 值表现得相对稳定,而离线学习入侵检测模型则随着数据分布的变化出现较大的抖动。这说明了,本文的在线集成模型并不是单纯的学习器的加权平均,而是结合模型参数的权重进行一定范围的微调,这就避免了由于数据存在较大波动的场景下模型出现较大幅度抖动的现象。由此可知,本文的模型在实际应用中具有更好的可靠性和实用性。
图4 不同算法的F1 值对比
随着网络产生的高维度和非线性的网络流量数据的产生,传统的入侵检测模型已经不再适用于现有网络攻击手段的预防。因此,基于网络环境复杂化的扩展,现有的入侵检测需要具有自适应在线学习的能力。本文提出了一种在线增量学习的方法来持续更新海量高维数据场景下的入侵检测模型,采用深度学习对网络流量特征维度进行多尺度融合,结合在线增量学习方法实现网络入侵检测模型的自适应学习,使得模型在保留大部分已有知识的情况下自适应学习新知识,大大提升入侵检测模型的分类性能。实验表明,本文的方法较离线学习入侵检测模型具有更好的可靠性和实用性。