基于现代网络的深度学习应用协议识别技术研究与实现

2018-01-19 11:35叶松
软件导刊 2018年10期
关键词:入侵检测深度学习

叶松

摘要:在高速网络环境下,随着用户对端口的自由使用,点对点网络及加密协议开始得到广泛应用。通过创建一个网络协议分析库,深入网络数据包,进行深度学习的应用层协议分类与分析识别,以提高协议检测的准确性。根据大量主流应用程序的流特征进行深度学习,建立应用协议特征库,通过算法实现应用层协议的识别。研究一种应用于APT攻击防御系统、网络入侵检测系统与Web审计系统的应用层协议识别技术,可提高对APT攻击防御判断的准确性。

关键词:深度学习;应用协议识别;APT攻击防御;入侵检测

DOIDOI:10.11907/rjdk.181170

中图分类号:TP393

文献标识码:A 文章编号:1672-7800(2018)010-0194-06

英文摘要Abstract:In the high-speed network environment, with the free use of the port, the application of the point to point network and encryption protocol is also coming. By creating a network protocol analysis library, deep network data packets, and the application layer protocol classification and recognition of the depth learning, in order to improve the accuracy and universality of the protocol detection. According to the flow characteristics of a large number of mainstream applications for in-depth learning, the establishment of application protocol feature library, through the algorithm to achieve application protocol recognition technology. The application layer protocol high efficiency recognition technology used in the APT attack defense system, the network intrusion detection system and the Web audit system can improve the accuracy of the defense judgment of the APT attack.

英文關键词Key Words:deep learning;application level protocol identification;advanced persistent threat;intrusion detection

0 引言

传统网络协议分析仅限于利用数据包包头与端口进行协议识别,但在高速网络环境下,随着用户对端口的自由使用,P2P(点对点)网络以及基于HTTP封装的加密协议开始得到广泛应用,识别应用层协议变得非常困难[1-2]。传统网络协议分析系统大多只能根据端口简单区分应用层协议,即使有些分析工具能对部分应用层协议内容进行分析,也只能分析HTTP或简单的应用层协议。本文通过深度解析UDP、TCP负载内容,深度学习并分析HTTP头部指纹信息以及负载内容,通过一套高速算法实现对现代网络应用协议的识别[3]。

传统网络安全设备,如防火墙、入侵检测系统,甚至是近期出现的APT攻击防御系统等,如果应用协议识别缺乏深度学习过程,则无法针对目前层出不穷的网络安全问题进行高效、可靠的防御。具体表现如下:

(1)误报率高。随着应用层协议越来越丰富,同一端口上可能运行着多种协议,即使是同一种HTTP协议,也有着丰富的、更加具体的应用层协议内容。另外,原有的入侵检测规则在某种特殊的应用层协议(如SINA、360后台)下可能是正常数据,并非攻击事件,该情况出现得越来越多。因此,需要进一步分析更深度的协议信息,以排除误报。

(2)信息不全,无法分析。传统的APT攻击防御无法体现具体关联信息,只能简单显示FTP、HTTP等协议信息,而无法分析具体的攻击手段与应用工具,如变种木马等。使用细粒度的应用层协议分析,可以对各种攻击手段与变种工具进行细化分析。

(3)效率偏低。传统的入侵检测系统或APT攻击防御系统,在未知细粒度应用层协议情况下都需要进行检测,而大量网络应用、视频等应用层协议不需要进行内容检测,将其加入白名单协议表,可以提高检测性能。

深度学习具体方式如下:①深度学习TCP Payload(负载)数据结构;②深度学习UDP Payload(负载)数据结构;③针对HTTP头部数据结构建立指纹库;④深度学习HTTP Payload(负载)数据结构[4-6]。

1 分析检测分类

传统应用协议分析基本上只是根据端口对协议进行简单分析,一方面对于常见应用协议(如SSH、FTP、SMTP、Telnet、HTTP等)而言,大多数分析都是简单有效的,但如果换了端口,这些应用协议则无法被检测出来;另一方面随着具体应用协议(如微信、阿里旺旺、支付宝、百度插件、360安全、迅雷看看等互联网实时流媒体传输协议)[7]越来越多,用户也越来越多,需要对各个Payload的负载内容进行详细分析。本文重点在于对不同Payload数据分支进行分析,利用哈希算法[8]与模式匹配算法[9]快速实现协议解析,具体分为以下几类:

(1)TCP协议带Payload检测函数。包括:①基于HTTP基础的协议,例如微信、阿里旺旺等;②网站协议。包括购物、行业企业、交通旅游、教育文化、生活服务、视频与直播、体育健身、网络科技、新闻媒体、休闲娱乐、医疗健康、政府组织等网站协议;③即时通讯、网络视频、网络音乐、网络游戏、P2P下载等点对点协议;④Oracle、Mssql、Mysql、PostgreSQL等常见数据库协议;⑤其它协议。

(2)TCP协议不带Payload检测函数。优先进行端口分类识别,然后进入深度内容学习,利用AC-BM模式匹配算法。

(3)UDP协议带Payload检测函数。包括部分即时通讯协议与其它应用层协议,然后进入深度内容学习,利用AC-BM模式匹配算法。

(4)UPD协议不带Payload检测函数。优先进行端口分类识别。

(5)其它协议检测函数。

2 规则研究库建设

規则研究库建设步骤如下:

(1)对研究库进行主动深度分析,建立干净无网络访问的系统,以避免其它网络应用的干扰。通过Wireshark与IPMonitor工具对多种类型的网络应用行为进行抓包分析,然后将不同场景下抓取的数据包进行对比,得出正则表达式形式的应用层协议特征,对协议特征进行归纳总结、分类建模,并导入规则库。详细过程如下:①将交换机设置为镜像监听口,监听系统打开Wireshark,运行捕包;②以微信为例,试验设备登录微信,发送一条简单消息;③Wireshark停止捕包,开始分析数据,根据端口、TCP/IP协议类型判断是否为HTTP协议,获取所有头部信息,建立深度学习指纹库,验证HTTP负载内容有无特征码,将分析结果导入规则库。

(2)对研究库进行被动深度分析,实验期间将出口数据接入识别引擎,将未知协议保存为原始会话PCAP包,作为后续筛选分析依据。按以下层次保存为树文件模式:网络协议→端口→关键选项内容正则表达式[9]。根据大流量优先分析原则,被动选择分析协议,同时查看是否为应用层协议,如果是,则对研究库进行主动深度分析。

(3)收集信息,建立研究库。收集国内外各大网站信息,其中以国内网站信息为主,并进行排名统计,同时收集各种主流应用协议。

规则内容部分有:①端口;②网络协议;③TCP Paylaod指纹内容(包含内容起点、终点字节或PCRE正则表达式);④HTTP头部内容(包含HTTP URL关键字、域名关键字、请求报文、Cookie关键字、User_agent、HTTP请求方法、返回报文、内容关键字与HTTP状态码);⑤HTTP指纹内容(包含内容起点、终点字节或PCRE正则表达式)。其中PCRE正则表达式不推荐使用,但对于非常复杂的语法规则,其有利于规则编写的简单化。

部分应用层协议列表如表1所示。

3 算法处理

本文研究目标是在庞大的现代网络流量中,实现对近千种应用层协议的分析。因此,需要一套高速算法实现对应用层协议的精确识别,主要包括以下两种算法:

(1) 哈希表快速查找算法[8]。它通过将关键码映射到表中某个位置进行记录访问,以加快查找速度。若关键字为k,则其值存放在f(k)(哈希算法值)的存储位置上。给定表M,存在函数f(key),对任意给定的关键字值key,将其代入函数后,若能得到该关键字记录在表中的内存地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash)函数。若关键字为k,则其值存放在f(k)的存储位置上。因此,不需要进行比较,便可直接获取所查记录,称该对应关系f(k)为散列函数,按该方法建立的表为散列表。对于不同关键字,可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),该现象称为碰撞。因此,需要制定合理的哈希算法以减少碰撞。本文哈希值算法是采用SHA1算法实现的。SHA1算法采用NIST NSA进行设计,其对长度小于264位的输入,产生长度为160bit的散列值,因而其抗穷举性能更好。哈希表包括:①会话哈希表。其能够快速得知会话历史状态,是实现下步分析跳转的关键,如果是已完成分析的会话,后续将不再进行检查分析。对不同状态的会话,可快速定位其下步流程函数。本文以源IP端口加目标IP端口的数据结构作为关键字,通过32位哈希算法值建立哈希表;②HTTP协议库哈希表。将HTTP的头部选项作为哈希关键字,通过32位哈希算法值建立哈希表。其缺点是需要大内存的硬件设备支持,内存要求至少为4G以上,建议使用8G内存硬件。

(2)AC-BM模式匹配算法。它将待匹配的字符串集合转换为一个类似于Aho-Corasick算法的树状有限状态自动机,但其构建时不是基于字符串的后缀而是前缀。匹配时,采取自后向前的方法,并借用BM算法的坏字符跳转(Bad Character Shift)与好前缀跳转(Good Prefix Shift)技术。坏字符跳转即当字符串树中的字符与被匹配内容x失配时,将字符串树跳转到下一个x出现的位置,如果x的字符串树不存在,则将字符串树向左移动最小字符串长度;好前缀跳转即当字符串树中的字符与被匹配内容x失配时,将字符串树跳转到字符串树中一个与被测正文部分等同的位置。该等同部分可以是字符串树中某字符串的子串(子串跳转),也可以是一个字符串后缀(后缀跳转)。当既有好后缀跳转又有坏字符跳转时,则判断如果有后缀跳转,即使用好前缀跳转(子串跳转与后缀跳转的最小值),否则使用好前缀跳转与坏字符跳转的最大值。该算法主要用于TCP与UDP的Payload负载内容,以及HTTP无关头部信息的Paylaod负载内容匹配。

4 实现过程

本文技术实现是在Linux Centos6.4系统上进行的[10],开发语言为C语言,开发调试工具为Eclipse,以计算机网络高级教程作为开发指导[11]。实现具体步骤如下:

步骤1:初始化识别引擎,读取配置文件,再初始化内存分配与数据结构。

步骤2:读取前期建立的规则研究库,初始化链表,注册对应每个规则识别函数,读取每个规则库关键信息。TCP/IP应用层协议分析包括对网络层协议信息、端口信息、可选部分服务器信息、可选部分Paylaod负载信息,以及对应内容模式指纹、可选部分HTTP头部信息指纹、可选部分Http Paylaod负载信息指纹等的分析。规则库注册内存按树结构进行分类,先按端口进行分类,建立65 535个数组的快速分拣结构表,再根据网络层协议进行分类,下层树是HTTP头部指纹哈希表,最后末树节点为Paylaod负载指纹信息[12]。

步骤3:完成Libpcap初始化工作,打开网络设备,设置过滤规则,捕获数据并进入监听模式。Libpcap读取网卡PC AP数据,根据端口进行分组分拣;然后根据会话的四元组(源IP、源端口、目标IP、目标端口)建立会话哈希表,查找会话哈希表是否已存在,如果不存在,則建立新会话节点,并得到该会话信息的哈希节点状态,具体分为:①初始化建立状态;②完成协议识别状态;③TCP内容模式匹配状态;④UDP内容模式匹配状态;⑤HTTP头部指纹学习状态;⑥HTTP内容学习状态。

步骤4:对于新建立的会话哈希节点,先根据默认端口对应的识别流程进行快速识别。若识别失败,则进行非默认端口的TCP或UDP、Payload识别。对于Payload内容,优先考虑使用模式匹配算法,以快速实现对Payload内容的识别。对于无可用模式匹配的规则内容,则采用应用层异常检测方法[13]。根据应用层协议关键词以及对动态应用层协议[14]、正则表达式应用层协议的识别,建立检测内容。以下是Payload识别初始化函数:

void Payload MatchInit(char *data, contNode * con, int protocol)

{ PatternContData *pcd;

char *data_end;

char *data_dup;

char *opt_data;

int opt_len = 0;

char *next_opt;

pcd = NewNode(con, PATTERN_MATCH);

lastType = PATTERN_MATCH;

data_dup = myMalloc(data);

data_end = data_dup + strlen(data_dup);

opt_data = PayloadExtParameter(data_dup, &opt;_len);

ParsePattern(opt_data, con, PATTERN_MATCH);

next_opt = opt_data + opt_len;

fpl = AddOptFuncToList(CheckANDPatternMatch, con);

fpl->type = RULE_OPTION_TYPE_CONTENT;

pcd->buffer_func = CHECK_AND_PATTERN_MATCH;

fpl->context = pcd;

// 循环读取每个Payload规则节点

while (next_opt < data_end)

......

}

步骤5:TCP Payload在进行识别时,如果是非HTTP协议,且识别成功后,会修改会话哈希表结点状态,完成协议识别;如果是HTTP协议,则继续下一步,进入HTTP头部与内容识别。

步骤6:在HTTP协议基础上进行识别,对包含关键字、域名关键字、请求报文、Cookie关键字、User_agent的HTTP URL结构,建立HTTP关键字哈希表。规则中如无HTTP内容,则利用关键字的哈希表进行快速匹配,直接完成应用层协议识别。对于无法识别的协议,将应用层协议标识为HTTP协议;对于成功识别的协议,修改会话哈希结点状态为成功,并对HTTP Payload部分使用模式匹配算法快速实现Payload内容识别,识别成功后,再修改会话哈希结点状态。

步骤7:对于协议解析失败的会话,按IP端口树结构保存会话PCAP,作为后续入库分析样本。

分析流程如图1所示。

以微信数据包识别为例,实现步骤如下:

(1)建立规则库。具体过程为:①建立纯净的网络环境,在此基础上先打开Wireshark进入捕包状态,然后多次登录微信,发送微信信息,建立微信PCAP包目录文档,并保存对应的PCAP包信息;②用Wireshark打开 PCAP包[15](对于微软公司的应用,使用IPMonitor工具打开),利用追踪流功能查看该会话内容;③查看会话端口与TCP层结构,得到几个会话端口都为80端口,然后查看网络协议,得到TCP协议,最后查看上一层协议,得到HTTP协议;④HTTP头部信息分析,GET:/mmsns/。。。;HTTP/1.1;Host: shmmsns.qpic.cn;X-Online-Host: shmmsns.qpic.cn;referer: http://weixin.qq.com/?。。。User-Agent: Dalvik/2.1.0(安卓系统)Accept-Encoding: gzip。根据相关内容建立指纹信息,保存到规则库;⑤经分析发现,微信是建立在HTTP协议基础上的,由HTTP头部信息已足以辨别出该协议;⑥Payload内容分析,获取Get操作内容的关键指纹(非必选),服务器回应Paylaod信息(非必选)。

(2)引擎检测。具体过程为:①对于网卡捕获的每条PCAP包,先查找会话哈希结点。如果是首次出现的会话,插入会话4元组的哈希表节点:10.4.6.198:56614 --120.120.0.150:80,同时初始化哈希信息状态为建立状态;②更改结点状态信息,根据80端口优先的检测原则,进入TCP Payload负载状态;③得到HTTP协议,进入HTTP选项哈希表,得到哈希表结构信息如下:Host: short.weixin.qq.com;User-Agent: MicroMessenger Client;User-Agent: Dalvik,其它为可选信息;④匹配到微信协议,则无需再进行HTTP Payload檢测,更新会话哈希表结点状态为完成,将该会话信息结构保存到数据库;⑤会话结束,删除哈希表结点。

微信数据包识别结果如图3所示。

5 结语

基于现代网络的深度学习应用协议识别需要花费大量时间,且后期需要不断更新完善,但其具有重要意义与广阔的应用前景,具体如下:

(1)可实现600种以上的应用层协议解析,后续根据定义好的库文件要求,还将不断添加新的协议库。

(2)将识别的应用层协议添加到APT攻击防御相关系统中,使用部分协议为白名单应用规则,可排除大量误报信息,同时过滤其检测,从而提高系统性能。

(3)应用层协议可作为网络入侵检测与APT攻击防御的关键检测信息,并为后期的大数据分析提供攻击热点与关联信息。对于深度学习的应用层协议,可为网络信息内容审计[16]提供一个重要的内容快速索引项,也是网络信息内容审计中的一个重要参考依据。

参考文献:

[1] 中国网络空间研究院.世界互联网发展报告2017世界互联网大会蓝皮书[M].北京:电子工业出版社,2017.

[2] 白哲哲.基于P2P的跨平台即时通信软件的设计与实现[D].成都:电子科技大学,2014.

[3] DAVID GOURLEY.HTTP权威指南[M]. 陈涓,赵振平,译.北京:人民邮电出版社,2012.

[4] 凯文 R 福尔.TCP/IP详解(卷1:协议)[M].吴英,张玉,许昱玮,译.北京:机械工业出版社,2016.

[5] 赖特.TCP/IP详解(卷2:实现)[M].吴英,张玉,许昱玮,译.北京:机械工业出版社,2014.

[6] W RICHARD STEVENS. TCP/IP详解(卷3:TCP事务协议、HTTP、NNTP和UNIX域协议)[M].胡谷雨,吴礼发,译.北京:机械工业出版社,2011.

[7] 李昕.互联网实时流媒体传输关键技术的研究[D].北京:北京交通大学,2010.

[8] THOMAS H CORMEN.算法导论[M].殷建平,徐云,王刚,译.北京:机械工业出版社,2013.

[9] 李亮亮.AC_BM多模式匹配算法分析与改进[D].合肥:合肥工业大学, 2012.

[10] 宋敬彬.Linux网络编程[M].第2版.北京:清华大学出版社,2014.

[11] 吴功宜,吴英.计算机网络高级教程[M].北京:清华大学出版社,2015.

[12] 杜晓春,刘婉妮,王宏.TCP/IP应用层协议分析与C++实现[J].电子测试,2013(12):86-87.

[13] 谢柏林,余顺争.基于应用层协议关键词序列的应用层异常检测方法[J].计算机研究与发展,2011,48(1):159-168.

[14] 王杰,石成辉.基于正则表达式的动态应用层协议识别方案[J].计算机工程与应用,2010,46(18):103-106.

[15] 高凯,赵登攀.PCAP文件格式网络数据包分析软件设计与实现[J].软件导刊,2013(12):150-151.

[16] 孙钦东,管晓宏,周亚东.网络信息内容审计研究的现状及趋势[J].计算机研究与发展,2009,46(8):1241-1250.

(责任编辑:黄 健)

猜你喜欢
入侵检测深度学习
多Agent的创新网络入侵检测方法仿真研究
有体验的学习才是有意义的学习
MOOC与翻转课堂融合的深度学习场域建构
大数据技术在反恐怖主义中的应用展望