基于自注意力机制的无边界应用动作识别方法

2022-05-09 05:03魏子令陈曙晖
计算机研究与发展 2022年5期
关键词:数据包向量边界

王 冲 魏子令 陈曙晖

(国防科技大学计算机学院 长沙 410003)

工业互联网是近年来工业制造与互联网、大数据、云计算、人工智能等技术不断发展并走向深度融合的产物,是工业生产的重要发展趋势.我国于2013年提出“中国制造2025”战略,全面推动工业制造走向数字化、智能化[1].然而,工业互联网同时也是网络攻击的重要目标,面临着众多的安全威胁.《工业互联网平台安全白皮书(2020)》指出[2],我国许多工业互联网平台遭受网络攻击多达平均每日90次,而用户的安全意识却普遍淡薄.

工业互联网安全威胁主要分布在工业数据、工业应用层、工业云平台服务层、工业云基础设施层、边缘计算层等5个层次.其中,工业数据层、应用层和云平台服务层面临的网络攻击威胁和敏感数据泄露风险,在传统互联网中也存在.过去几十年的研究中,研究者们经常使用流量识别技术辅助解决这一问题,并取得了良好的效果.这种技术对工业互联网的安全保障也发挥着重要作用.

流量识别技术最初的重要应用场景是保障互联网的服务质量(quality of service, QoS)[3],它能够分辨出网络流量的来源或类型,从而为网络运营商分析互联网流量分布提供工具.同时,流量识别技术也能为互联网安全保障提供支持,如辅助进行异常流量检测[4-5]和敏感信息泄露风险评估[6]等.针对这些应用场景,研究者们对流量识别进行了长期而广泛的研究.

早期,互联网环境十分简单,流量识别仅需通过检查数据报文的端口号进行应用分类.但很快,随着动态端口、端口伪装等技术的出现,通过端口识别应用不再可行[7].于是深度包检测(deep packet inspec-tion, DPI)技术应时而生,为流量识别提供了新的方案[8].此后,DPI技术经历了长时间的发展,取得了许多成果[9-10].然而,21世纪以来,互联网中加密流量的比例不断攀升,这使得依赖于分析数据报文有效载荷的DPI技术不再有效.于是研究者们将目光转向同样在21世纪兴起的机器学习技术,并发现仅使用流量数据的统计特征建立模型,即可从密文中取得一定程度的信息[11-13].

经过十几年的研究,使用机器学习方法对加密流量进行分析的技术不断发展,也取得了许多成果[14-16].而近期,对流量识别的研究又逐渐发展到一些细粒度分析当中,研究者们尝试从加密流量中发现更详细、更有价值的信息.其中,一个有意义的方向为网络应用的动作识别,即通过分析设备产生的加密流量,还原出用户在应用使用期间执行的具体操作.

这类细粒度分析能够很好地辅助网络管理者检测工业互联网中的网络攻击行为.例如,通过分析流量中的某些特定行为,可以发现是否有攻击者对工业设备等执行恶意或有安全风险的动作.因此,动作识别技术可以为异常行为检测提供支持.另外,流量的细粒度分析对研究应用在网络传输中的隐私泄露风险也十分重要.研究者们从加密流量中获取到的情报越多,意味着网络数据发生泄露的风险越大,而工业互联网敏感数据的泄露会导致严重的商业损失.例如,若恶意攻击者通过识别网络流量得知工业应用用户执行的动作,就可以据此进一步分析出企业的生产计划等敏感信息.因此,动作识别的研究能够揭示出加密流量中存在的一种敏感信息泄露风险.

此前已有多项工作对动作识别进行了研究.2014年Coull等人[17]对苹果手机上的一款即时通信软件iMessage进行了深入研究,他们以用户与苹果服务器之间通信报文的长度为特征,对该软件中的5种操作“开始输入”“发送信息”“发送信息”“发送附件”“阅读”进行识别.这是最早对用户应用中的行为进行识别的研究,但更偏向操作识别,而非动作识别.Park等人[18]则选择了韩国的一款即时通信软件KakaoTalk作为研究对象,探索了行为识别的方案.他们选定包括加入聊天室、发送消息、添加好友在内的11种行为,将报文长度作为识别特征,取得了良好效果.这项研究的实质是动作识别,但作者本人并未使用这一概念.Shafiq等人[19]完成了一项对微信用户行为进行识别的工作,但他们只进行了单一行为的识别,即发送文本或图片消息.Conti等人[6]于2015年正式提出了动作识别的概念,他们选择了谷歌商店最热门的几款应用,对用户动作进行了定义与划分,并利用动作产生的流量在初期字节分布上的特征,通过随机森林分类器实现了对动作的准确识别,实验结果中识别的精确率达到98%以上.Fu等人[20]也完成了类似的工作,他们在WeChat和WhatsApp两款应用上运用随机森林分类器进行动作识别.Ata等人[21]则再次验证了从加密流量的统计量中识别出动作的可行性,他们以81%的准确率识别出来自9个应用的43种用户行为.Hou等人[22]分析了微信的私有通信协议MMTLS,训练和测试了多组特征和多种机器学习模型的动作识别效果,结果表明,随机森林分类器的精度较佳.Wu等人[23]则选择Instagram为研究对象,提出了一种相比于之前的工作能够提取更稳定特征的方法.

从上面这些研究可以看出,尽管许多研究者都在研究大致相同的课题,但却都没有对此给出明确定义.在不同的文献中,行为识别、动作识别、操作识别的提法均有出现.而本文沿用了文献[6]中动作识别的概念,且我们认为,操作是细粒度的瞬时性的概念,行为是长期性的规律性的概念,动作则介于二者之间.可以认为,动作是操作的组合,而行为是动作的组合.同时,现有工作均为在已经得知流量动作边界的情况下进行识别,流量通过模拟得到,且在采集过程中已经按动作划分为不同单元.但这在真实流量采集中难以实现.因此现有的动作识别方法难以用于现实场景.

本文针对当前研究工作的主要不足,对网络应用的无边界动作识别进行了深入研究,主要贡献有4个方面:

1) 对无边界动作识别问题进行了探讨和研究;

2) 提出了由基于自注意力机制的包级识别和动作聚合算法组成的识别模型,以实现无边界动作识别机制;

3) 设计了针对无边界动作识别的2种评价指标;

4) 通过实验验证了该模型的识别效果,证明其能够为工业互联网安全保障提供支持.

1 网络应用动作识别的相关概念与技术

1.1 动作识别的基本概念

本节将对网络应用动作识别领域相关的基本概念进行定义.

1) 动作.它是指网络应用中,用户为达成特定目的而执行的具有完整功能逻辑性的一组操作.例如发送邮件,这个动作由进入编辑界面、编辑邮件内容、指定接收邮箱、点击发送等一系列操作组成.相比于单个操作,发送邮件这个动作更具有识别与分析的价值,因此动作识别技术中将这样的操作组合视为研究的基本单元.

2) 动作分类.它是指将一个特定应用中所有可能的动作划分为若干个固定类别的过程.严格意义上,用户执行的每一个动作都是独一无二的,但我们通常将所有的动作划分为几个固定类别,如邮箱应用中的动作就可以简单分类为发送邮件、阅读邮件、删除邮件、更改信息等.并且,这样的分类必须具有独立性,即不同类别的动作之间相互独立,用户不可能在执行一个动作的同时执行另一个.

3) 动作序列.它是指由若干个按时间先后排列的动作构成的序列.用户在使用应用时,往往不会一次只执行一个动作,而是执行一连串动作.这种情况反映在网络通信中,就是一次性收集到的流量中包含多个动作的数据.显然,以动作序列为研究对象更有实际意义.在这种定义下,动作序列具有抽象和具体2层内涵:抽象的动作序列只是一列字符串,这些字符表征当前动作所属的类别名称;具体的动作序列是一列网络报文,这些报文由全部动作触发的流量组合而成.

4) 动作识别.它是指从未知动作触发的流量中推测出动作类别的算法.该算法以具体的动作序列为输入,以抽象的动作序列为输出,是一种序列到序列(sequence to sequence, Seq2Seq)算法.当输入序列中只包含一个动作时,其退化为点到点算法.

1.2 动作边界的定义

如图1所示,一个具体的动作序列是由在时间上离散、有序分布的若干个数据包构成,按先后顺序将这些数据包从1开始编号,并使用pi表示第i个数据包,则由k个数据包组成的动作序列可表示为一个序列Pk:

(1)

Fig. 1 Bounds of actions图1 动作边界示意图

若动作序列Pk共包含N个互不相交的动作,同样将这些动作按先后顺序从1开始编号,并使用Ai表示第i个动作,则Pk也可等价表示为

Pk={A1,A2,…,AN}.

(2)

显然,k个数据包可以被划分到N个动作中,每个动作都由若干个连续的数据包组成.使用Bi表示第i个动作中第一个数据包在Pk中的编号,则Pk又可以等价表示为

(3)

此时我们把数列BN={B1,B2,…,BN-1}称为动作序列Pk的动作边界.显然,动作边界已知与未知时采用的动作识别方法有所不同,而现有研究均只涉及已知动作边界下的识别.

实际情况中,从网络上收集到的流量并不包含能够确定动作边界的信息,我们无法将不同动作直接划分开.但在现有动作识别研究中,由于实验流量通常通过仿真模拟获得,研究者可以在数据生成时就人为对动作进行标注,这样相当于引入了关于动作边界的先验知识.而必须有先验知识的支撑,已知边界的识别方法才能够生效.

但同时也必须说明,对仿真数据进行人为划分得到的边界并不等同于动作边界.尽管上文通过数学语言对动作边界进行了严格定义,但现实中的网络通信流量却并不严格,2方面的原因导致数学上的动作边界与现实存在一定差异.

1) 背景流量.网络应用的客户端与服务器之间往往存在大量并不由用户主动触发的通信行为,我们将这些通信数据称为背景流量.这些背景流量的出现不可控,既可能存在于一个动作之内,也可能存在于不同动作之间,这使得动作流量不再纯净.

2) 动作交叉.尽管动作被定义为互斥的操作集,但这并不意味着动作产生的流量也在时间上互斥.流量具有一定的延续性,一个动作产生的数据在该动作结束时可能并没有传输完毕,这会导致该动作的流量溢出到下一个动作的范围内,从而产生动作交叉.

动作的不纯净与交叉使得准确的动作边界难以确定.因此,对仿真数据的人为划分也仅是动作分割的一种.而动作分割的方法则有多种,除基于先验知识的分割外,还可以是基于经验的分割,或者基于机器学习的分割.

在面对没有边界信息的动作序列时,动作识别的一种思路是先对原始流量进行动作分割,然后再进行识别.但本文并未采取这种方案,而是通过一种特殊的算法,同时得出动作的边界与分类结果,即同时完成了动作分割与动作识别.这种算法需要用到自然语言处理领域十分重要的自注意力机制,下一节将对这种机制的基本原理进行简要介绍.

1.3 自注意力机制原理

自注意力机制(self-attention mechanism)最初由Vaswani等人[24]于2017年提出,他们在文献[24]中详细介绍了自注意力机制的原理和基于这种机制构建的Transformer语言翻译模型.其中,自注意力的计算方法如图2所示:

Fig. 2 Self-attention calculation[24]图2 自注意力计算方法[24]

(4)

为自注意力机制的输出,i=1,2,3,4.

(5)

其中,I为注意力机制的输入矩阵,来自输入向量序列的组合;O为输出矩阵,即为输入向量赋予注意力分数后的序列组合.

从计算方法可以看出,自注意力机制的目的在于将序列中所有输入项的信息赋予其中每一项,即每一个输入项都可以使用全序列的信息进行推理,从而保证深度学习模型能够使用上下文信息对输入序列进行分类.在处理序列信息时,循环神经网络(recurrent neural network, RNN)通过重复模块上的状态传递来联系上下文信息,是一个时序逻辑;自注意力机制则通过一组运算同时完成全部输入项的信息共享,处理步骤更短,信息共享也更全面.但自注意力机制中的大量矩阵运算也提高了对算力的要求,当序列过长、向量位数过高时,时间开销将大大增加.

上述计算过程只完成了单头注意力的计算,但在自注意力模型的构建中,通常使用多头注意力(multi-attention),即使用多组参数矩阵计算出多个输出矩阵,然后再使用一个额外的参数矩阵与这多个输出矩阵的组合相乘,得到最终的输出矩阵.具体计算过程不再赘述,在应用中对自注意力头数的选择需要通过实验决定.

建立自注意力机制后,就可以在此基础上构造深度学习模型.注意力机制一般用于编码器-解码器模型当中,自注意力机制也是如此,其典型的模型结构可参考文献[24].其中值得注意的是位置编码(positional encoding)的操作,因为自注意力计算过程中没有包含位置信息,所以输入输出序列中的所有向量的有序性没有得到体现.即使将这些向量任意交换位置,算法的执行也不会受到影响,此时就需要用到位置编码.简单来说,位置编码使用特殊方法来生成一组具有唯一性特征的向量,每个向量都只在特定位置出现.将这组位置向量与输入向量序列按位置相加,就使得输入向量中包含了独特的位置信息.

2 基于自注意力机制的无边界动作识别算法

本文提出的无边界动作识别算法可分为包级识别与动作聚合2部分:包级识别从流量数据中得到已分类的数据包序列,动作聚合将数据包序列转化为动作类别序列.该算法的输入为原始动作序列,即若干个按时间排列的数据报文,输出为识别动作序列,即对原始流量的一个分割与识别,其处理流程为:

1) 对输入的原始动作序列进行向量化,得到输入向量集.

2) 对输入向量集进行包级识别.包级识别的对象为单个包向量,输入为处于当前包向量窗口内的一组包向量,识别模型为基于注意力机制的编码器-解码器,输出为该包向量的动作分类概率分布,最后取概率最大的动作类别为分类结果.包级识别完成后,得到已分类的数据包序列.

3) 对已分类的数据包序列进行动作聚合.动作聚合的对象为带有动作标签的数据包序列,输入为数据包动作标签构成的有序列表,处理过程为基于密度的聚合算法,输出为一个有序动作标签列表和一个动作边界.

2.1 基于自注意力机制的包级识别

包级识别的核心是自注意力机制,即通过联系上下文信息来对每个数据包进行动作识别.动作流量具有较为复杂的结构,而一个经过加密的数据包所携带的信息极少,因此我们无法只使用单个数据包本身来对其动作分类做出判断.但考虑到动作本质上是数据包的时间序列,如果将前后数据包的信息用于辅助数据包的分类,其效果将得到大幅提升.为此,本文使用了在自然语言领域中得到广泛应用的自注意力机制.

计算自注意力之前,首先需要进行数据包向量化.当使用自注意力机制来处理数据时,要求输入数据具有向量的形式,因此数据包无法直接作为输入,必须先转化为数值向量.参考语音识别领域应用自注意力机制的实例,数据包向量化有2种基本思路:包向量与帧向量.

包向量,即使用每个数据包的若干个特征数值来构成该数据包的表示向量.由于数据包经过加密,基于载荷的信息已无法提取,同时,为防止分类模型错误依赖具体的网络通信信息,报文头部的数据也应避免直接使用.于是,本文选择了数据包载荷长度、与上一数据包的时间间隔、数据包信息熵3个特征作为包向量的构成,即:

pi=(lengthi,intervali,entropyi).

(6)

帧向量,即将若干个数据包组合为一帧,为每个帧确定一个表示向量.首先,需要确定帧长度与帧间隔的取值,然后将数据包序列处理为帧序列.例如,取帧长度为10,帧间隔为2,则数据包1~10为第1帧,数据包3~12为第2帧,以此类推.在帧向量方法中,自注意力机制的输入数据不再是数据包,而是数据帧.此时,每个数据帧的表示向量可以取为其所包含数据包的特征,例如取数据包的长度为特征,则帧向量为该帧中所有数据包长度组成的向量.

尽管包向量与帧向量均可用于数据包向量化,但由于动作分类的结果应该精确到单个数据包,且每个数据包应该被学习的特征有多个,所以本文使用包向量来作为自注意力机制的输入数据.

完成数据包向量化后,就可以进行包级识别,即使用基于自注意力机制的深度模型识别出单个数据包的动作类别.自注意力机制通常使用全局信息进行推断,其直接应用于包级识别则是将整个动作序列所含的包向量纳入单个包向量的处理.这对于包级识别存在2方面的问题:1)全局信息的利用意味着较高的时间开销;2)对于动作分类而言,全局信息是不必要的,单个数据包至多只与当前动作之内的数据包相关.因此,本文只使用局部信息进行计算.由于自注意力的计算复杂度较高,缩减信息窗口长度也有助于降低开销.

Fig. 3 Construction of package-level identification model[25]图3 包级识别模型结构[25]

为满足序列到序列的识别需求,包级识别模型采用较为经典的编码器-解码器结构Vanilla Transformer[25],其结构如图3所示.每个数据包的包向量经过此模型处理,都会产生一个动作类别上的概率分布向量,我们按照深度学习的一般处理方法,将概率最大的一项确定为分类结果.

2.2 基于密度机制的动作聚合

动作聚合的目的是将一个有序动作标签长列表处理为有序动作标签短列表,这可以通过动作标签的相互合并来实现.因此,动作聚合的基本思路是在长列表上划分出若干个区间,区间内的所有动作标签被合并为同一动作,该动作即为该区间的属性.算法从确定一批小区间开始,然后让区间不断扩展、合并,最终在达到某些停止条件时不再变化,从而得到聚合后的短列表.

每个区间包含若干个动作标签,这些动作标签可能不尽相同,而每一种动作标签的数量占该区间动作标签总数的比例即为这种动作的密度.动作聚合算法中主要使用密度作为衡量指标来确定区间扩展、合并、停止的规则.

令输入列表为Sinput=(S1,S2,…,Sn),则基于密度的动作聚合算法可具体描述为:

1) 生成初始区间.给定初始间距D和初始区间半径R,从S1开始,每隔D项选取一个初始项,以每个初始项为中心、R为半径取为拟初始区间.给定密度阈值ρK,如果拟初始区间特征密度超过ρK,则将其确定为初始区间,否则删除该拟初始区间.

2) 区间扩展.已有的所有未停止区间要向左右2个方向进行扩展,扩展步长为1.若扩展成功则区间长度+1,扩展失败则步长+1并再次尝试,如果直到步长为4仍扩展失败,则该方向的扩展终止.判断扩展成功与否的标准为密度,取区间内所有动作标签中密度最大的作为区间属性.区间属性的密度则为特征密度,而扩展应该发生在特征密度的上升方向上,即若当前扩展使得区间的特征密度变大或不变,则扩展成功,否则失败.

3) 区间合并.对现有未停止区间进行扩展时,若被扩展项处于其他区间内,则触发区间合并.若合并成功,则这2个区间转化为一个区间,并以合并后密度最大的动作为属性;若合并失败,则当前扩展终止.判断合并成功与否的标准为密度,合并应该发生在特征密度不低于ρK的方向上,即若合并后区间的特征密度大于或等于ρK,则合并成功,否则失败.

4) 区间停止.当一个区间的两端均发生扩展失败或合并失败时触发区间停止,已停止的区间不再主动进行扩展,但可以被其他区间合并.

5) 强制归并.当全部已有区间陷入停止后,若整个列表中已不存在未被任何区间包含的自由项,则聚合完成,否则对所有自由项进行强制归并.处于任意2个区间之间的自由项首先进行自归并,即尝试使用这些自由项单独构成一个区间.若该区间的特征密度超过ρK,则自归并成功,该区间保留,否则失败.自归并失败后进行左右归并,这些自由项将被按比例分别归入左区间与右区间,该比例由左右区间的长度和归并后的特征密度决定.即计算出所有不同比例下,归并后左右区间特征密度的下降值,取左(右)区间长度占左右区间长度和的比值为右(左)区间的权重,求得左右区间特征密度下降值的加权平均值,而使得该平均值最小的比例为最终的归并比例.

6) 得到聚合结果.强制归并完成后,将所有最终区间的属性按序取出,构成一个新的动作标签列表,此即识别动作序列.另外,再将所有区间的左端点序号取出,构成一个数列,此即当前动作序列的动作边界.

值得一提的是,上述算法中存在2个较为特殊的处理:

① 变步长扩展.区间的扩展并不会在失败后立刻停止,而是进行多次增加步长后的尝试,这是为了防止出现欠扩展的情况.因为包级识别的精度并不特别高,所以动作聚合的输入数据也较为杂乱,不同动作标签混杂排布的情况十分常见.动作聚合的目的是找到动作标签的集中趋势,因此少数几个错误标签的存在不应影响聚合结果.若步长为1的扩展失败后立刻停止,则算法会被细微的标签错位限制,无法捕捉到更大范围内的动作集中趋势,这就是欠扩展.所以,本文采取累进步长多次尝试的策略,以此避免扩展停止过早触发.但是,如果累进步长的尝试次数过多,又有可能导致区间越过本应存在的边界,造成当前区间过长而邻近区间过短的问题,即过扩展.故而,同时考虑欠扩展与过扩展的情况,本文算法只进行4次尝试.

② 异步扩展.区间扩展是聚合算法执行的基础,上文虽然给出了扩展遵循的规则,但是并没有说明扩展发生的时机.一个简单的做法是,构造算法执行的大循环,每一次循环内,遍历所有区间,每个区间都分别尝试向左与向右的扩展,这可以称作同步扩展.虽然同步扩展实现简单,但是考虑到原始动作序列并不规则,而初始区间的选取是规则的,那么同步扩展可能会进一步加强区间的规则性,反而无法有效拟合数据.为增强扩展过程的随机性,本算法进行异步扩展,即为每个区间分配单独的线程,且线程每次运行只触发左右扩展各一次.

2.3 动作识别结果的评价方法

本文构造的无边界动作识别算法同时完成了动作的分割与识别,而这样的结果存在无法使用经典的精确率、召回率、F值等指标进行评价的问题.例如,表1展示了一个动作序列的识别结果,这样的结果显然无法直接计算精确率.表1中,字母A~F为动作代号,括号内的数字表示该动作在数据包序列中的起止位置.故而我们需要设计新的指标来对识别结果进行评价,并使其能够发挥与精确率类似的作用.

Table 1 An Example of Actions Sequence Identification Results

简单来说,衡量识别是否准确,只需要给出正确的识别结果所占的比例.按照这样的思路,新指标也必须能够刻画出动作识别结果中的正确比例.本文使用的无边界动作识别方法,实际上相当于同时完成了动作分割与动作识别,但对于这两者而言,判断正确的标准并不相同.

首先,对于动作识别,尽管动作序列是大量数据包的集合,但这些数据包并不出现在识别结果中,动作识别的结果只是动作标签的列表,而评估识别效果时也只需要考虑这些动作标签.此时,判断识别结果正确的比例相当于判断识别出的序列在什么程度上与原始序列相同,或者判断二者有多大的不同.而判断序列差异性的一个常用指标是最小编辑距离,即一个序列变换为另一个序列所需的最少步数.

其次,对于动作分割,尽管分割得到的结果是动作边界——一个数值向量,但如果仍使用最小编辑距离,则会使评价结果十分粗糙.因为动作边界向量的长度很短,而每一位的数值取值范围却很大.考虑到动作分割本质上是将一个长序列划分为若干个短序列的过程,故而可以使用原始划分与当前划分的偏差值来衡量分割的正确比例,此处的偏差即为动作边界对应位置数值之间的差值.

找到编辑距离与偏差这2种描述动作识别与动作分割差异性的指标,就可以按照相似的方法将其转化为识别精度,本文将其分别称为序列识别精度与流量识别精度.

1) 序列识别精度

构建序列识别精度,首先需要明确动作序列之间最小编辑距离的计算方法.最小编辑距离原本用于计算一个字符串如何通过最少的步骤变换为另一个字符串,变换的可选操作为添加、删除、替换.显然,若将每个动作标签表示为一个字符,则一个动作序列等同于一个字符串,此时即可直接运用最小编辑距离的算法.

但是,最小编辑距离是一个具体数值,并非0到1之间的百分比,无法直接作为识别精度使用.因此,我们使用相对最小编辑距离的概念.显然,识别动作序列与原始动作序列完全相同时,识别精度应为100%,而此时最小编辑距离为0.识别动作序列与原始动作序列完全不同时,识别精度应为0,此时,若识别动作序列长度大于原始动作序列长度,则最小编辑距离为识别动作序列长度;若识别动作序列长度小于原始动作序列长度,则最小编辑距离为原始动作序列长度.

因此,令序列识别精度为Prseq,最小编辑距离为dseq,原始动作序列长度为lo,识别动作序列长度为li,则有

(7)

2) 流量识别精度

构建流量识别精度,首先需要定义动作偏差的计算方法.动作偏差,即一个识别动作序列中的动作,与它对应的原始动作序列中的动作之间的偏差.要计算动作偏差,首先需要确定识别动作序列与原始动作序列之间的对应关系,本文使用就近原则.图4展示了动作序列之间对应关系与偏差的存在.

Fig. 4 Calculation of deviation图4 偏差值计算方法示意图

首先,将一个动作中排列在中心位置的数据包的时间戳定为该动作的中心点.然后,对比2个序列的动作的中心点位置,将原始动作序列中的动作对应到识别动作序列中动作标签相同且中心点距离最近的动作上.若不存在相同的动作标签,则对应为空.

完成动作对应后,即可在对应的动作之间计算动作偏差.偏差主要体现为原始动作超出识别动作所占时间区间的数据包个数,但直接将数据包个数作为偏差值,会使一个动作中的所有数据包处于同等重要的地位,而实际上并非如此.1.2节中提到,动作边界具有一定模糊性,尽管本文的识别方法使用了监督学习,但这也并不意味着原始数据中的动作边界就是精确值.现实中我们仅仅了解原始数据中动作的大致位置,而不能确定动作的确切边界,原始数据的动作边界只能看作特殊条件下的一个动作分割.这意味着只有靠近动作中心点的数据包是有明确动作标签的,而靠近边界的数据包属于左右哪个动作则是模糊的.因此,计算动作偏差时,一个动作内的不同数据包地位不同,这可以通过设置权重来体现.越靠近中心点的数据包权重越高,越靠近边界权重越低,这样可以构成一个权重函数.显然,权重函数不是线性函数,因为越靠近中心点或边界,邻近数据包之间的重要性差异越小,重要性的差异主要体现在中心与边界之间的区域.考虑到这样的特性,我们选择正态分布作为权重函数使用.

本文借助在数据包序列上建立的标准正态分布取权重,此时数据包之间的间隔视为相等.而由于数据包在时间上存在一定分布特性,所以将权重函数表示在时间轴上则会变形为不对称的单峰函数.

计算动作偏差时,需要考察2个动作所占的时间区间之间的偏移量.这样的偏移量通常会同时出现2个,即原始动作区间超出识别动作区间的部分,和识别动作区间超出原始动作区间的部分.但这两者是同一个偏移的2种视角,不应该被计算2次.因此,对于某一个识别的第h个动作,只考虑原始动作区间超出识别动作区间的部分,并将其表示为数据包序列{pih,pih+1,…,pjh},则该动作的动作偏差为

(8)

其中wk为第k个数据包的权重.

按照这样的计算方法可以得到2个序列之间每一对动作的偏差,若一个原始动作没有对应的识别动作,则该动作的偏差即为所有数据包全部偏离时的偏差.将这些动作的偏差进行加总,即得到动作序列的累积偏差,其可看作动作序列之间的偏差.

同样,具有具体数值的累积偏差无法直接作为精度使用,因此我们引入最大累积偏差的概念.其为当原始动作序列中所有动作均对应为空时的累积偏差,并将精度表示为

(9)

其中,N为序列中的动作个数,mN为这N个动作的所有数据包个数,等号右边第2项的分子为累积偏差,而分母为最大累积偏差,第2项即为动作序列之间的相对累积偏差.

3 实验结果与分析

为验证本文所提出的无边界动作识别算法的效果,我们需要选定网络应用,从应用中采集数据并建立用于监督学习的标签数据集.尽管可选的应用众多,但动作识别的方法并不与应用的具体选择相关.因此本文以中国最受欢迎的应用之一——微信为实例,来说明算法的可行性.

使用监督学习的方法训练动作识别模型,需要具有明确的动作流量—动作类别对应关系的标注数据.而实际场景中我们无法在采集流量的同时为其打上动作标签,且公开资源中也没有可靠的此类数据集.所以现有的动作识别研究通常使用仿真模拟来解决这一问题,本文也采用相同的方法.

首先,我们选定了设备、系统、软件版本、实验账户,并构建了一个实验网络环境.然后,我们对应用中可能出现的动作类别进行了选择与定义,并使用模拟操作脚本对这些动作进行仿真,使其尽可能接近真实情况.最后,我们部署了流量捕获程序,该程序既能够捕获流量,又能够根据时间关系将动作与流量关联起来.数据采集时,每次仿真会模拟用户执行一个动作序列,这些动作序列会在自动化处理后形成数据包序列—动作类别序列的对应数据.这样的一对数据称为一条记录,是实验数据集的基本单元.

然而,在微信的实际使用中,可能存在的动作序列是无穷的,我们不可能将其全部模拟出来.另外,完全随机的动作序列也没有实际意义,因为现实中的用户动作必然具有一定的逻辑关联性.因此,我们采用了一种折中的动作模拟方法:先预设若干种实际可能存在的动作序列模式,再按照不同模式分别进行模拟.

本实验中,我们选定了微信中的7种动作,并使用大写字母来表示它们: A—发送消息,B—转账,C—浏览公众号文章,D—查看新闻,E—浏览朋友圈,F—浏览看点,G—进入小程序.此时,一个动作序列即可用一个字符串来表示.同时,出于对真实场景及模型复杂度的考虑,我们将所有动作序列的动作数量控制在10以内,表2展示了15种模式下采集到的数据情况.

Table 2 Capture of Actions Sequence Traffic

实验数据集最终包含15个模式下共计781条动作序列的流量,每条流量以一个动作类别序列为标签.但这些数据并不按模式归类,而是随机乱序排列.

3.1 实验设计

本实验的目标为:1)验证包级识别模型的效果;2)验证无边界动作识别模型的效果.实验除需要对包级识别的深度模型参数进行调优外,并没有其他参数需要测定.尽管动作聚合算法中存在一些变量,但它们仅影响算法效率,对识别结果没有显著贡献.并且,由于目前尚不存在其他的无边界动作识别算法,本文没有设计对比实验,但是3.2—3.4节的实验数据与分析可以充分说明本文算法的有效性.

我们使用数据集的前70%对包级识别模型进行训练,使用后30%进行测试,这样得到的包级识别结果可以直接使用经典指标进行评价.此处验证包级识别效果,是为了评价深度学习模型的性能.

在包级识别的输出上执行动作聚合算法,即可得到动作识别的结果.我们使用序列识别精度和流量识别精度2个指标分别对识别结果进行分析,以说明模型的有效性.

3.2 包级识别结果分析

因为包级识别对每个数据包都进行一次识别,所以实验产生的绝对数值较大,此处仅对相对数值进行展示.表3展示了包级识别模型测试结果的精确率、召回率与F值.表中,一行的数据表示一种模式下的识别结果,其中精确率为该模式所含各类动作识别精确率的平均值,召回率与F值同理.

Table 3 Experiments Results of Packet-level Identification Model

从表3可以看出,包级识别的精度并不是很高,F值平均为64.9%,这可能是因为部分动作产生的数据包序列之间存在一定的相似性.

值得注意的是,包级识别的结果仅用于说明算法中使用的深度模型的性能,也仅是动作识别的一个中间结果,后续的动作聚合会在一定程度上对这一中间结果进行修正,从而获得更高精度.通过下文序列识别精度和流量识别精度的结果也可以看出,动作识别的最终结果相比包级识别结果有了显著的提升.

3.3 序列识别精度分析

在3.2节的实验结果基础上进行动作聚合即得到动作识别序列,图5展示了对识别序列计算序列识别精度的结果.通过图5可以看出,无边界动作识别的序列识别精度最高可达90%以上(模式4),其平均值则接近80%.

Fig. 5 Sequential precision of action identification without bounds图5 无边界动作识别的序列识别精度

不同模式下序列识别精度的波动很容易解释.因为序列识别精度是基于最小编辑距离得到的,它与动作序列字符串的具体形式关联紧密,所以序列识别精度的数值也对模式非常敏感.而部分模式下序列识别精度不够高的主要原因是序列识别中的动作丢失.因此改进包级识别算法可以进一步提升动作识别的序列识别精度.

3.4 流量识别精度分析

如果对3.3节中的动作识别结果计算流量识别精度,则可得到如图6所示的分布情况.

Fig. 6 Traffic precision of action identification without bounds图6 无边界动作识别的流量识别精度

由图5和图6可以看出,流量识别精度与序列识别精度表现出一定的正相关性,而这种特点是易于理解的.在流量识别精度的计算中,若识别动作找不到可对应的原始动作,则会直接计入该动作偏差的最大值.因此序列之间的编辑距离越小,越可能避免较大偏差值的引入.同时,我们也注意到,流量识别精度普遍低于序列识别精度,除计算方式引起的差异外,这也能说明动作边界存在一定的不准确性.

尽管流量识别精度作为一个更细致的评价指标,能够更好地体现出模型的识别精度,但从实用角度考虑,序列识别精度更有价值.动作识别关注的重点是用户行为,而流量数据是否被准确分割并不对此造成显著影响.换言之,只要对动作序列的识别是较为可靠的,动作边界的偏差在一定程度上可以忽略.因此我们主要使用序列识别精度来衡量识别结果的优劣.

综合算法的序列识别精度与流量识别精度来看,本文作为无边界动作识别的开创性工作,仍具有许多提升空间.但文本工作也已经在一定程度上可以支撑起实际场景中动作识别的应用,这可以大幅推动应用动作识别走向实用,以进一步保障工业互联网的安全.

3.5 算法开销

本文算法的开销主要来源于包级识别和动作聚合2个部分.其中包级识别使用Transformer模型,根据文献[24]中的分析,若数据包序列长度为n,包向量维度为d,则模型的单层复杂度为O(n2d).而在本文方法中,n为注意力窗口长度,d=3.另外,动作聚合部分,根据算法流程,若数据包序列总长度为N,则算法复杂度为O(N).因此,本文算法的训练开销主要由包级识别模型决定.

为定量描述本文算法的训练开销,我们选定了几个不同的注意力窗口长度,并对算法进行了测试,测试结果如表4所示.由于单个动作触发的流量通常只包含1 000~3 000个数据包,所以将窗口长度也选定在这个范围内.通过数据可以发现,窗口长度增加时训练开销显著增加,但包级识别的效果并未有显著提升,因此在本文方法中将窗口长度取为1 000.

Table 4 Average F-score and Training Cost of Package-level Identification

另外,Transformer模型相对于RNN模型的重要优势之一是空间换取时间,即通过增加内存开销来降低时间复杂度.因此,除计算开销外,算法的内存占用也值得注意.但与NLP领域处理的问题不同,数据包识别中向量维度低,序列长度短,故而内存资源的消耗并不明显.

4 结束语

本文针对现有动作识别模型在无边界条件下无法生效的问题,提出了先使用基于自注意力机制的深度学习模型进行包级识别,再使用基于密度的动作聚合算法得到结果的无边界动作识别算法.我们通过仿真模拟的方式得到数据,对该算法进行了实验测试,结果表明其具有一定的可行性与实用性.如果将这一算法用于现实中对工业互联网流量数据进行分析,则可以更好地发现可能存在的恶意行为和敏感信息泄露风险,从而提升工业互联网安全保障质量.

因为实际网络中流量并不带有动作边界信息,所以现有的动作识别方法只具备理论可行性,难以用于实践.而本文的成果使得动作识别的实用价值更进一步提升.但即便如此,动作识别仍然存在一些问题需要后续进行深入研究.例如:1)需要探索摆脱仿真模拟,使用现实网络数据验证动作识别模型的方法;2)需要探索背景流量对动作识别结果产生的影响;3)需要继续研究识别方法,对参数、模型、算法进行调整,尝试取得更高的识别精度.

除上述对动作识别方法本身的改进外,对动作识别实际应用的探索也是未来的研究重点.一方面,我们需要实现一种机制,能够在工业互联网流量中自动地分析与识别动作,并根据动作模式检测出当前用户是否正在执行恶意操作.另一方面,针对当前流量识别暴露出的隐私泄露问题,我们需要找到一种有效、通用,且不会明显增加网络传输成本的防御方法.

作者贡献声明:王冲负责本文研究方案和实验的主要构思以及论文主体的写作;魏子令参与方案设计、实验设计执行和论文的修改;陈曙晖参与实验设计、数据分析和论文修改.

猜你喜欢
数据包向量边界
基于时隙ALOHA与NOMA的通信系统性能分析
向量的分解
守住你的边界
有边界和无边界
C#串口高效可靠的接收方案设计
OF MALLS AND MUSEUMS
人蚁边界防护网
向量垂直在解析几何中的应用
网络数据包的抓取与识别
向量五种“变身” 玩转圆锥曲线