一种基于嵌入式设备Web服务关联信息的模糊测试方法及系统
文献发布时间:2023-06-19 19:30:30
技术领域
本发明涉及网络安全技术领域,尤其涉及一种基于嵌入式设备Web服务关联信息的模糊测试方法及系统。
背景技术
近年来,物联网设备的安全性日益受到关注。在所有物联网设备中,无线路由器和网络摄像头比其他嵌入式设备遭受更多的攻击。关键原因是这些包含了Web服务器的嵌入式设备暴露了含有可利用漏洞的Web服务。现有方法之所以无法高效分析嵌入式系统中的Web服务以检测漏洞,是因为嵌入式设备Web服务的前端管理接口(界面)和后端二进制组件之间存在着复杂的数据交互和隐式数据流。
软件漏洞挖掘技术经过多年研究,提出了静态分析、符号执行、模糊测试等很多可用于漏洞挖掘的技术手段。总的来说,这些漏洞挖掘技术手段可以大致分为动态解决方案和静态解决方案两类:其中,动态的解决方案,提供了运行时的程序状态,但这些状态只能覆盖所有可能的程序状态的其中一小部分,进而导致了大量的漏报;静态的解决方案,不涉及具体的代码执行过程,从而导致许多误报。
动态的解决方案中,模糊测试是目前应用最广泛的漏洞挖掘技术,它所具有自动化程度高、系统消耗低、误报率低以及不依赖于目标程序源代码等优点激起了人们对模糊测试研究的热情,不少研究者将模糊测试技术应用于漏洞挖掘中。通过数年的研究,模糊测试技术得到了一定的发展,在针对传统桌面平台的测试中,模糊测试具有较好的表现,然而,该技术在嵌入式设备Web服务上进行测试还具有一定的不适应性。
传统的针对嵌入式设备Web服务的模糊测试方法已经难以适应当前形势下保护嵌入式设备终端用户隐私和信息安全的需求。因此,在嵌入式设备Web服务中潜在的安全漏洞被恶意攻击者利用之前,挖掘出这些漏洞显得尤为重要,提出一种高效的针对嵌入式设备Web服务的模糊测试方法是解决上述挑战的一个可行的方案。
发明内容
本发明提出了一种基于嵌入式设备Web服务关联信息的模糊测试方法及系统,主要针对嵌入式设备Web服务,通过预先分析得到的嵌入式设备Web服务关联信息引导模糊测试,精准定位并分析嵌入式设备Web服务前后端之间的数据交互,解决传统的模糊测试方法应用于嵌入式设备Web服务时漏洞挖掘效率低的问题。
为了实现上述目的,本发明采用以下技术方案:
本发明一方面提出一种基于嵌入式设备Web服务关联信息的模糊测试方法,利用了静态分析与动态执行相结合的思路,将静态分析阶段获取的嵌入式设备Web服务关联信息应用于动态的针对嵌入式设备Web服务模糊测试中,避免盲目且无意义的测试分析,进而实现在嵌入式设备Web服务上测试时漏洞挖掘效率的提升,该方法具体包括:
提取嵌入式设备Web服务关联信息,所述嵌入式设备Web服务关联信息包括数据流关键字及敏感函数调用路径;
通过嵌入式设备Web服务前端管理接口并利用数据流关键字构造测试用例对嵌入式设备Web服务进行测试,同时监测识别到的敏感函数调用路径,通过动态程序插桩方法实现对嵌入式设备Web服务中复杂的数据交互和隐式调用的精准监控,避免无效的测试进而提高对嵌入式设备Web服务的模糊测试效率。
进一步地,按照以下方式获取数据流关键字:
以Binwalk提取的固件解压包squashfs作为输入,并通过对文件分类的方法将固件解压包squashfs分为前端文件集合和后端文件集合;
以正则匹配、抽象语法树方法提取出前端文件集合中所有前端文件的前端关键字集合;
遍历提取后端文件集合中每一个后端二进制组件的后端关键字,并将后端文件与后端关键字与前端关键字集合的交集记为数据流关键字并存入映射结构;
通过依据匹配中的关键字数量进行排序的方法对映射结构进行排序处理,得到最终的映射结构。
进一步地,在获取数据流关键字之后,还包括:
根据数据流关键字在数据交互中发挥的作用继续细分为负载实际内容信息的参数类关键字以及用于标识处理函数的API类关键字。
进一步地,按照以下方式获取敏感函数调用路径:
生成交互二进制组件的反编译对象;
遍历地分析生成交互二进制组件对应的参数类数据流关键字中每一个关键字在交互二进制组件的反编译对象的引用函数集合;
对于任意一个引用函数集合,遍历其中每一个引用函数的完整函数调用链,并筛选出包含敏感函数的函数调用链与参数类数据流关键字一同存入映射结构中。
进一步地,按照以下方式构造测试用例:
捕获嵌入式设备Web服务正常交互中的数据包作为原始测试用例并进行原语拆解,变异其中的数据流关键字后重新组合生成待发送的测试用例。
进一步地,采用基于“gdb+gdbserver”的远程调试架构实现动态程序插桩方法:
在交互二进制组件中设置待监测的信号量及调试规则作为预置条件,当交互二进制组件在运行中符合预置条件时触发gdb的调试,自动监测出其运行状况从而提供模糊测试反馈;
交互二进制组件的进程崩溃时远程调试环境gdb无法继续获取实时运行信息,目标设备系统产生core dump文件,模糊测试引擎通过gdb的API以套接字将core dump文件回传以供调试、检测崩溃现场。
本发明另一方面提出一种基于嵌入式设备Web服务关联信息的模糊测试系统,包括:
关联信息提取模块,用于提取嵌入式设备Web服务关联信息,所述嵌入式设备Web服务关联信息包括数据流关键字及敏感函数调用路径;
模糊测试模块,用于通过嵌入式设备Web服务前端管理接口并利用数据流关键字构造测试用例对嵌入式设备Web服务进行测试,同时监测识别到的敏感函数调用路径,通过动态程序插桩方法实现对嵌入式设备Web服务中复杂的数据交互和隐式调用的精准监控,避免无效的测试进而提高对嵌入式设备Web服务的模糊测试效率。
进一步地,按照以下方式获取数据流关键字:
以Binwalk提取的固件解压包squashfs作为输入,并通过对文件分类的方法将固件解压包squashfs分为前端文件集合和后端文件集合;
以正则匹配、抽象语法树方法提取出前端文件集合中所有前端文件的前端关键字集合;
遍历提取后端文件集合中每一个后端二进制组件的后端关键字,并将后端文件与后端关键字与前端关键字集合的交集记为数据流关键字并存入映射结构;
通过依据匹配中的关键字数量进行排序的方法对映射结构进行排序处理,得到最终的映射结构。
进一步地,关联信息提取模块还用于:
根据数据流关键字在数据交互中发挥的作用继续细分为负载实际内容信息的参数类关键字以及用于标识处理函数的API类关键字。
进一步地,按照以下方式获取敏感函数调用路径:
生成交互二进制组件的反编译对象;
遍历地分析生成交互二进制组件对应的参数类数据流关键字中每一个关键字在交互二进制组件的反编译对象的引用函数集合;
对于任意一个引用函数集合,遍历其中每一个引用函数的完整函数调用链,并筛选出包含敏感函数的函数调用链与参数类数据流关键字一同存入映射结构中。
进一步地,按照以下方式构造测试用例:
捕获嵌入式设备Web服务正常交互中的数据包作为原始测试用例并进行原语拆解,变异其中的数据流关键字后重新组合生成待发送的测试用例。
进一步地,基于“gdb+gdbserver”的远程调试架构实现动态程序插桩方法:
在交互二进制组件中设置待监测的信号量及调试规则作为预置条件,当交互二进制组件在运行中符合预置条件时触发gdb的调试,自动监测出其运行状况从而提供模糊测试反馈;
交互二进制组件的进程崩溃时远程调试环境gdb无法继续获取实时运行信息,目标设备系统产生core dump文件,模糊测试引擎通过gdb的API以套接字将core dump文件回传以供调试、检测崩溃现场。
与现有技术相比,本发明具有的有益效果:
传统的模糊测试方法,未从整体的角度考虑嵌入式设备Web服务中的数据交互的完整过程,无法精准定位并监控其中复杂的交互过程和隐式调用,应用于实际的嵌入式设备Web服务的测试时存在一定的不兼容性。另外,嵌入式设备多样的处理器架构一定程度上也阻碍了传统的模糊测试方法在嵌入式设备Web服务上进行测试。而本发明通过预先静态分析得到的嵌入式设备Web服务关联信息引导模糊测试,突破嵌入式设备Web服务中复杂的信息交互约束并实现对其中敏感函数调用路径的准确识别;在准确识别敏感函数调用路径的基础上,使用跨架构的监测机制对嵌入式设备的Web服务中的敏感路径进行精准监测,解决模糊测试方法应用于嵌入式平台时的不兼容性。除此之外,本发明使用基于原语拆分的测试用例构造方法,只在原有的交互信息中引入了少量且必要的测试载荷,可以在保证测试用例有效性的同时,又不会被所测试嵌入式设备Web服务对象大批量拒绝。
本发明从嵌入式设备Web服务中的信息交互过程入手,以静态分析和动态测试为基础,提出了一种针对嵌入式设备Web服务的模糊测试方法及系统,有效解决传统模糊测试方法难以有效针对嵌入式设备Web服务实施测试的问题。并且,本发明应用于实际嵌入式设备Web服务的测试式效果提升明显,对嵌入式设备的Web服务具有良好的适配性。
附图说明
图1为本发明实施例一种基于嵌入式设备Web服务关联信息的模糊测试方法的基本流程图;
图2为本发明实施例反编译示例图;
图3为本发明实施例构建的模糊测试引擎架构示意图;
图4为本发明实施例测试用例生成过程示例图;
图5为本发明实施例敏感函数插桩过程示意图;
图6为本发明实施例一种基于嵌入式设备Web服务关联信息的模糊测试系统的架构示意图。
具体实施方式
下面结合附图和具体的实施例对本发明做进一步的解释说明:
如图1所示,一种基于嵌入式设备Web服务关联信息的模糊测试方法,包括:
提取嵌入式设备Web服务关联信息,所述嵌入式设备Web服务关联信息包括数据流关键字及敏感函数调用路径;
通过嵌入式设备Web服务前端管理接口并利用数据流关键字构造测试用例对嵌入式设备Web服务进行测试,同时监测识别到的敏感函数调用路径,通过动态程序插桩方法实现对嵌入式设备Web服务中复杂的数据交互和隐式调用的精准监控,避免无效的测试进而提高对嵌入式设备Web服务的模糊测试效率。
进行以下具体阐述:
1.本发明利用嵌入式设备Web服务关联信息引导模糊测试,因此,首先需要提取嵌入式设备Web服务关联信息,该关联信息主要由两部分构成:1)数据流关键字,嵌入式设备Web服务中承载前端管理接口和后端二进制组件之间进行数据交互的关键字;2)敏感函数调用路径,数据流关键字在嵌入式设备Web服务后端二进制组件中被引用且可能存在安全漏洞的函数调用路径。
1.1关于数据流关键字,本发明依据嵌入式设备Web服务前端资源文件的类别(主要是Html、Xml以及Js三类)以正则匹配、抽象语法树进行获取,并且根据这些关键字在数据交互中发挥的作用继续细分为负载实际内容信息的参数类关键字(如图2中的“deviceName”字段)以及用于标识处理函数的API类关键字(如图2中的“goform/setUsbUnload”字段),具体的数据流关键字提取算法的过程描述为:
①首先,算法以Binwalk提取的固件解压包squashfs作为输入,并通过对文件分类的file_classify方法将固件解压包squashfs分为前端文件集合front_files和后端文件集合back_files;
②对于前端文件集合front_files,算法通过整合了正则表达式和抽象语法树的front_analysisy方法提取出其中所有前端文件的前端关键字集合front_keywords;
③对于后端文件集合back_files,算法通过集成了GNU-String的back_analysis方法遍历提取其中每一个后端二进制组件bin的后端关键字temp_keywords,并将后端文件bin与后端关键字temp_keywords与前端关键字集合front_keywords的交集记为数据流关键字keywds并存入映射结构bin_keywords_map;
④最后,算法通过依据匹配中的关键字数量进行排序的sort_by_match_num方法对映射结构bin_keywords_map进行排序处理,得到最终的bin_keywords_map。
bin_keywords_map是一个降序排序的序号到交互二进制组件(负责前后端交互的后端二进制组件)及所对应数据流关键字的映射,表示为bin_keywords_map:=index→bin,keywds,其中index表示序号,bin表示该交互二进制组件,keywds表示交互二进制组件对应的数据流关键字。其中,keywds中的任意一组keywd的可由参数类关键字para与API类关键字api的表示为:keywd=[api,para],即keywds可由若干组[api,para]所表示。
1.2关于敏感函数调用路径,本发明以敏感函数调用路径生成算法对其进行提取,该算法以交互二进制组件bin及其对应的参数类数据流关键字para_keywds作为输入,具体的敏感函数调用路径生成算法的过程描述为:
①首先,算法通过read_bin方法生成交互二进制组件bin的反编译对象current_Program;
②然后,算法通过get_refFunc方法遍历地分析生成bin对应的参数类数据流关键字para_keywds中每一个para_keywd在bin的反编译对象current_Program的引用函数集合callers;
③对于任意一个引用函数集合callers,算法通过check_callPcode方法遍历其中每一个caller的完整函数调用链caller_chain,并由check_focusFun方法筛选出包含表1中敏感函数的caller_chain与para_keywd一同存入映射结构keywd_paths中。
算法最终得到当前二进制程序中参数类数据流关键字到的敏感函数调用路径的映射para_keywd_paths:=para_keywd→path。同时,由1.1中参数类关键字和API类关键字的关系联立可知,para_keywd_paths:=[api,para]→path。
值得注意的是,敏感函数调用路径生成算法中相关函数的实现调用了开源反汇编工具Ghidra的API。例如,函数check_callPcode的作用是获取关键字keywd的完整函数调用链caller_chain,它的功能实现依赖于Ghidra所提供的Ghidra P-Code API。Ghidra P-Code是Ghidra专为逆向工程设计的寄存器传输语言,能够对不同架构的CPU进行建模,将各种不同的CPU汇编代码转换为统一的中间语言P-Code并提供了API。另外,函数check_focusFun负责判断caller_chain是否为可能导致安全漏洞的路径,check_focusFun的敏感函数检查依据如表1所示。
表1敏感函数表
2.获取上述的嵌入式设备Web服务关联信息后,需要将该关联信息应用于对嵌入式设备Web的模糊测试中,因此,本发明构造了模糊测试引擎(如图3所示)以便利用该关联信息实施模糊测试。其中,1)数据流关键字[api_keywd,para_keywd]引导+模糊测试生成质量更高的测试用例;2)敏感函数调用路径path通过动态程序插桩(二进制代码动态插桩)技术实现对嵌入式设备的后端Web服务二进制组件的高效异常监测机制形成反馈,进而指导模糊测试。
2.1关于测试用例生成部分,本发明采用了基于原语(这里特指网络协议中不可分割的协议字段)拆解的变异方法,具体来说是,本发明捕获嵌入式设备Web服务正常交互中的数据包作为原始测试用例并进行原语拆解,变异其中的关键原语(数据流关键字)后重新组合生成待发送的测试用例,其详细的生成过程如图4所示。
2.2嵌入式设备具有丰富多样的架构体系,对嵌入式设备的固件进行程序插桩时,跨架构调试是首先要面临的挑战。实施过程中,本发明以敏感函数插桩方法实现了针对嵌入式设备Web服务二进制组件的高效异常监测机制,该方法的实现依赖于二进制代码动态插桩技术对图3中的敏感函数调用路径path进行动态程序插桩。
具体来说,敏感函数插桩方法的实现基于“gdb+gdbserver”的远程调试架构,gdb(本发明实际使用了gdb支持调试多硬件体系架构的版本gdb-multiarch)是一款强大的、支持调试Linux系统中应用程序的工具,gdb具有强大的跨架构能力,可以实现对不同架构目标程序的调试需求;gdb可满足开发者个性化的调试需求,它提供了丰富、便捷的PythonAPI以供外部脚本调用。除此之外,gdb的调试命令“follow-fork-mode”对多进程调试有很好的支持,避免在调试中错过对重点关注的业务逻辑处理程序。因此,“gdb+gdbserver”远程调试架构十分支持敏感函数插桩方法的实现需求。
在使用gdb调试程序时,gdb可以监测并捕获程序运行中产生的各种信号并按照设置的调试规则挂起程序获取当前的程序状态上下文信息,例如内存信息、寄存器信息、栈堆结构以及函数调用链等。如图5所示,模糊测试引擎借助gdb这一特性在交互二进制组件中设置待监测的信号量及调试规则作为预置条件,当交互二进制组件在运行中符合预置条件时触发gdb的调试,自动监测出其运行状况从而提供模糊测试反馈。另外,交互二进制组件的进程崩溃时远程调试环境gdb无法继续获取实时运行信息,目标设备系统会产生coredump文件,模糊测试引擎通过gdb的API以套接字将core dump文件回传以供调试、检测崩溃现场。崩溃现场的回溯有助于分析复杂的崩溃以最终确认漏洞。
在上述实施例的基础上,如图6所示,本发明还提出一种基于嵌入式设备Web服务关联信息的模糊测试系统,包括:
关联信息提取模块,用于提取嵌入式设备Web服务关联信息,所述嵌入式设备Web服务关联信息包括数据流关键字及敏感函数调用路径;
模糊测试模块,用于通过嵌入式设备Web服务前端管理接口并利用数据流关键字构造测试用例对嵌入式设备Web服务进行测试,同时监测识别到的敏感函数调用路径,通过动态程序插桩方法实现对嵌入式设备Web服务中复杂的数据交互和隐式调用的精准监控,避免无效的测试进而提高对嵌入式设备Web服务的模糊测试效率。
进一步地,按照以下方式获取数据流关键字:
以Binwalk提取的固件解压包squashfs作为输入,并通过对文件分类的方法将固件解压包squashfs分为前端文件集合和后端文件集合;
以正则匹配、抽象语法树方法提取出前端文件集合中所有前端文件的前端关键字集合;
遍历提取后端文件集合中每一个后端二进制组件的后端关键字,并将后端文件与后端关键字与前端关键字集合的交集记为数据流关键字并存入映射结构;
通过依据匹配中的关键字数量进行排序的方法对映射结构进行排序处理,得到最终的映射结构。
进一步地,关联信息提取模块还用于:
根据数据流关键字在数据交互中发挥的作用继续细分为负载实际内容信息的参数类关键字以及用于标识处理函数的API类关键字。
进一步地,按照以下方式获取敏感函数调用路径:
生成交互二进制组件的反编译对象;
遍历地分析生成交互二进制组件对应的参数类数据流关键字中每一个关键字在交互二进制组件的反编译对象的引用函数集合;
对于任意一个引用函数集合,遍历其中每一个引用函数的完整函数调用链,并筛选出包含敏感函数的函数调用链与参数类数据流关键字一同存入映射结构中。
进一步地,按照以下方式构造测试用例:
捕获嵌入式设备Web服务正常交互中的数据包作为原始测试用例并进行原语拆解,变异其中的数据流关键字后重新组合生成待发送的测试用例。
进一步地,基于“gdb+gdbserver”的远程调试架构实现动态程序插桩方法:
在交互二进制组件中设置待监测的信号量及调试规则作为预置条件,当交互二进制组件在运行中符合预置条件时触发gdb的调试,自动监测出其运行状况从而提供模糊测试反馈;
交互二进制组件的进程崩溃时远程调试环境gdb无法继续获取实时运行信息,目标设备系统产生core dump文件,模糊测试引擎通过gdb的API以套接字将core dump文件回传以供调试、检测崩溃现场。
综上所述,本发明在传统的针对嵌入式设备Web服务模糊测试方法的基础上,利用嵌入式设备Web服务关联信息引导模糊测试过程,提升了在嵌入式设备Web服务上进行模糊测试的整体效率。
以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
- 一种用于嵌入式设备的软件版本测试方法及系统
- 基于模糊信息的航迹关联方法及系统
- 基于模糊信息的航迹关联方法及系统