微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 模拟电路设计 > 基于动态输入追踪的模糊技术研究

基于动态输入追踪的模糊技术研究

时间:12-20 来源:互联网 点击:

数和路径分支处有关路径选择的比较字段,将其保存到测试数据库。

另外还可在错误注入点所在的函数中搜索对不安全库函数的调用,根据不安全库函数易引发漏洞的类型,生成相关的测试用例集。同时还可以在动态追踪过程中,在执行跳转指令前修改指定寄存器的值以到达不同路径的代码,从而提高了测试的代码覆盖率。

  2.4 基于快照恢复的错误注入技术

现今大多数软件为了提高自身安全性,都加强了软件的纠错能力和安全保护机制,会在接收外部输入后对输入数据进行正确和一致性检测,甚至一些软件还要在之前对编码的数据进行解码,不考虑数据格式的暴力测试在软件对输入数据进行的正确和一致性检测中都会被过滤掉。而大多数协议或文件格式都非常复杂且未被公开,想要了解格式的结构或生成正确格式的文件都非常困难。为此,采用基于内存快照恢复的错误注入技术,以绕过软件的检测机制进行fuzzing测试。选用具有正确格式的输入数据样本以通过软件的相关检测函数的验证,在执行到真正对数据进行应用的相关解析函数时,设置错误注入点,保存此时进程的所有上下文内容即进程快照,接着改变调用参数为生成的测试用例,再在函数的结束处设置还原点,接着继续运行并监测程序的运行状况。若无异常发生,则当程序运行到还原点时挂起进程,将进程环境恢复为错误注入点处保存的上下文内容,重新进行错误注入,直到程序发生异常或测试用例耗尽。采用这种方法还可以避免通常测试过程中的网络延迟、重启程序和执行与处理输入无关的代码等所耗费时间,大大提高了测试效率。

  3 系统的设计实现与实验评估

用pythON 语言编写了基于上述技术的测试工具,此工具主要由5 个模块组成,分别为静态逆向分析模块、动态跟踪模块、测试数据生成模块、错误注入模块、异常检测及记录模块。总体模块组成如图2 所示。

  

静态逆向分析模块主要是利用反汇编工具IDA Pro 来反汇编目标程序的二进制代码,以生成相应的汇编代码,在此基础上利用脚本自动识别确定函数块及其内部的基本块,分析程序的基本结构和函数调用关系;查找代码中的静态字符串、整数和代码分支处的比较字段,并搜索代码中调用的不安全库函数,用以建立测试用例库。

动态跟踪模块在调试器的基础上构建而成,主要负责在程序执行期间动态监测输入函数的调用,以确定输入数据的内存位置;接着跟踪输入数据的流向和使用,在输入数据被读写时记录操作函数,以确定错误注入点。

测试数据生成模块主要负责根据静态逆向分析模块提供的分析查找结果自动建立测试用例库,并利用测试用例库在测试过程中自动生成测试用例。

错误注入模块主要负责自动将测试数据生成模块生成的测试用例注入到程序进程中。在程序运行到错误注入点时,保存错误注入前的进程快照,修改输入数据所在的地址指针;在执行到还原点时,恢复之前保存的进程快照,重新进行错误注入。

异常检测记录模块主要负责通过监测程序的异常报错,寻找软件存在的问题。要记录分析的部分包括:(1)异常的类型:运算错误,标准输入/输出错误,内存访问错误,系统APIs 调用错误,一般运行时错误,语法错误,应用程序不可预知的崩溃等。(2)错误记录:系统自身的错误记录,可执行程序的错误记录。(3)出错时各个寄存器值和其他环境变量的值,以及程序的返回值。

选取一款小型代理服务器软件Polipo 作为测试对象,验证该动态输入追踪方法的有效性。用系统动态跟踪服务器进程接收来自远程client 的http 请求,针对处理请求消息中各字段的处理函数生成测试用例并注入进行fuzzing。当生成测试用例的Content-Length 字段值为一个极大整数时,检测到发生内存非法访问异常,服务器随即崩溃。通过调试器调试软件发现Polipo 的client.c 文件中httpClientDiscardBody()函数存在符号错误,当远程用户提交带有超长Content-Length头的http 请求会产生整数溢出,进而导致服务崩溃,从而验证了该漏洞的存在。

  4 结束语

本文在基于反汇编的输入路径追踪技术的基础上,结合基于代码覆盖的测试数据生成和基于快照恢复的错误注入技术,将其应用于fuzzing 测试中,提出了一种软件安全漏洞自动挖掘的新方法。该方法较好地解决了fuzzing 技术存在的测试数据空间巨大、代码覆盖不完整和测试效率低等问题,且无需目标软件源代码,因而应用范围较广。基于此方法设计并实现了一个测试系统,通过对实例软件的漏洞挖掘实验,验证了该方法的有效性。下一步工作主要为对输入路径的追踪细化为针对指令级的追踪,以进一步提高动态追踪的精确性和可靠性。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top