夏 琨,丁 波,刘 俊,刘子豪,林亮成
(1.国网宁夏电力公司,宁夏 银川 750001; 2.北京中电普华信息技术有限公司,北京 100085)
协议识别问题一直是计算机网络安全领域的热门研究。各种操作系统的网络协议从理论上说应该是相同的,一般是标准化的,但实际上各种网络协议在应用过程中存在一些差别,网络协议的“指纹”就是指这些细小的差别[1]。越来越多的研究证明网络协议指纹识别技术可应用于计算机网络安全领域。行为管理、应用性能分析、恶意攻击检测、应用安全网关、数据监测等很多环节,都离不开对网络数据内容的分析,而分析网络数据内容,网络协议的识别是前提。
网络协议识别目前主要面临以下问题:通用计算机结构的计算处理方式越来越无法满足网络在线计算处理的速度要求,研究更高效的网络处理技术与计算处理结构有着重要意义[2];各种各样的新应用随着网络技术发展不断出现,使得网络协议的类型也越来越多[3]。这些新的协议有一部分是私有协议,有一部分是根据开源协议来设计的,这些不定因素都给网络协议的识别分析带来了挑战;由于目前不是所有的协议都在IANA中注册使用端口,并且还有多个应用程序可能使用一个被注册的端口号,以及服务器的端口有时是动态分配的,这都使得只采用端口识别的网络协议识别技术越来越受到限制[4]。
针对上述问题,本文研究基于内容分析的网络协议识别技术,包括网络协议的结构化定义、深度包网络协议识别技术以及正则表达式的优化改进。在此基础上开展基于协议指纹匹配和协议规则验证的协议自识别技术研究,进行协议指纹的提取,建立协议指纹库,实现对未知协议的识别。最后对协议自识别技术进行分析与评估,改进自识别技术及算法,提高识别效率和准确率。
网络协议通常分不同层次进行设计,每一层负责不同的通信功能,这样可以简化网络设计,提高网络设计效率。TCP/IP协议族被广泛应用于网络数据传输,已成为事实上的国际标准。用户数据如FTP服务,FTP协议将用户数据封装成FTP数据,FTP数据将在传输层中被封装成TCP报文,在网络层中被封装成IP包,然后在链路层,网络接口驱动程序将IP包封装成以太网帧发送到网络中[5]。接收端收到数据后,按相反的次序解除各协议层的封装,最后得到用户数据。
各协议层都会在接收到上层数据后增加有严格的格式定义的封装。TCP的报文格式定义如图1所示。
图1 TCP报文格式(RFC793)
在网络层,IP协议将TCP或UDP报文封装成IP包,IP协议的封装格式如图2所示。
图2 IP协议格式定义(RFC791)
IP数据报文将被封装成以太网格式的帧(RFC894)或IEEE 802.2/802.3(RFC1042),封装格式定义如图3所示。
图3 以太网封装数据格式(RFC894)和IEEE 802.2/802.3(RFC1042)
网络协议的这种严格的结构化定义为深度解析包的信息提供了技术基础。深度包检测(Deep Packet Inspection,DPI)技术不同于普通报文检测,不仅分析了包括源地址、目的地址、源端口、目的端口以及协议类型的内容,还对应用层的内容进行了分析,是一种基于应用层的业务检测和识别技术。DPI深度包检测的协议识别大致可以通过以下3种技术实现:
1)“特征轮廓”识别技术:一般来说,不同的应用程序使用不同的协议,每个协议都有自己的“特征轮廓”,类似于人的指纹。这些“特征轮廓”可能是特定的字符串、特定的端口或特定的编码序列[5]。
2)关联识别技术:网络应用业务的业务流和控制流是分离的,业务流基本没有明显的指纹特征[5]。控制流的数据内容包含建立连接以及协商出的数据流的五元组信息,识别出控制流将其五元组信息加入关联表中,后续的数据流流量通过使用关联表来识别。
3)行为模式识别技术:通过对终端已经完成的行为流量进行解析,识别出用户正在发生的行为或者即将发生的行为[6]。通常通过分析上下行流量的比例、单IP的连接模式、应用的连接数、数据包的发送接收频率等来识别应用的类型,用于无法根据协议判断的业务的识别。
深度包检测匹配网络协议的特征轮廓集,可采用正则表达式匹配算法提高系统监测性能和监测准确度。基于正则表达式进行协议识别技术是深度包检测的重要性能指标,正则表达式匹配通常采用自动机理论,将正则表达式编译成有限状态自动机[7]。
有限状态自动机有2种:DFA(Deterministic Finite Automation,确定有限状态自动机)和NFA(Nondeterministic Finite Automation,非确定有限状态自动机)[7]。DFA处理复杂度是Ο(1),其状态集复杂度是Ο(∑n);NFA处理复杂度是Ο(n2),其状态集复杂度为Ο(n)。采用NFA的优势是需要的存储空间小,但匹配时速度慢,需要完成多次状态转换。采用DFA的优势是某一时刻只能存在一个活跃状态,匹配时速度快,只需进行一次状态转换,但与NFA相比,同样大小的存储空间容纳的匹配规则数量少。因此通常采用DNA匹配算法实现更高的数据吞吐。虽然NFA实现相对简单,但吞吐量较低。采用DFA匹配算法进行设计有利于高速报文匹配,且有较好的灵活性。
由于正则表达式匹配的时间代价与空间代价较高,对正则表达式匹配的时间与空间代价进行减少的研究特别重要[2]。近年来在提高编译速度、提高匹配速度以及降低存储空间这3个方面做了以下研究:通过McNaughton&Yamada算法和Thompson算法这2种基本的方式将正则表达式转换成NFA,并基于以上2种构建方式,降低算法的时间复杂度,提高编译速度;目前正则表达式匹配主要使用专用加速硬件来加快速度,匹配引擎有DFA和NFA这2种方式,在硬件匹配引擎中,基于存储器的引擎采用DFA实现,基于FPGA的一般采用NFA实现,也有采用DFA的方式[7];相比较NFA匹配引擎的状态转移表,DFA的状态转移表很庞大,因此降低存储空间的研究几乎都是基于DFA的。研究发现,由NFA通过最小子集构造算法仍有重复的等效状态自动机,可以利用填充表算法减少状态转移表。
通过对网络协议严格的结构化定义以及深度包检测技术等进行研究分析,本文提出基于协议指纹匹配和协议规则验证技术的网络协议指纹自识别技术,能够对网络协议报文数据自动识别所属协议类型并且验证其识别结果。基于协议指纹匹配和协议规则验证的协议自识别技术的总体设计如图4所示,包括网络协议指纹特征库、协议识别结果验证规则库、协议指纹特征匹配识别引擎和协议识别结果快速验证引擎。其中,网络协议指纹特征库和协议识别结果验证规则库分别以配置文件描述形式存储了协议样本指纹特征提取阶段产生的网络协议指纹特征和协议识别结果验证规则集[8]。协议指纹特征匹配识别引擎基于快速哈希表方法实现协议特征指纹快速匹配,协议识别结果快速验证引擎基于高效的专用网络报文处理虚拟机实现协议识别结果进一步验证。
图4 网络协议指纹自识别技术总体设计
网络协议指纹自识别技术提供基于协议指纹识别和协议规则验证技术实现的未知协议的指纹特征匹配自识别机制以及协议识别结果的快速验证机制,分为协议指纹特征提取和协议指纹特征匹配识别2个阶段,核心模块包括协议指纹提取和协议验证规则建立、协议指纹匹配自识别以及协议识别结果的快速验证,核心模块具体说明如下。
1)协议指纹提取和验证规则建立。
各个操作系统的网络协议的差异表现在数据包头的标志位段,如ACK序号、TOS(服务类型)、ICMP地址屏蔽请求、对FIN包的响应等,都可以作为各种网络协议的指纹特征,是该网络协议的一种特定描述[9]。通过汇总这些协议特定描述,提取指纹特征,形成网络协议指纹特征库。
在网络通信初期,网络协议应用报文数据流一般不包含业务数据信息,主要包含和服务器进行交互的控制流信息,其具有较为明显的协议指纹特征。因此提取网络应用协议指纹特征一般从传输过程中抓取网络通信初期的协议报文数据流作为协议类型样本进行解析。通过使用抓包工具抓取网络协议报文数据包,以源端口号、源IP地址、协议类型(TCP/UDP)、目的端口号、目的IP地址的五元组信息数据流为单位解析形成数据报文集合[10]。网络应用协议报文数据包解析过程如图5所示。
图5 网络应用协议报文数据包解析过程
通过对多种网络应用协议五元组数据流进行分析,提取可以唯一标识各种网络应用协议的指纹特征,通过这些信息建立和更新协议指纹特征库,该过程包括协议指纹特征提取、协议指纹特征库管理以及外部控制这3个子模块。其过程如图6所示。
图6 网络应用协议指纹特征库建立与更新过程
通过网络协议报文数据包解析过程,将获取的五元组信息作为输入流发送给指纹特征提取模块。指纹特征提取模块分为以下3种提取方法:1)协议样本报头是固定报头类型的报头字段分为动态字段和静态字段,组合定义应用协议报头中的多个连续静态类型字段作为该类型协议的特征指纹;2)协议样本报头是文本命令类型的描述格式为[状态码+参数]或[指令+参数],提取其中的状态码或指令作为该类型协议的特征指纹;3)协议样本报头是其他无固定格式类型,找出可以表示该应用协议特征的单词作为该类型协议的特征指纹[11]。协议指纹特征库管理运用指纹特征提取模块提取出的指纹特征和由外部控制模块反馈的匹配结果信息创建并维护网络协议指纹特征库。
多种网络应用可以归为一个协议类型分组,提取网络应用协议样本中可以进一步标识协议样本类型的字段或者协议消息传输需要满足的规则等作为该网络应用协议类型除协议指纹特征之外的协议验证规则。图7为协议识别结果验证规则库中协议类型验证规则分组的结构图。
图7 协议类型验证规则分组的结构图
2)协议指纹匹配自识别。
协议指纹匹配自识别对未知协议报文流进行报文数据包解析,通过协议指纹特征匹配识别引擎匹配出在网络协议指纹特征库中的所属协议类型,将协议识别结果发送给快速验证引擎进行结果验证,同时也要发送给网络协议指纹特征库的外部控制子模块,网络协议指纹特征库根据识别结果更新网络协议指纹特征库信息。
协议指纹特征匹配识别引擎使用多报文叠加匹配算法对数据包进行正则表达式匹配,当第一个网络协议报文数据包的解析完成时,提取其指纹特征进行匹配,若没有匹配成功,则等待下一个数据包到来并解析完成后,把已经解析的2个协议报文数据包和五元组信息合起来完成指纹提取再去匹配,若还没有匹配成功,继续等待下一个数据包并合起来,如此反复进行下去,直到匹配成功或匹配报文数据包个数达到上限为止[12]。协议指纹特征匹配识别引擎匹配过程如图8所示。
图8 协议指纹特征匹配识别引擎匹配过程
3)协议识别结果的快速验证。
图9 协议识别结果的快速验证过程流程图
采用多模匹配算法来实现协议识别结果的快速验证,过程流程如图9所示。先提取出协议识别结果验证规则集中的所有规则进行编号,通过模式匹配算法在协议报文数据包解析出的五元组信息中查找规则,找到一个规则之后遍历此五元组信息包含的所有规则,如果某条五元组信息包含的所有规则都与对应的协议识别结果类型分组的规则对应,则表明该条协议识别结果正确。
协议识别和分析技术即使再成熟、再准确,在高速网络环境下,要能够线速处理,仍然需相应的优化和匹配技术。为了满足线速处理,业内采用TCAM或者专用加速芯片。但是TCAM本身是为了网络协议层转发而设计的,通过把包的部分内容输入TCAM中,TCAM能在一个指令cycle中完成匹配并返回结果。TCAM本身受到容量的限制,分析的内容不会太多,满足协议层分析是足够的,但是应用到数据包内容分析方面,显得有些不足[13]。基于ASIC技术,即使采用即时编译技术提高适应性,也存在使用灵活性问题,数据包整个交给ASIC芯片,完成处理后再交给平台处理,导致处理流程复杂,并且数据不能及时更新到处理流程中,硬件接口也变得非常复杂,开发难度增大[14]。
应用系统众多且发展快,新的功能要求需要频繁地改动系统,研究完全采用软件的方法,高速分析网络协议,充分利用处理器平台Cache,采用流状态机和查收结合的方法提高处理性能,缩小查找表,是一种可行的方法,而且在安全领域也有成功的先例。
DFA不能有效支持通配符,而在协议分析中不可避免地遇到通配符。通配符会导致状态跃迁表膨胀,极端情况下,会达到数十GB的规模,这种理论上可行的方案在实际应用中是难以实现的[15]。一方面需要的存储空间巨大,给软硬件设计带来困难;另一方面高内存消耗使得查收频繁的内容访问速度严重下降。所以采用多级匹配的模式,结合流状态机进行分析是可行的方案。通过多级DFA分析,结合流状态表综合处理,是解决DFA状态跃迁表膨胀的有效途径。
高效率协议分析和内容分析检查是网络处理的关键,在网络安全领域,多模式查找AC算法(Aho-Corasick algorithm)是一个经典算法,也是被广泛采用的算法,对于单个正则表达式多采用Boyer-Moore算法。AC算法采用状态机的方式对多个模式一次扫描匹配,AC算法提供了将NFA转换成DFA的算法,最终结果是状态跃迁表。如果将所有的模式制成一个表,会引起状态跃迁表的膨胀,表空间巨大且呈现稀疏矩阵的特点[16]。巨大的表空间会导致处理器Cache的频繁失效,严重影响处理效率。AC算法还存在致命的问题,对于通配符的支撑不足,特别是长度不限定的通配符会导致状态表数倍的增长。通过研究基于流状态机的处理机制,结合网络层、应用层协议判断对模式进行划分,减少每个状态跃迁表的状态数。
本章利用真实链路上捕获的报文进行协议指纹识别测试分析。用Etherreal捕获HTTP(Web访问)、QQ(文本聊天)、SMTP(发送邮件)、BT(长文件下载)、Edonkey(长文件下载)、POP3(接收邮件)这6种应用的流量[17],流量情况如表1所示。
测试环境如图10所示。
图10 测试环境
在测试时,设置每个流上的检测报文个数为8个,寄存器超时设置为35 s,测试结果如表2所示。
从协议指纹识别结果中可以发现:基于报文流的平均识别率大约为94.3%,基于字节流的平均识别率大约为90.1%。对比发现,基于内容的协议指纹自识别处理能力强,并且能够在线处理以及精确区分各协议类型,具有很大优势。
表1 协议指纹识别准确性测试采样流量
网络协议类别报文数采样时间/s存储空间/MB平均包长/B备注BT2976920024.223702SMTP65401004.882832成功QQ19951002.112603含有文件传输HTTP2658820015.112659成功POP340661003.112745成功Edonkey4689220027.876633
表2 协议指纹识别结果 单位:%
网络协议识别是网络管理、网络测量和网络安全等领域的基础,本文首先介绍了现有识别方法,在对网络协议、网络协议识别相关概念进行概述的基础上,分析了各种识别方法所使用的协议指纹存在的基础、局限性和匹配的难易程度等。鉴于现有研究对协议指纹识别关注较少,提出了一种基于内容分析,并采用统计和行为模型分析的具有自学习功能的协议识别方法,既能对已知的协议进行正确的识别,又能够通过自学习方式对未知的协议从内容进行协议指纹提取与模型建立,实现对未知协议快速、准确的识别。通过实验验证了该方法及特征的有效性。高速网络环境下实现协议解析和内容分析需要高效能的算法支撑,进一步完善高性能协议分析优化技术是下一步的研究内容。
参考文献:
[1] 杨阳,赵洪宋,岳雨俭,等. 基于协议分析的网络入侵检测系统[J]. 计算机与现代化, 2014(2):201-204.
[2] 郑生军,夏业超,李建华,等. 基于多种检测技术融合的入侵检测系统[J]. 计算机与现代化, 2016(5):116-121.
[3] 李斌,常乐,杨宝琦. 一种网络协议高效自动识别方法的研究[J]. 电信科学, 2014,30(9):139-144.
[4] 胡卫华,班晓芳,孟祥杰,等. 面向下一代威胁的安全框架[J]. 信息安全与通信保密, 2014(6):100-104.
[5] 宋勇,秦拯. 网络入侵检测系统安全通信协议的设计及验证[J]. 计算机与现代化, 2010(7):51-55.
[6] 郭恩阳. DPI在移动分组域中的应用与展望[J]. 移动通信, 2012,36(18):85-89.
[7] 黄益彬,金倩倩,纪元. 网络数据包高性能并行处理技术研究[J]. 计算机与现代化, 2016(12):57-61.
[8] 蔡洪民,伍乃骐,滕少华. 分布式木马检测系统设计实现[J]. 计算机应用与软件, 2012,29(5):278-280.
[9] 俞皓,黄益彬. 网络协议通用型解析引擎描述语言研究[J]. 计算机与现代化, 2014(4):157-161.
[10] 王绍辉. 流数据协议特征分析[D]. 成都:电子科技大学, 2016.
[11] 王勇,吴艳梅,李芬,等. 面向比特流数据的未知协议关联分析与识别[J]. 计算机应用研究, 2015,32(1):243-248.
[12] 田艳飞. Linux下基于网络协议分析和窃取识别的网络取证的研究[D]. 北京:北京工业大学, 2015.
[13] 丁斌. 网络协议分析与网络异常流量识别技术的研究[D]. 长春:长春工业大学, 2015.
[14] 周东旭. Ares协议分析与流量检测机制研究[D]. 南京:南京邮电大学, 2012.
[15] 朱映映,吴锦锋,明仲. 基于网络事件和深度协议分析的入侵检测研究[J]. 通信学报, 2011,32(8):171-178.
[16] 朱贺军,万月亮. 网络内容审计系统构建[J]. 信息网络安全, 2010(4):48-50.
[17] 万兵,杨阳. VoIP流量监测技术的研究与应用[J]. 电信快报, 2010(2):32-35.
[18] 朱钱广. 基于深度包过滤的网络入侵检测系统的设计与实现[D]. 上海:东华大学, 2010.