APP下载

一种面向加密流量的网络应用识别方法

2020-04-20孙中军翟江涛

计算机工程 2020年4期
关键词:字段数据流数据包

孙中军,翟江涛

(江苏科技大学 电子信息学院,江苏 镇江 212003)

0 概述

近年来,以僵尸网络[1]、高级持续性威胁(Advanced Persistent Threat,APT)[2-4]、木马[5]等为主要形式的网络攻击事件不断发生,用户对隐私保护和网络安全意识逐渐增强,使得加密流量在互联网流量中占比越来越大。安全套接层(Secure Socket Layer,SSL)协议具备良好的兼容性和易用性[6],因此网络应用大多使用SSL加密协议来保证信息在网络中安全的传输,针对其的识别研究也受到科研工作者的广泛关注。

当前国内外学者在加密流量识别领域取得了诸多研究成果。文献[7]计算未加密流量与加密流量的相关性,从相关性角度选取29种未加密流量与加密流量强相关的特征输入机器学习算法识别加密流量并取得了较好的效果,但是该方法选取特征多、计算量大,不能实现在线流量实时识别。文献[8]在国际公开ISCX VPN-nonVPN数据集上对数据包进行填充、截取等处理,无需提取特征并将数据包字节输入CNN算法模型进行识别,实验结果证明该方法能有效地进行流量分类识别。文献[9]根据加密数据的随机性特点,提出一种基于加权累积和检验的时延自适应加密流量盲识别算法,通过实验验证了该方法能有效区别加密流量。然而,上述方法通常只进行网络中加密流量粗颗粒的识别,但是随着流量分析需求的提高,仅识别流量是否加密远远不够,需要更进一步精细化识别加密流量的具体应用[10],实现对网络中流量的可控可管,同时由于安全性和兼容性的考虑,SSL协议的应用变得越来越复杂,如何有效进行精细化识别SSL协议下的网络应用已成为当前网络管理面临的挑战。本文提出基于SSL协议交互字段与多输入最大化单输出隐马尔可夫模型(Hidden Markov Model,HMM)的并行识别方法。

1 SSL协议与消息编码

SSL协议提供应用层和传输层之间的数据安全性机制[11],在客户端和服务器之间建立安全通道,对数据进行加密保护,从而保证数据在网络传输过程中的信息安全,SSL协议现已广泛应用于网络中。SSL协议分层及数据封装如图1所示,上层为SSL握手协议、SSL改变密码规则协议和SSL报警协议,下层为SSL记录协议[12]。

图1 SSL数据封装格式Fig.1 Format of SSL data encapsulation

SSL在客户端和服务器中的会话过程如图2所示。客户端与服务器相互问询并协商所使用的协议版本,选择加密算法;客户端服务器相互认证,协商加密密钥及其更改规范;协商完成后开始在加密的网络通道传输应用数据[13]。

图2 SSL会话过程Fig.2 SSL session process

为更方便地描述及识别具体的加密流量应用,本文对SSL协议会话消息按图3的方式进行编码。

图3 SSL会话编码表Fig.3 Encoding table of a SSL session

本文实验识别对象为SSL加密协议下的应用,相比传统的特征向量,本文方法采用SSL协议交互阶段的字段作为特征向量可靠性高,并且容易提取。本文实验根据SSL协议交互阶段的字段特点进行识别具体加密流量的应用,不同加密应用数据流在来自服务器端方向和来自客户端方向的SSL协议交互阶段的字段具有不同的出现规律,比如本文使用来自服务器端方向的网络流,则可以采用图4的方式表示2条来自某应用Y的流,其具有在C:3,C:6字段后出现A、C字段的特点,之后传输不同个数的应用数据包。

图4 加密应用消息编码流Fig.4 Coding streams of an encrypted application message

本文用X={X1,X2,…,Xn}表示网络流的集合,其中,X集合中包含n个网络流,Xi表示X集合中的一条网络流,Xi={Z1,Z2,…,Zk}表示Xi这条网络流的集合包括k个数据包,Zi表示其中的一个数据包,本文定义数据包为五元组Zi=,其中,No表示数据包序号,Source表示源IP,Destination表示目的IP,Protocol表示传输层协议,Info表示SSL协议交互子协议。Y={Y1,Y2,…,Ym}表示共有m个加密应用的集合,本文设计的识别模型功能即实现集合X到集合Y的映射,从而实现SSL加密流量应用的有效识别。

2 基于隐马尔可夫模型的加密应用识别方法

2.1 隐马尔可夫模型

隐马尔可夫模型[14]是关于时序的概率模型,满足“将来”的状态分布只取决于“现在”与“过去”无关的马尔科夫过程[15]和任一时刻的观测状态只与该时刻的隐藏状态有关的假设,其包含了一个底层隐藏的随时间改变的马尔科夫过程,可以看作是马尔科夫模型的概率函数。

隐马尔科夫模型的构建首先要初始化均匀分布模型;然后利用Viterbi算法求得第一次计算的状态序列;之后利用Baum-Welch算法[16]计算出第一次的五元组模型的参数ψ={S,O,A,B,π},其中,S表示隐藏状态的集合,N为隐状态个数,O表示观测状态的集合,M为观测状态个数,A表示隐藏状态的N×N的状态转移概率矩阵,B表示隐藏状态到观测状态的N×M的混淆矩阵,π表示隐藏状态的初始化概率矩阵;最后用重估公式判断是否收敛,若没有收敛则继续不断的迭代计算,否则即可得到最优的模型参数。具体模型的建立过程如图5所示。

图5 隐马尔科夫模型建立过程Fig.5 Establishment process of HMM

2.2 面向加密流量的应用识别方法

传统模型在识别加密应用时通常存在特征提取困难和特征冗余的问题,而本文方法采用SSL协议交互阶段的字段作为隐马尔科夫模型的观测序列O=(O1,O2,…,Ot),相比较传统方法的特征,SSL协议交互阶段的字段容易提取,且避免了过多的特征带来的特征冗余问题,继而造成特征偏置降低模型分类性能和效率。因此,本文提出一种基于SSL协议交互字段的多输入最大化单输出HMM并行识别框架。该框架只需观察来自客户端或者服务器单方向数据流的SSL协议交互阶段字段序列作为隐马尔科夫的观测序列,通过对均匀分布的初始化模型不断迭代训练学习,找到最佳的模型λ,从而获得与观测序列最匹配的隐藏状态。该观测序列与隐藏状态并不是一一对应的关系,而是存在概率的对应关系,即通过前向算法得到最大的P(λ|O),利用隐马尔科夫模型的双重随机性可以达到识别加密流量应用的目的。多输入最大化单输出的HMM并行识别流程(如图6所示)具体如下:

1)通过电脑开启无线热点功能,用智能手机连接无线热点并访问应用服务器,同时用Wireshark捕获手机访问应用服务器的数据包作为原始数据集。

2)进一步对原始数据集进行预处理,过滤丢弃非SSL数据包,提取SSL数据包五元组存入数据库,并对SSL交互协议字段排序连接去重,最后构成SSL网络流实验数据集。

3)对待识别的所有应用建立模型形成指纹库。获取观测序列样本并输入每个HMM模型,利用前向算法计算得出该加密应用被识别为每个HMM模型的概率,并进行对数变换以避免得出的概率值太小导致数值太密集。

4)随机选择每种应用的100个样本特征输入每个HMM模型进行比较,取所得的最小的概率值作为阈值。

5)将求得概率与阈值进行比较,若得出的概率小于阈值的样本,则反馈给模型,表示模型不存在该应用;若大于阈值,则取概率最大的模型对应的应用作为识别结果,表示应用识别成功。

图6 多输入最大化单输出的HMM并行识别流程Fig.6 Procedure of HMM parallel identification with multipleinputs and a maximal single output

3 实验结果与分析

3.1 实验环境

本文实验的主机配置:操作系统为Windows 7专业版,CPU为四核Intel(R)Core(TM)i5-3230M CPU @2.60 GHz,8 GB内存。第三方软件及API包括VMware Worksation 12、Ubuntu 16.04、Wireshark 2.2.1、MySQL 8.0.13、Python 3.6.4、scapy-ssl、hmmlearn等。

3.2 实验数据集

3.2.1 数据集预处理

本文实验的数据集预处理流程如图7所示,首先通过智能手机连接无线热点捕获原始数据集,进一步过滤丢弃非SSL数据包,提取SSL数据包五元组存入数据库,并对SSL交互协议字段排序连接与去重,最后构成SSL网络流实验数据集。

图7 数据集预处理流程Fig.7 Procedure of dataset preprocessing

3.2.2 数据集获取

为测试本文方法检测加密应用的准确性,实验数据集来源于实验室真实网络。如图8所示,通过智能手机连接无线热点访问应用服务器,并用Wireshark捕获支付宝、新浪微博、印象笔记、前程无忧51Job这4种SSL加密应用流量数据包,实验数据集信息如表1所示。

图8 数据集获取示意图Fig.8 Schematic diagram of dataset acquisition

表1 实验数据集设置Table 1 Setting of the experimental dataset

3.2.3 SSL过滤

由于流经网卡的数据包有多个网络应用,而并非每个应用都使用SSL协议加密数据包,因此捕获的流量有很多是与本文实验无关的非SSL数据包,需要进一步过滤处理获得纯净的实验数据集。

本文实验根据网络流的前3个数据包字节判断过滤SSL数据包,其中,biti[x]表示包i中的第x比特,biti[x:y]表示包i中的第x比特至第y比特,令Bytei[z]表示包i中的第z个字节,Sizei表示包i的大小。过滤算法的伪代码如下:

If bit2[0]=1 and bit2[1]=0 and bit2[2:15]=Size2 and Byte2[3]=4

This is an SSLv2 connection

Else If Byte2[1]=22 and Byte2[2]=3

If Byte2[3]=0

This is an SSLv3.0 connection

Else If Byte2[3]=1

This is a TLS connection

Else Connection is not using SSL

Else Connection is not using SSL

3.2.4 网络流构成

对于过滤出数据集的SSL加密网络数据流,本文提取数据包的五元组信息并存入Mysql数据库。由于网络等原因SSL协议交互阶段存在重复发送的现象,因此需要进一步去除重复交互字段提高实验效果。

通过大量的数据包统计和SSL协议设计的特点,发现加密应用的SSL会话由“Server Hello”开始,因此可以按照Info字段的值,“Server Hello”将不同会话的数据包分割构成隐马尔可夫模型的观测序列。本文设计的多输入最大化单输出HMM识别框架仅需对来自一个方向的网络流进行分析,实验选取服务器到客户端的数据流作为研究对象,最终获取的实验数据集样式如表2所示。

表2 实验数据集样式Table 2 Format of the experimental dataset

3.2.5 数据集标记

本文实验采用逆向域名解析系统(Reverse Domain Name System,RDNS)和人工标记相结合的方法标记数据集。RDNS是域名解析系统的逆向解析过程,能够根据输入的IP地址,获取该IP的归属信息。本文系统使用Linux的nslookup命令解析IP,如命令nslookup qt=ptr 110.75.130.49解析结果为49.130.75.110.in-addr.arpa name=host-49.alipay.com,则将IP 110.75.130.49标记为支付宝应用,但是并不是所有的IP都能用RDNS得到IP的归属信息,对于这部分的应用采用人工标注的方法,在连接到无线热点的智能手机上,仅启动目的应用,从捕获到的数据包中利用排除法确定目的应用的服务器IP。

3.3 结果分析

3.3.1 评价指标

为客观评价本文方法的性能,选择准确率(True Positive Rate,TPR)和虚警率(False Positive Rate,FPR)这2项评价指标,准确率是所有预测正确样本占总样本的比重,虚警率是反映被判为正例样本中负例样本数量的比重,计算公式为:

TPR=Tp/(Tp+Fp)

(1)

FPR=FP/(FP+TN)

(2)

其中,Tp表示目的加密应用的样本被正确识别的个数,Fp表示真实是非目的加密应用但被正确标识为目的加密应用的个数,TN表示真实是非目的加密应用被错误标识为目的加密应用的个数。

3.3.2 不同方向数据流的比较

如图9所示,来自服务器单方向(SC)数据流和两个方向(SC-CS)的数据流在本文方法中都具有良好的识别效果,由于SC单方向数据流相对于SC-CS方向数据流模型计算量小,考虑到模型时间效率和计算机的资源开销,本文采用只观察来自SC单方向数据流来识别加密应用,这更符合对加密应用的实时识别需求。

图9 不同方向数据流的准确率比较Fig.9 Comparison of true positive rate of data streams indifferent directions

3.3.3 与传统识别方法的比较

图10、图11是本文提出的基于SSL协议交互字段与多输入最大化单输出HMM的并行识别方法与文献[17-18]识别方法的实验效果对比。本文方法通过对数据集按7 ∶3的比例随机划分训练集和测试集,经过多次实验验证其对加密应用识别的平均准确率和虚警率分别为95.78%和5.16%,较文献[17-18]识别方法在平均准确率上分别提高了5.66%和2.46%,同时在平均虚警率上分别下降了3.19%和2%,各项性能指标均优于已有的加密应用识别模型。对本文方法识别失败的样本进行分析可知,少量数据流存在某个SSL会话字段的发送失败,这就造成了不同加密应用的特征模糊化,降低了模型识别效果。文献[17]将网络流的前15个数据包的大小、包间间隔和流的方向作为特征输入C4.5算法分类器,对加密应用识别的平均准确率和虚警率分别为90.12%和8.35%,但是该方法很容易通过修改数据包大小,从而达到规避模型识别的目的,导致模型识别加密应用失败。而本文采用SSL协议交互阶段的字段作为隐马尔科夫模型的观测序列,很难将非法数据包伪装成合法数据包,具有较好的安全保障。文献[18]先去除原始数据零负载的数据包预处理操作,并设置Brust Threshold为1 s,进行Service Brust后提取特征通过多分类器融合分类,对本文实验数据集的加密应用识别的平均准确率和虚警率分别为93.32%和7.18%,但该方法所提取的时间流特征容易受到网络波动的影响,可靠性较低,同时存在部分加密应用的流特征表现相似的问题,从而导致模型不能进行准确识别,造成模型之间识别效果的差异。

图10 3种识别方法的准确率比较Fig.10 Comparison of true positive rate of threeidentification methods

图11 3种识别方法的虚警率比较Fig.11 Comparison of false positive rate of threeidentification methods

3.3.4 鲁棒性分析

为测试识别方法的鲁棒性,本文实验通过数据集新加入百度贴吧、有道云笔记应用模拟出现新的未知SSL加密应用。本文设计的识别方法具有一定的自主学习能力,只需将未知序列进行不断迭代训练得到新的HMMi,无需对其他已经建立的HMM进行重新训练,这样既节约了时间,又方便应用指纹库的管理。如图12所示,本文方法对加密应用的平均识别准确率和虚警率分别为95.51%和5.42%,可以看出其在有干扰的情况下总体表现稳定,并且具有良好的鲁棒性。

图12 本文方法在未知加密应用下的识别性能Fig.12 Identification performance of the proposed methodunder unknown encrypted applications

4 结束语

本文对原始数据集进行过滤与去重处理以构成SSL数据流,使用逆向域名解析系统和人工标记相结合的方法标记实验数据集,根据不同加密应用在SSL协议中的会话特征构建单个隐马尔可夫模型到多个隐马尔可夫模型的集合,从而提出一种基于SSL协议交互字段与多输入最大化单输出HMM的并行识别方法。实验结果表明,该方法只需观察来自客户端或者服务器单方向数据流的SSL协议交互阶段的字段序列即可完成模型建立和加密应用识别。但由于实验处于简单的网络环境,本文方法仅可应用于某些特定的安全传输协议(如SSL协议)的加密应用分类中,因此下一步将考虑在更复杂的网络环境中研究加密应用识别问题。

猜你喜欢

字段数据流数据包
图书馆中文图书编目外包数据质量控制分析
二维隐蔽时间信道构建的研究*
汽车维修数据流基础(上)
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
汽车维修数据流基础(下)
C#串口高效可靠的接收方案设计
基于数据流聚类的多目标跟踪算法
CNMARC304字段和314字段责任附注方式解析
北医三院 数据流疏通就诊量
无正题名文献著录方法评述