针对SSL/TLS协议的模糊测试框架实现
2018-03-02刘顺
刘顺
摘要:随着网络攻击的多元化、复杂化、智能化,网络安全面临的挑战日益严峻。本文使用LCS(最长公共子序列)算法对网络通信协议数据格式进行识别,针对网络上应用较为广泛的SSL/TLS通信协议,在模式测试平台PEACH框架的基础上进行了改进。
关键词:模糊测试;LCS算法;PEACH
中图分类号:TP393.04 文献标识码:A 文章编号:1007-9416(2018)12-0180-01
1 软件安全性测试
对软件进行安全性测试,分为白盒测试和黑盒测试。白盒测试是指通过程序的源代码进行测试,从代码句法发现内部代码在算法、溢出、路径、条件等等中的缺陷或错误。黑盒测试也称为功能测试、行为测试或数据驱动测试,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合功能说明[1]。目前应用更为普遍和广泛的是动态模糊测试。模糊测试本质是一种黑盒测试,其主要方法是构造一定量的畸形数据,使得目标系统崩溃,常用于网络服务、文档程序类的漏洞挖掘和测试。
2 基于网络协议的模糊测试框架
目前广泛使用的两款网络协议模糊测试框架有SPIKE和Peach。
SPIKE使用C语言编写,提供了一系列允许快速和高效的开发网络协议模糊测试器的API,在SPIKE中数据结构被分解表示成块,这个块同时包含二进制数据和块大小,这样产生的数据就可以被SPIKE以不同的格式嵌入到自身测试数据中去,当需要在特定位置嵌入精确数据的时候,块就能大大节省了我们自行计算的时间,SPIKE是一个GPL的API和一套工具,它使你可以快速创建任何网络协议压力测试的测试器。
Peach使用python语言编写,是一个开源的框架,使用标准接口,可以支持使用任何格式、网络协议、应用协议,Android设备,装置驱动程序或嵌入式硬件的安全测试,Peach体系结构允许研究者聚焦于一个个的特定的协议的子组件,然后组合起来创建完整的模糊测试器,这种方法可能不如基于块的开发速度,但是对代码的复用的支持比其他模糊测试工具好。
3 网络通信数据格式识别
网络通信协议的格式特征往往体现于那些在多个网络会话中出现的子串,这些不变量在一定程度上确定了网络通信协议的格式[2]。基于这点选择使用LCS算法进行报文协议的分析,这个算法对于同一类流量可以取得比较好的效果。
LCS算法步骤介绍[3]:
(1)定义dp[i][j]:表示字符串序列A的前i个字符组成的序列Ax和字符串序列B的前j个字符组成的序列By之间的最长公共子序列L(i,j)的长度(m,n分别为Ax和By的长度,i<=m,j<=n)。
(2)如果Ax[i]=By[j],那么Ax与By之间的最长公共子序列L(i,j)的最后一项一定是这个元素,所以dp[i][j]=dp[i-1][j-1]+1。
(3)如果Ax[i]!=By[j],设LCS(i-1,j-1)是L(i-1,j-1)的最后一个元素,或者L(i-1,j-1)是空序列,则LCS(i-1,j-1)!=Ax[i]和LCS(i-1,j-1)!=By[j]至少有一个不成立。
当LCS(i-1,j-1)!=Ax[i]时,dp[i][j]=dp[i-1][j];
当LCS(i-1,j-1)!=By[j]时,dp[i][j]=dp[i][j-1];
所以dp[i][j]=max(dp[i-1][j],dp[i][j-1])。
(4)要求出任意一个最长公共子序列,考虑上面的递推式,L(i,j)的最后一个元素LCS(i,j)的来源有三种情况:
dp[i][j]=dp[i-1][j-1]+1,LCS(i-1,j-1)接上LCS(i,j),表示从斜向上左方来;
dp[i][j]=dp[i-1][j],LCS(i-1,j)接上LCS(i,j),表示从上方过来;
dp[i][j]=dp[i][j-1],LCS(i,j-1)接上LCS(i,j),表示从左方过来。
4 Peach框架改进
4.1 网络数据通信部分改进
我们在Peach平台的基础上,对其核心部分进行了改造,使用了中间人攻击模式,平台作为服务端和客户端的桥梁,对服务器和客户端之间的数据进行连接和转发。这样设计平台可以直接获取到测试数据,而无须再使用wireshark等数据嗅探工具,既省去了后期还需要对分片数据进行再组包的麻烦,也避免了因数据组包而可能导致的错误,而且可以同时对服务端和客户端进行测试,提高了测试效率。改进后的平台如图1所示。
4.2 数据编译器部分改进
Peach模糊测试框架内预先制定了一些处理输入文件的规则,它会根据样本文件给定的数据结构格式生成随机数据填充,或者对文件中的数据进行变异,从而产生粒度更小针对性更强的畸形样本文件。
但Peach对于数据的变异处理仅针对数据中的可变化部分进行处理,对于格式部分即数据中不变部分未做处理,这样在一定程度上丢弃了一些可能造成程序内存溢出的情况。针对这个情况,我们在对数据的变异处理部分,加入了对可能是数据长度指示的数据的变异处理。
数据长度指示在实际数据中分为两种,第一种是指示服务端或客户端自身后续将要跟随的数据块大小,第二种是指示期望对方返回的数据块大小。针对ssl协议,第一种情况,采取的策略是在数据不变部分的尾部取2字节,或是在可变部分的头部取2字节,来判断是否为可变部分的长度指示;第二种情况,采取的策略是在不可变部分中查找可能是长度指示的连续2字节。
5 实验结果
改进后的Peach平台可以完整的记录双方通讯数据,准确的识别出TLS/SSL数据格式。使用改进后的数据编译器,成功发现了原PEACH平台无法发现的心臟出血漏洞。
6 結语
网络安全正受到人们越来越多的重视,漏洞的发现与补救也成为网络安全防护的重中之重。模糊测试作为漏洞发现的一种方法,其普遍适用性和简便性,使得其在漏洞挖掘中扮演着越来越重要的角色。在今后的研究中,要重点在变异数据生成方面和自动化方便做更深入的研究和探索。
参考文献
[1]梁红硕,冯晓东,贾永胜.论黑盒测试与白盒测试在软件测试中的不同作用[J].商场现代化,2010(16):5-6.
[2]潘道欣,王轶骏,薛质.基于网络协议逆向分析的远程控制木马漏洞挖掘[J].计算机工程,2016,42(02):146-150+156.
[3]于海英.字符串相似度度量中LCS和GST算法比较[J].电子科技,2011,24(03):101-103+124.
Fuzzy Test Framework for SSL/TLS Protocol
LIU Shun
(School of Information Science @ Engineering Lanzhou University,Lanzhou Gansu 730000)
Abstract:With the diversification, complexity and intelligence of cyber attacks, the challenges facing network security are increasingly severe. In this paper, LCS (longest common subsequence) algorithm is used to identify the data format of network communication protocol. Aiming at the widely used SSL/TLS communication protocol on the network, an improvement is made on the basis of PEACH framework, a pattern testing platform.
Key words:fuzzy test; LCS algorithm; PEACH