掌桥专利:专业的专利平台
掌桥专利
首页

基于抽象语法树的SOAP协议黑盒模糊测试方法及系统

文献发布时间:2024-04-18 20:02:40


基于抽象语法树的SOAP协议黑盒模糊测试方法及系统

技术领域

本发明属于物联网协议漏洞挖掘领域,具体涉及一种基于抽象语法树的SOAP协议黑盒模糊测试方法及系统。

背景技术

简单对象访问(Simple Object Access Protocol,SOAP)协议是一种轻量的、简单的、基于XML的协议。一条SOAP消息就是一个包含有一个必需的SOAP的封装包,一个可选的SOAP标头和一个必需的SOAP体块的XML文档。

目前,现有的针对XML格式模糊测试相关的论文主要有:

文献《Skyfire:Data-driven seed generation for fuzzing》针对XML的数据特征设计了种子生成方法,通过学习概率上下文敏感语法来获得产生式规则,然后利用学习到的产生式来递归地获种子,指导变异;文献《Superion:Grammar-Aware GreyboxFuzzing》将每个测试输入解析为抽象语法树,并引入了一种语法感知的修剪策略,此外,提出了两种语法感知突变策略,可以快速地将模糊探索扩展到语法解析之外;文献《FuzzingWith Optimized Grammar-Aware Mutation Strategies》采用功率调度和子树池来优化突变策略,基于概率模型对抽象语法树节点的功率调度进行优化,自适应地确定突变节点的时间预算,使用从子树池中选择的节点替换突变节点及其子树。

针对XML格式的模糊测试方法在扩展到协议模糊测试领域时会遇到阻碍,在现存的针对XML数据的模糊测试方法如Skyfire中,需要在测试前先收集大量的XML数据样本,从中学习产生式,丰富语料库,在扩展到SOAP协议时,SOAP协议报文的获取难度比XML格式数据高,大部分情况下需要在真实环境下进行抓包,能获取的数据数量也远低于普通XML数据。且XML数据大小一般情况下远大于SOAP协议报文,因此在变异时,针对XML数据的方法变异粒度较粗,很难针对某个特定字段进行深层次的探索。

发明内容

本发明的目的是为了克服现有技术的不足,提出一种基于抽象语法树的SOAP协议黑盒模糊测试方法及系统。

为了实现上述目的,本发明具体采用的技术方案如下:

一种基于抽象语法树的SOAP协议黑盒模糊测试方法,包括四个阶段:抽象语法树生成阶段、产生式提取阶段、模糊变异阶段和漏洞检测阶段;其中:

1)抽象语法树生成阶段:捕获的真实SOAP协议报文,并将其解析为抽象语法树。

2)产生式提取阶段:遍历抽象语法树的所有节点,对当前节点用二元组t=(context,production)记录节点上下文信息context和产生式production,并将其加入产生式池,其中,context是包括曾祖父节点,祖父节点,父亲节点和第一个兄弟节点的四元组,production为当前节点与子节点组合成的产生式,通过捕获大量的通信报文,构造产生式池,为变异阶段产生优质种子。

3)模糊变异阶段:首先取一条真实SOAP协议报文作为初始种子,将其解析为抽象语法树,利用产生式池的产生式为指导,分三个阶段对报文采取不同的变异算法。

4)漏洞检测阶段:通过监视器负责监听被测对象的IP地址与端口,设备崩溃导致端口关闭或者网络连接中断时,将崩溃信息及时传回给模糊处理器,模糊处理器会在收到崩溃消息时存储当前的已发送的报文序列,测试人员可以随时调用查看以分析崩溃产生的原因。

进一步地,本发明所述的一种基于抽象语法树的SOAP协议黑盒模糊测试方法,包括如下步骤:

S1抽象语法树生成阶段

抓取与待测目标通讯时的报文并转化为抽象语法树,具体包含以下内容:

S1.1真实流量报文抓取

在网络上收集所需的SOAP协议通讯报文,或使用Wireshark工具进行抓包,获取SOAP协议真实流量报文,将收集到的SOAP协议报文加入集合Packet_SOAP,使用Python的Scapy库进行解析和提取Packet_SOAP中的报文,生成XML格式报文数据,将其加入XML数据集合Packet_XML。

S1.2抽象语法树转换

将步骤S1.1的Packet_XML集合中的每一条XML报文数据转换为对应抽象语法树的实例,并加入抽象语法树集合AST_XML,所有AST_XML中抽象语法树的叶子节点之和即为原对应的XML报文数据。

S2产生式提取阶段

对步骤S1.2的抽象语法树集合AST_XML,通过上下文敏感语法分析处理,将树的结构转化为产生式存储与产生式池R

S2.1上下文敏感语法定义

与上下文无关文法(content free grammar,CFG)类似,上下文敏感语法(CSG)定义了一个四元组G=(N,T,R,S),其中,

N是一个非终结符的有限集合。

T是一个终结符的有限集合。

R是一个上下文产生式的有限集合,一条产生式规则符合α→β的结构,其中α∈N,β∈N∪T。

S是起始符号,用来表示文法的起点。且S∈N。

将抽象语法树的结构转化为CSG,其中,N存储树的所有非叶子节点,T存储所有叶子节点,R存储树的父子产生关系,S即为树的根节点。

S2.2产生式提取

S2.2.1将步骤S1.2中获得的抽象语法树集合AST_XML作为输入,初始化产生式集合R

S2.2.2定义产生式production=α→β,且production∈R,α为抽象语法树AST的非叶子节点,β为α的子节点,对于每个不同的子节点β,都会生成一个production;

将抽象语法树AST和上下文信息context作为输入,层序遍历AST的所有非叶子节点,将步骤S2.2.1中获得的当前节点的context与产生式production组合,以一个二元组t=(context,production)的方式存储下来并加入产生式池R

S2.2.3将所有二元组t作为输入,若产生式池R

S3模糊变异阶段

在模糊测试执行的过程中,种子报文Packet

S3.1初始种子获取

变异过程的初始种子源于真实流量的抓包,选取一条SOAP协议真实流量且回复为200OK的报文作为初始种子Packet

S3.2第一阶段变异

将产生式池R

这一阶段的变异目的是进行大范围的测试,争取使测试用例覆盖到更多的测试空间,叶子节点的替换可以很容易地覆盖到更多的功能域。

在产生式池R

S3.3第二阶段变异

将产生式池R

(1)不同上下文产生式的替换操作,针对叶子节点替换不再局限于相同的上下文背景,只要产生式的前件相同就会替换,搜索产生式集合R

(2)节点删除,随机删除树的某一叶子节点,遍历树的所有非叶子节点,若存在子节点为叶子结点,随机删除一个叶子节点。

(3)节点添加,同一产生式下添加新的任意产生式池中的叶子节点,以叶子节点的父节点的context为索引搜索产生式集合R

(4)节点交换,随机交换数个叶子节点的值,遍历所有非叶子节点,若节点有复数个子节点,交换子节点的顺序。

使用变异策略池中的策略,将种子通过产生式池进行变异,将变异后的报文交给下一阶段发送给待测设备。在变异策略池中的策略都操作完成后,变异进入第三阶段。

S3.4第三阶段变异

S3.4.1变异能量计算

在第三阶段的变异中,将产生式池R

其中,Energy为事先给出的单位能量,保证每个叶子节点的变异时间不会太少导致测试不充分,一般为2万到3万个cpu时间片。α为当前节点的重要性参数,由测试人员在编写测试配置文件时给出,默认为1,表示所有节点重要性程度相同。e为当前叶子节点被分配到的变异能量,当前叶子节点的产生式越少,被分配到的随机变异的时间越多。

S3.4.2随机变异

第三阶段的变异会大概率破坏该字段原有的结构,以此来测试设备对结构异常报文的处理能力,这一阶段的变异包括以下几种方法:(1)超长字符串(2)解析干扰(3)特殊ASCII码(4)边界值(5)随机变异。前4种变异方法的替换字符会存储在列表lib中,在测试时间内,会按顺序依次进行变异,在lib中的字符全部被使用之后,剩下的时间将进行随机变异,随机生成字符替换原字段。

S4漏洞检测阶段

模糊处理器接收变异后的种子并发送给待测设备,采用心跳监测监听设备状态并反馈给模糊器,若设备崩溃则报告漏洞,包含以下内容:

S4.1心跳监测

漏洞检测主要使用心跳检测机制,系统运行过程中每隔2秒向待测设备发送一次检测报文,若无回复则判断设备已崩溃,同时记录与上一次心跳检测间隔中所发送的报文,方便测试人员定位漏洞与进一步分析。

通过发送不同种类的报文,来从各个方面尽可能的监测设备。其中包括ICMP协议报文、ARP协议报文和正常的SOAP协议报文,通过观察其回复情况来判断设备的状态。

S4.2模糊处理器

处理器负责接收变异后的报文并发送给待测设备,并接收回复,对于某些结构被破坏的报文,待测设备不会给出回复,处理器会在等待一段时间后判断为设备拒绝接收,并询问监视器设备运行状态,若监视器回复设备不在线,则判断为设备已崩溃,若监视器回复设备在线且运行正常,则将该条报文判断为没有回复的无效报文。

本发明的另一个目的是提供一种基于抽象语法树的SOAP协议模糊测试系统,该系统基于上述的模糊测试方法实现物联网协议漏洞的挖掘,主要包含抽象语法树生成模块、产生式提取模块、模糊变异模块和漏洞检测模块;其中:

抽象语法树生成模块,使用Wireshark抓包摄像头通讯时的真实流量,并通过Python的Scapy库对SOAP的报文进行初步的提取与解析,并将SOAP报文转化为抽象语法树。

产生式提取模块:遍历抽象语法树的所有节点,采用上下文敏感语法记录抽象语法树中每个节点的上下文信息和节点的父子关系,抽象化为产生式,并将其加入产生式池,通过捕获大量的通信报文,不断的扩充产生式池;具体的,初始化产生式集合R

模糊变异模块:遍历初始报文的所有字段,借助产生式池对字段进行三个阶段的变异,将变异后的报文交给处理器模块;具体地,首先取一条真实流量报文作为初始种子,将其解析为抽象语法树,然后在变异的第一个阶段,对于每一个叶子节点,将产生式池所有具有相同上下文的节点进行替换;在种子池耗尽后,变异进入第二阶段,随机使用策略池中针对抽象语法树的多种方法进行变异;在第二阶段的变异策略执行完毕后,进行第三阶段的变异,根据产生式池中对应叶子节点的数量计算该叶子节点的变异能量,在第一阶段中替换次数少的节点在第三阶段会被赋予更多能量,接着对叶子节点进行破坏报文的结构变异;

漏洞检测模块:通过监视器负责监听被测对象的IP地址与端口,设备崩溃导致端口关闭或者网络连接中断时,将崩溃信息及时传回给模糊处理器,模糊处理器在收到崩溃消息时存储当前的已发送的报文序列,测试人员可以随时调用查看以分析崩溃产生的原因。具体地,采用心跳检测机制检测漏洞,系统运行过程中每隔2秒向待测设备发送一次检测报文,若无回复则判断设备已崩溃,同时记录与上一次心跳检测间隔中所发送的报文;通过发送不同种类的报文,来从各个方面监测设备,其中包括ICMP协议报文、ARP协议报文和正常的SOAP协议报文,通过观察其回复情况来判断设备的状态;模糊处理器负责接收变异后的报文并发送给待测设备,并接收回复,对于某些结构被破坏的报文,待测设备不会给出回复,处理器会在等待一段时间后判断为设备拒绝接收,并询问监视器设备运行状态,若监视器回复设备不在线,则判断为设备已崩溃,若监视器回复设备在线且运行正常,则将该条报文判断为没有回复的无效报文。

本发明将SOAP协议转化为抽象语法树来获取产生式,并以字段为单位利用产生式指导变异,与其它基于生成的黑盒模糊测试方法相比,能极大提高SOAP协议模糊测试的效率,具有以下的特点和有益效果:

1).相对于其他XML格式模糊测试方法,本发明采用了更细粒度的产生式生成规则,能在真实流量中获得更多产生式规则,在变异阶段,以抽象语法树的叶子节点为单位进行三个阶段的变异,能对有效地对SOAP协议的每个字段进行充分的探索,能更好的适应协议模糊测试的背景,获得更高的模糊测试效率。

2).相对于boofuzz等传统黑盒协议模糊测试工具,本发明从真实流量中学习语法和产生式,在变异阶段通过子树替换、能量分配等方法不断产生高质量的种子,能自动化地解析SOAP报文格式,减少了字段划分人工开销高的问题。

3).运用本发明的测试方法及系统,可以显著提高SOAP协议的漏洞挖掘效率,在相同的测试环境下,相比与现有的黑盒模糊测试框架,能更高效的进行测试,发现更多的漏洞。

附图说明

图1为本发明基于抽象语法树的SOAP协议黑盒模糊测试方法的系统整体流程图。

图2为本发明基于抽象语法树的SOAP协议黑盒模糊测试方法的SOAP协议部分抽象语法树;

图中:(a)XML格式报文数据;(b)对应抽象语法树。

图3为本发明基于抽象语法树的SOAP协议黑盒模糊测试方法的部分产生式生成例子;

图中:(a)原抽象语法树;(b)产生式与上下文;(c)产生式池。

图4为本发明基于抽象语法树的SOAP协议黑盒模糊测试方法的模糊变异阶段运行流程。

图5为本发明基于抽象语法树的SOAP协议黑盒模糊测试方法的模糊变异例子;

图中:(a)原报文;(b)相同上下文替换;(c)不同上下文替换;(d)节点删除;(e)节点添加;(f)节点交换。

图6为本发明基于抽象语法树的SOAP协议黑盒模糊测试方法的报文发送与崩溃监测流程。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

如图1所示,一种基于抽象语法树的SOAP协议黑盒模糊测试方法,整体步骤分为四个阶段,抽象语法树生成阶段、产生式提取阶段、模糊变异阶段和漏洞检测阶段。

1抽象语法树生成阶段:

1.1真实流量抓取

首先,在网络上收集所需的SOAP协议通讯报文,或使用Wireshark工具进行抓包,获得SOAP协议真实流量,存储为pcap格式文件。

安装python3,使用pip install安装scapy库,读取pcap格式文件,并提取应用层协议报文。

1.2协议划分

将1.1中获取的应用层协议报文以最后一个转义字符‘ ’为界划分为HTTP部分和SOAP部分,前半为HTTP协议,后半为SOAP协议,将获得的SOAP协议加入集合Packet_SOAP。

1.3抽象语法树生成

SOAP协议基于XML数据格式,将抓取到的SOAP协议通过python3的dom库解析为XML文档,加入XML数据集合Packet_XML,并如图2所示转换为抽象语法树,将其加入抽象语法树集合AST_XML,所有AST_XML中抽象语法树的叶子节点之和即为原对应的XML报文数据。

2产生式提取阶段

将真实流量转换阶段获取的抽象语法树学习上下文抽象语法,并用产生式存储语法树的上下文信息和父子节点关系。

产生式提取部分的伪代码如下:

主要包含以下过程:

初始化产生式池R

表1产生式池R

3模糊变异阶段

模糊变异使用的策略的伪代码如下所示,将针对SOAP协议的结构特点,采用三个阶段的变异策略。

模糊变异阶段流程如图4所示,包含以下过程:

3.1初始种子获取

变异过程的初始种子也源于真实流量的抓包,选取一条SOAP协议真实流量且回复为200OK的报文作为初始种子Packet

3.2第一阶段变异

将产生式池R

3.3第二阶段变异

第二阶段准备了一个变异策略池ST,变异策略池中包括了四种针对树状结构的变异策略,用于检测设备能否处理一些语义方面的问题。策略池中的变异策略主要有:

(1)不同上下文产生式的替换操作,针针对叶子节点替换不再局限于相同的上下文背景,只要产生式的前件相同就会替换,如图5(c)所示,搜索产生式集合R

(2)节点删除,随机删除树的某一叶子节点,如图5(d)所示,遍历树的所有非叶子节点,若存在子节点为叶子结点,随机删除一个叶子节点;

(3)节点添加,同一产生式下添加新的任意产生式池中的叶子节点,如图5(e)所示,以叶子节点的父节点的context为索引搜索产生式集合R

(4)节点交换,随机交换数个叶子节点的值,如图5(f)所示,遍历所有非叶子节点,若节点有复数个子节点,交换子节点的顺序。

将产生式池R

3.4第三阶段变异

第三阶段以叶子节点为单位进行字节级变异,变异包括以下几种方法:

(1)超长字符串

将叶子节点的值重复若干次或构造形如“aaaaaaaa……”的超长字符串替换叶子节点,观察被测对象能否正常对协议进行解析。

(2)解析干扰

在叶子节点字段前或者字段后加上“x00”、“ ”等具有特殊含义的字符串来干扰设备对于XML格式的解析。

(3)特殊ASCII码

将叶子节点替换或添加特殊ASCII码,许多设备在对字符串进行解析时,对一些特殊的ASCII码,如“!”、“@”、“¥”、“&”、“(”等有其特定的含义,这些特殊ASCII码的加入可能会导致被测对象运行出现错误。

(4)边界值

许多功能函数中规定不同对象的不同字段都有取值边界,在边界值附近的取值可能会导致协议解析失败。

(5)随机变异

以叶子节点为单位进行字节级的变异,如比特翻转、字节翻转、随机字符生成等。

第三阶段变异时会按照以下公式会为每个叶子节点分配变异的时间。

其中,Energy为事先给出的单位能量,保证每个叶子节点的变异时间不会太少导致测试不充分,一般为2万到3万个cpu时间片。α为当前节点的重要性参数,由测试人员在编写测试配置文件时给出,默认为1,表示所有节点重要性程度相同。e为当前叶子节点被分配到的变异能量,当前叶子节点的产生式越少,被分配到的随机变异的时间越多。

4漏洞检测阶段

漏洞检测阶段的具体流程如图6所示,待测设备崩溃监测采用心跳测试的方法。通过发送ICMP协议、ARP协议和正常的SOAP协议报文,通过观察其回复情况来判断设备的状态。在网络层和应用层同时监测设备状态。

漏洞检测主要使用心跳检测机制,系统运行过程中每隔2秒向待测设备发送一次检测报文,若无回复则判断设备已崩溃,同时记录与上一次心跳检测间隔中所发送的报文,方便测试人员定位漏洞与进一步分析。

综上所示,本发明提出了一种基于抽象语法树的SOAP协议黑盒模糊测试方法,通过捕获真实流量构建产生式集合,指导模糊测试的变异过程,并采用三个阶段的变异策略,以提升模糊测试的整体效率。

为了验证本发明的有效性,本发明人对基于SOAP协议的高级协议ONVIF协议进行了模糊测试和漏洞挖掘。ONVIF协议是摄像头领域最重要的协议,大部分产商的摄像头都会支持这一协议。ONVIF协议需要用户实时更新用户令牌信息以确保通讯的安全。先生成时间戳与随机数,并根据ONVIF协议官方的规范为设备生成新的令牌,种子的变异会在带有新令牌的报文上进行,这样既保证了令牌的有效性,又能对令牌本身的字段进行有效的模糊测试,基于以上思路进行了测试。

在实验中,对两款真实的智能摄像头设备进行,摄像头的具体信息如表2所示。

表2待测设备基本信息

在实验中发现:两款摄像头在ONVIF协议的实现方面高度一致,且能触发同一个崩溃漏洞,该漏洞会导致设备崩溃并自动重启,攻击者可以重复发送引起该漏洞的报文而使设备一直无法正常工作,造成安全问题,该零日漏洞已上报CNNVD漏洞库,并获得了漏洞编号CNVD-2023-43801和原创漏洞证书。同时,还在设备中发现数个中断连接的漏洞,表现为设备方中断了本次的socket连接,致使本轮测试失效。

使用经典的黑盒模糊测试工具Boofuzz作为对照组进行对照实验,为了更全面的反应ONVIF协议的特点,使用了两个Boofuzz对照组:

Boofuzz-default:该对照组不做任何其他设置,捕获通信的真实流量并由测试人员手动划分字段,编写测试脚本。

Boofuzz-adjusted:该对照组除了Boofuzz的基本功能,额外实现了特殊字段处理和用户令牌更新的功能,提高测试用例的接受率,同样由测试人员手动划分字段并编写测试脚本。

试验组:分别将OnvifFuzzer,Boofuzz-default与Boofuzz-adjusted在两款摄像头上测试4小时,重复3次取平均值,获得的结果如表3、表4所示:

表3 TP-LINK摄像头测试表现

表4 MERCURY摄像头测试表现

如表3和表4所示,如果不对HTTP协议的Content-Length字段和用户令牌进行调整,模糊测试的接收率会非常的低,但就算进行了调整,本发明也能收到更多种类的回复,在覆盖更多的功能空间的能力上还是远远超出Boofuzz,同时也能更容易触发漏洞。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的仅为本发明的优选例,并不用来限制本发明,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。

技术分类

06120116586796