一种基于逆向技术的未知协议模糊测试自动化方法与流程

专利2022-05-09  97


本发明属于网络通信中未知协议逆向分析领域,具体是一种基于逆向技术的未知协议模糊测试自动化方法。



背景技术:

全球安全中心的统计表明,骨干网中未知协议的流量已经高达45%,未知协议大量被使用于现如今的各类网络中,例如工控网络中的工业设备的数据交互,以及其他各类网络中各种应用层数据交互,未知协议结构五花八门的设计导致安全性同样是难以知晓的。设计协议的本意是为了使数据通信变得更加有序,高效且安全,但由于设计上难免缺陷,或许存在着一些高危的漏洞危害整个网络系统的安全。因此对挖掘协议的安全漏洞进行挖掘,及时改进协议设计与协议通讯实体设计是十分重要的。

一般而言,挖掘协议的安全漏洞的手段主要有动态分析、漏洞特征分析、模型检验以及模糊测试等方法。其中针对网络协议的模糊测试是一种通过向网络通讯实体发送大量随机生成的模糊测试数据,同时与通讯实体的交互情况,并记录通讯实体是否发生异常状态,并进一步研究其漏洞所在。模糊测试方法常被用在研究程序的健壮性上,这类方法的最大的优点是不需要有很强的挖掘技巧,也不用对目标程序进行深入的分析,同时漏洞误报率低。

但是由于未知协议的通讯实体的封闭性,难以加载监控程序,也就无法利用动态分析等方法对通讯实体进行分析,来研究未知协议的安全性,所以模糊测试作为一种泛用性强的方法,比较适合用于对未知协议的安全性进行研究。

公开号cn109462590b公开了一种基于模糊测试的未知协议逆向分析技术方法,该方法依赖模糊测试的测试对象给出的反馈来构建协议格式的方法,存在未知协议测试对象无反馈带来的问题。

公开号cn104168288a公开了一种基于协议逆向解析的自动化漏洞挖掘技术,该专利需人工引入先验知识对报文完成聚类。



技术实现要素:

技术目的:针对上述技术问题,本发明提出一种高效且有效的模糊测试方法在没有先验知识与不依赖对程序进行逆向分析的情况下,完成对未知协议的模糊测试,来挖掘一些可能存在的漏洞。由于协议设计上难免出现缺陷,或许存在着一些高危的漏洞危害整个网络系统的安全。因此挖掘协议的安全漏洞,及时改进协议设计是十分必要的。模糊测试作为一种常用的漏洞挖掘手段,对于提高协议安全性,有着很大的帮助。

本发明在传统的未知二进制协议模糊测试框架之上,设计出一种对未知协议进行协议逆向字段划分作为生成测试用例的基础,且能够高效有效生成测试用例,完成未知协议模糊测试的方法。使得其能够克服传统模糊测试方法测试用例生成工作量大且失效率高的问题,同时通过模糊测试方法对未知协议的安全性进行研究。

为了实现上述技术目的,本发明采用如下技术手段:

一种基于逆向技术的未知协议模糊测试自动化方法,包括以下步骤:

s1、提取报文载荷头并计算字节位置信息熵,过滤掉熵值超出区间的字节位置,提取关键字段来进行降维处理,然后对协议报文进行层次聚类并去除重复的报文;

s2、将聚类预处理好的报文进行协议格式推断,多阶段渐进式生成协议报文格式;

s3、自动化生成测试脚本,基于boofuzz框架进行模糊测试。

步骤s1具体包括以下步骤:

s11、读入报文数据,将报文按照一字节的长度进行序列化切分,并在切分的字节后增加位置信息;

s12、通过信息熵公式,分别计算报文各个字段位置的信息熵,去除熵值超出平均值加上或减去信息熵方差的区间的报文字段位置去除熵值超出平均值加上或减去信息熵方差的区间的报文字段位置,提取关键字段位置,并将小于信息熵平均值的第一个字段作为报文载荷头与报文载荷的分割位置;

s13、利用报文关键字段的字节内容,对协议报文进行层次聚类。

步骤s2具体包括以下步骤:

s21、将步骤s1中经过聚类处理的数据进行频繁项挖掘,并进行闭合模式处理,经过闭合模式处理的频繁项集能够去除大量冗余的频繁项信息;

s22、类与类之间比较生成格式:将不同聚类簇中的报文载荷头进行整合,计算字节位置信息熵,熵值超出平均值加上信息熵方差的作为数据字段,熵值低于平均值减去信息熵方差的作为固定字段,其余作为协议报文关键可变字段;

s23、类内比较生成格式:各个聚类簇内分别计算字节信息熵,去除掉报文载荷头部分,其余部分按照上述步骤s22中的规则,规定字段含义,并与步骤s22中的结果整合生成协议格式。

步骤s3具体包括以下步骤:

s31、根据报文格式,由程序编写boofuzz模块定义字段变异规则与测试对象,其中,固定字段不变,协议报文相关字段变异方式为字典变异,数据字段随机生成,以此逻辑来生成测试脚本;

s32、执行测试脚本,通过记录测试数据与对应的测试对象状态到数据库中,在发生异常之后,查询数据库中记录的测试对象异常时刻与其对应发送的报文数据,并重复发送异常期间的数据来最终确定引发异常的数据。

有益效果:

本发明的方法是通过层次聚类算法对未知协议的报文进行预处理,然后将聚类好的报文经过序列分割算法,将序列语言化加以频繁项挖掘结合信息熵来构建关键字段序列,再而通过频繁项判断关键字段之间的逻辑关系,推断出一些基本语义信息,以便测试用例格式的生成。再而对未知协议的通讯实体进行远程的模糊测试,观察通讯情况,来判断漏洞的存在。

相较于传统的模糊测试方法,本发明的优点在于:

第一.本发明给出的未知协议逆向方法是结合信息论与机器学习的方法,通过结合信息熵与闭合模式挖掘算法频繁项挖掘进行机器学习,以此来构建协议格式,进而实现测试用例的高效生成。

第二.本发明创新性的提出了多阶段模式来进行协议格式的推断,将载荷头与其它部分分别进行协议格式推断的方法充分利用了协议报文类间与类内的字段特征。

附图说明

图1是本发明协议报文聚类流程图;

图2是本发明协议格式推断流程图;

图3是本发明模糊测试自动化流程图;

图4是本发明协议报文层次聚类方法流程图;

图5是本发明基于频繁项挖掘的报文格式推断方法流程图;

图6是本发明模糊测试测试数据生成逻辑图;

图7是传统测试方法流程图;

图8是本发明未知协议模糊测试自动化流程图。

具体实施方式

下面结合和说明书附图以及具体实施例对本发明的技术方案作进一步详细说明。

一、体系结构

本发明提出的基于逆向技术的模糊测试自动化系统的体系结构可以分为两大部分,包括未知协议的协议格式逆向分析部分和模糊测试自动化部分。

(1)未知协议的协议格式解析部分分为协议报文聚类过程与报文格式推断过程。

①协议报文聚类过程如图1所示:

在协议格式逆向的过程中,对报文进行聚类是有助于提高格式推断准确率的一个重要环节。协议报文聚类是指通过一定的聚类方法将报文流的不同类别的报文进行分类。针对未知协议的报文聚类目前一般是采用基于相似性检测的聚类方法,例如通过序列比对比较报文之间的最长公共序列,设置相似性阈值,来进行聚类,这类方法能够很好的将两种相似性较高的报文聚类到一起,但是由于针对一些报文序列较短的工控指令类协议,这种基于相似性检测的方法冗余性较高,不能很好的将两种相似但是功能不同的报文进行区分。

针对基于相似性检测的聚类方法结果冗余度较高的问题,本方法设计了一种基于报文结构的层次聚类方法。由于未知报文的聚类是一种无监督聚类模式,无法进行有标签的聚类,所以层次聚类这类无监督聚类模式可以适用于未知报文的聚类。层次聚类方法的一般流程如下:

步骤一:(初始化)将所有样本视为一个类;

步骤二:计算各个聚类之间的相似度;

步骤三:寻找最近的两个聚类,聚为一类;

步骤四:重复步骤二与三,完成聚类;

②协议格式推断流程如图2所示:

将聚类好的未知协议报文,通过协议格式推断方法,再而生成协议格式推断结果。

在基于网络流量分析的协议格式推断方法中一般有多序列比对方法与频繁项挖掘方法。前者利用协议报文的相似性,后者则利用协议报文字段之间的关联性。

(2)模糊测试自动化测试的工作原理如图3所示:

①测试脚本生成:基于逆向技术生成的协议格式,由程序生成测试脚本,测试脚本规定了测试目标,测试数据的构成。

②测试数据生成:程序通过执行测试脚本,根据不同字段的变异规则,来自动化的生成测试数据,并向脚本规定的测试对象进行数据的发送。

③测试分析:通过分析记录测试对象的运行状态,记录其异常状态的发生,通过分析异常状态发生的测试数据,来研究漏洞存在的可能性。

本方法基于以上的两个部分,通过机器学习未知协议报文的报文格式,再利用报文格式生成测试脚本,程序执行测试脚本,生成测试数据对指定的目标进行模糊测试。

二、方法流程

1.未知协议解析部分

①未知协议报文聚类方法流程:

不论是采用轮廓系数,还是距离系数目前针对二进制协议报文的聚类方法都是依赖于同种报文之间的相似性,该类方法最大的缺陷就是在于无法区分那些相似但是不是同一类的报文,而且容易受到冗余字段的影响,使得两个报文看上去相似,实际上确不同,但是被基于相似性的聚类算法分类到了一起。此外一般的方法由于报文长度之间的差异,无法直接进行比较。

所以为了克服相似性的聚类算法的缺陷,可以利用信息熵等消息,将协议载荷头的字段进行层次化筛选,分割出不同字段的分类层次,使用一种凝聚层次聚类算法对报文进行聚类,而不是直接参考两个报文直接的相似性。同时也解决报文长度不同,无法直接比较的难题,方法流程如图4所示:

先将未知二进制协议报文数据按照预估的载荷头长度提取出载荷头,并去重。再而将载荷头报文数据利用n-gram思想序列语言化处理,生成带有位置信息的报文载荷头序列,并计算对应位置的信息熵,通过信息熵大小,将位置进行层次划分,并依据划分好的层次关系,对报文进行聚类处理。其中信息熵划分层次的流程如下:

步骤一:计算报文载荷头的不同字段位置的信息熵

步骤二:依据信息熵大小划分位置的层次关系

步骤三:进行聚类过程,完成聚类

其中不同字段位置的信息熵计算公式如下:

x表示字段位置,i表示在x位置中出现的报文,n表示该位置出现过的字段内容的集合。

②未知协议格式推断方法流程对于序列的方法,

序列比对方法对于字段划分方面在报文数据适合的条件下具有较好效果,但是缺陷在于,序列比对算法需要进行字段对齐,且容易受到报文序列冗余字段的影响,无法获得字段之间的关联规则,受数据的影响较大。而频繁项挖掘工作量较大,且挖掘得到结果冗余信息多,需要做进一步处理,存在优化空间。

针对以上两种情况,考虑到频繁项挖掘算法可以挖掘报文字段之间的关联规则,这一规则也可被应用与协议逆向的其他方面,例如协议状态机的生成。此外由于频繁项挖掘无需考虑字段对齐的影响,可以通过闭合模式挖掘,过滤掉一些冗余信息,再通过结合信息熵等要素可以尝试对字段进行语义推断,如图5所示:

该方法将聚类好的报文数据分别进行闭合模式的频繁项挖掘,去除冗余信息,并同样的计算不同字段位置的信息熵,进行进一步的字段合成,以获得报文格式。

未知协议模糊测试自动化方法流程

(1)基于boofuzz框架的模糊测试脚本

boofuzz框架是一种可以通过编写session模块来自定义测试数据生成逻辑与执行测试脚本的模糊测试框架。通过boofuzz框架能够实现测试数据的多维变异生成,同时能够记录测试数据与测试对象的状态。

根据上述协议逆向获得的字段结果,可以根据图6中的填充逻辑对各个字段进行差异化填充,一方面提高测试数据的命中率,另一方面可以大大减少测试数据生成量,从而减少测试所需时间,对于模糊测试的测试阶段优化主要难点在于测试用例生成的逻辑。

(2)未知协议模糊测试自动化方法与传统模糊测试方法相比较

传统的协议模糊测试方法流程图与未知协议模糊测试自动化方法流程图分别如图7与图8所示。一般的测试流程,对人工知识依赖性很强,而进行一定的协议逆向可以解决这一依赖性强的问题。此外针对流程中的测试数据生成,传统方法是逐个字段遍历填充,没有充分利用字段之间的差异性,进行差异化填充。

两种测试框架相比较而言,本文提出的未知协议模糊测试自动化方法对比与传统的模糊测试方法,通过利用机器学习方法,一定程度上解决了人工先验获取困难的问题,同时在测试效率与自动化程度上能够有很大的提高。


技术特征:

1.一种基于逆向技术的未知协议模糊测试自动化方法,其特征在于,包括以下步骤:

s1、提取报文载荷头并计算字节位置信息熵,过滤掉熵值超出区间的字节位置,提取关键字段来进行降维处理,然后对协议报文进行层次聚类并去除重复的报文;

s2、将聚类预处理好的报文进行协议格式推断,多阶段渐进式生成协议报文格式;

s3、自动化生成测试脚本,基于boofuzz框架进行模糊测试。

2.根据权利要求1所述的基于逆向技术的未知协议模糊测试自动化方法,其特征在于,步骤s1具体包括以下步骤:

s11、读入报文数据,将报文按照一字节的长度进行序列化切分,并在切分的字节后增加位置信息;

s12、通过信息熵公式,分别计算报文各个字段位置的信息熵,去除熵值超出平均值加上或减去信息熵方差的区间的报文字段位置,提取关键字段位置,并将小于信息熵平均值的第一个字段作为报文载荷头与报文载荷的分割位置;

s13、利用报文关键字段的字节内容,对协议报文进行层次聚类。

3.根据权利要求1所述的基于逆向技术的未知协议模糊测试自动化方法,其特征在于,步骤s2具体包括以下步骤:

s21、将步骤s1中经过聚类处理的数据进行频繁项挖掘,并进行闭合模式处理,经过闭合模式处理的频繁项集能够去除大量冗余的频繁项信息;

s22、类与类之间比较生成格式:将不同聚类簇中的报文载荷头进行整合,计算字节位置信息熵,熵值超出平均值加上信息熵方差的作为数据字段,熵值低于平均值减去信息熵方差的作为固定字段,其余作为协议报文关键可变字段;

s23、类内比较生成格式:各个聚类簇内分别计算字节信息熵,去除掉报文载荷头部分,其余部分按照上述步骤s22中的规则,规定字段含义,并与步骤s22中的结果整合生成协议格式。

4.根据权利要求1所述的基于逆向技术的未知协议模糊测试自动化方法,其特征在于,步骤s3具体包括以下步骤:

s31、根据报文格式,由程序编写boofuzz模块定义字段变异规则与测试对象,其中,固定字段不变,协议报文相关字段变异方式为字典变异,数据字段随机生成,以此逻辑来生成测试脚本;

s32、执行测试脚本,通过记录测试数据与对应的测试对象状态到数据库中,在发生异常之后,查询数据库中记录的测试对象异常时刻与其对应发送的报文数据,并重复发送异常期间的数据来最终确定引发异常的数据。

技术总结
本发明提出了一种基于协议逆向的模糊测试自动化方法,目的是为了提高针对未知协议的模糊测试的方法的效率以及自动化程度。针对全球骨干网中存在的大量未知协议,构建一种协议逆向方法来逆向协议的格式,在逆向协议格式的基础上,编写模糊测试脚本生成方法,再利用boofuzz框架执行测试脚本,记录测试过程的测试对象状态以及数据,为进一步研究未知协议的安全问题提供基础,以便及时的改进未知协议的设计以及修复通讯实体的漏洞。

技术研发人员:李鹏;方伟青;王汝传;吴礼发;徐鹤;朱枫;周浩成;陈阳
受保护的技术使用者:南京邮电大学
技术研发日:2021.04.07
技术公布日:2021.08.03

转载请注明原文地址:https://doc.8miu.com/read-2256.html

最新回复(0)