首页> 中国专利> 一种基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法

一种基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法

摘要

本发明面向嵌入式固件漏洞挖掘提出了一种基于字权变异与虚拟插桩技术的嵌入式固件灰盒模糊测试方法,可有效提高嵌入式固件漏洞挖掘的速度和效果。该方法包括如下步骤:1)字权变异:使用基于字段权重的测试用例变异策略生成新的测试用例;2)虚拟插桩:使用嵌入式固件QEMU虚拟仿真环境翻译时插桩方法获取被测嵌入式固件的代码覆盖信息。基于字段权重的测试用例变异策略能提高测试用例迭代更新的质量和速度,嵌入式固件QEMU虚拟仿真环境翻译时插桩方法能减小被测嵌入式固件在统计代码覆盖信息时的执行开销,两者结合能极大提高嵌入式固件漏洞挖掘的效率。

著录项

  • 公开/公告号CN113835998A

    专利类型发明专利

  • 公开/公告日2021-12-24

    原文格式PDF

  • 申请/专利权人 上海大学;

    申请/专利号CN202110868733.7

  • 发明设计人 周鹏;时磊;

    申请日2021-07-30

  • 分类号G06F11/36(20060101);

  • 代理机构31205 上海上大专利事务所(普通合伙);

  • 代理人何文欣

  • 地址 200444 上海市宝山区上大路99号

  • 入库时间 2023-06-19 13:49:36

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-06-17

    实质审查的生效 IPC(主分类):G06F11/36 专利申请号:2021108687337 申请日:20210730

    实质审查的生效

说明书

技术领域

本发明涉及一种基于字权变异和虚拟插桩技术的嵌入式固件灰盒模糊测试方法,适用于嵌入式设备固件中的漏洞挖掘,同时不依赖嵌入式设备,具有漏洞挖掘效率高、人工分析依赖度低等特点。

背景技术

嵌入式设备以其功耗低、成本低等特点被广泛应用于各个行业。近年来,随着通信技术、智能终端、云计算等基础支撑技术的发展,嵌入式设备的功能越来越丰富。嵌入式设备正在逐渐取代传统的非嵌入式设备(如插座、电灯、水表、电表等),这给我们的工作和生活带来了极大的便利。由于嵌入式设备的开发缺乏统一的规范,嵌入式固件中很可能存在漏洞。但是嵌入式设备普遍缺乏安全防护能力,因此嵌入式固件中的漏洞对使用者的个人隐私、财产及生命安全造成了极大的威胁。对嵌入式固件进行漏洞挖掘,发现并及时修复固件漏洞对提高嵌入式设备的安全性具有重大现实意义。

现有的嵌入式固件漏洞挖掘方法大多基于嵌入式设备或对嵌入式固件进行静态分析。基于嵌入式设备的固件漏洞挖掘方法直接和物理设备交互,无法获取固件程序的内部信息,且需要先获取嵌入式设备;而对嵌入式固件进行静态分析存在严重的误报问题,静态分析的结果还需要依靠人工验证。为解决上述问题,近年来以AFL(American FuzzyLop)为代表的灰盒模糊测试技术被大量应用在嵌入式固件漏洞挖掘领域,该技术通过代码插桩解决了模糊测试过程中固件程序内部代码执行信息无法获取的问题,从而可以在不需要人工分析的基础上指导高质量测试用例的生成。然而,现有的AFL代码插桩技术在虚拟化环境下(如QEMU) 需要在代码翻译执行的过程中重复的对代码的虚拟化指令进行追踪,极大的降低了模糊测试的执行效率。此外,AFL也缺乏一种针对嵌入式固件输入字段分析变异的手段,导致测试用例的生成和变异缺乏导向性,这也从另一个方面影响了模糊测试的效率。

因此,为了提高AFL灰盒模糊测试技术挖掘嵌入式固件漏洞的效率,本发明提出一种基于字权变异和虚拟插桩技术的嵌入式固件灰盒模糊测试方法,基于字段权重的变异有针对性的指导测试用例的生成,同时结合虚拟插桩技术在虚拟化指令翻译的第一次进行追踪代码固化插桩,从而进一步提高模糊测试的效率。

发明内容

本发明面向嵌入式固件漏洞挖掘问题,提出一种基于字权变异和虚拟插桩技术的灰盒模糊测试方法。该方法针对被测嵌入式固件程序搭建虚拟运行环境(如QEMU),在虚拟运行环境下对嵌入式固件程序进行基于虚拟插桩的模糊测试和基于字权变异的测试用例生成。该方法不依赖嵌入式设备硬件,具有模糊测试执行效率高、测试用例生成质量好等特点,可以在高效获取嵌入式固件代码覆盖信息的基础上有效地挖掘嵌入式固件中的漏洞。

为了达到上述发明目的,本发明通过以下具体技术方案进行实现:

一种基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法,包括如下步骤:

1)字权变异:基于字段权重的测试用例变异策略生成新的测试用例;

2)虚拟插桩:嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息。

优选地,一种基于字权变异和虚拟插桩技术的嵌入式固件灰盒模糊测试方法,包括如下步骤:

1)字权变异:基于字段权重的测试用例变异策略生成新的测试用例,具体为:

步骤1.1、收集并筛选测试用例,删除冗余测试用例,对保留下来的测试用例打分并添加到被测嵌入式固件程序的测试用例库中;

步骤1.2、从测试用例库中选取一个测试用例T

步骤1.3、将选取的测试用例T

步骤1.4、对测试用例T

步骤1.5、随机生成一个变异次数M

步骤1.6、随机生成一个变异概率P并随机选取测试用例T

2)虚拟插桩:嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息,具体为:

步骤2.1、将变异生成的测试用例T

步骤2.2、检查被测固件程序的结束状态,若被测固件异常结束,则将导致被测固件程序异常结束的测试用例T

优选地,在所述步骤1.1中,筛选测试用例的方法为:以被测嵌入式固件程序的边执行信息为标准,被测嵌入式固件程序的边即从一个基本块到另一个基本块的跳转,依次从测试用例库中选取测试用例作为被测嵌入式固件程序的输入数据,记录被测嵌入式固件程序的边执行信息,若被测嵌入式固件程序执行了新的边,则将此测试用例添加到测试用例库中,否则丢弃此测试用例。

优选地,在所述步骤1.3中,依据被测嵌入式固件程序的输入数据格式分割测试用例,将被测嵌入式固件程序的输入数据看成由n个字段组成的数据,则测试用例T

优选地,在所述步骤1.4中,对测试用例打分的方法为:测试用例T

其中e

优选地,在所述步骤2.1中,使用嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息具体方法为:QEMU在执行嵌入式固件程序时会先将嵌入式固件程序的指令按照基本块翻译成本地指令,翻译由QEMU中的tb_gen_code函数完成,因此在tb_gen_code函数中将记录被测嵌入式固件程序执行信息的桩代码插入到固件指令的翻译结果中,当翻译后的嵌入式固件程序被执行时就会执行桩代码指令,桩代码指令将被测固件的执行信息保存到记录固件程序代码覆盖率的内存中。

本发明与现有技术相比较,具有如下显而易见的突出实质性特点和显著优点:

1.本发明基于字权变异与虚拟插桩的嵌入式固件灰盒模糊测试方法,可有效提高嵌入式固件漏洞挖掘的速度和效果;

2.本发明基于字段权重的测试用例变异策略能提高测试用例迭代更新的质量和速度,嵌入式固件QEMU虚拟仿真环境翻译时插桩方法能减小被测嵌入式固件在统计代码覆盖信息时的执行开销,两者结合能极大提高嵌入式固件漏洞挖掘的效率。

附图说明

图1为本发明的原理图。

图2为本发明的基于字段权重的测试用例变异算法流程图。

图3(a)为QEMU的工作流程。

图3(b)AFL的QEMU模式对被测程序进行动态插桩的原理。

图3(c)为本发明对被测嵌入式固件程序动态插桩的原理。

图4为使用本发明的插桩方式与使用模糊测试工具AFL的插桩方式执行不同嵌入式固件程序时,嵌入式固件程序的执行速度对比。

图5为使用本发明方法挖掘的嵌入式固件漏洞。

具体实施方式

下面就优选实施例结合附图对本发明进行详细说明。

实施例一:

参见图1,本基于字权变异和虚拟插桩技术的嵌入式固件灰盒模糊测试方法,其特征包括如下步骤:

1)字权变异:基于字段权重的测试用例变异策略生成新的测试用例;

2)虚拟插桩:嵌入式固件翻译时插桩获取被测嵌入式固件的代码执行信息。

针对被测嵌入式固件程序搭建虚拟运行环境,在虚拟运行环境下对嵌入式固件程序进行基于虚拟插桩的模糊测试和基于字权变异的测试用例生成,可在高效获取嵌入式固件代码覆盖信息的基础上有效地挖掘嵌入式固件中的漏洞。

实施例二:

本实施例与实施例一基本相同,特别之处如下:

参见图1~图5,所述步骤1)具体包括下列步骤:

步骤1.1、收集并筛选测试用例,删除冗余测试用例,对保留下来的测试用例打分并添加到被测嵌入式固件程序的测试用例库中;

步骤1.2、从测试用例库中选取一个测试用例T

步骤1.3、将选取的测试用例T

步骤1.4、对测试用例T

步骤1.5、随机生成一个变异次数M

步骤1.6、随机生成一个变异概率P并随机选取测试用例T

优选地,所述步骤1.1中,筛选测试用例的方法为:以被测嵌入式固件程序的边(即从一个基本块到另一个基本块的跳转)执行信息为标准,依次选取测试用例作为输入数据,执行并记录被测嵌入式固件程序的边执行信息,若被测嵌入式固件程序执行了新的边,则将此测试用例添加到测试用例库中,否则丢弃此测试用例;

优选地,所述步骤1.3中,依据被测嵌入式固件程序的输入数据格式分割测试用例,将被测嵌入式固件程序的输入数据看成由n个字段组成的数据,则测试用例T

优选地,所述步骤1.4中,对测试用例打分的方法为:测试用例T

其中e

所述步骤2)具体包括下列步骤:

步骤2.1、将变异生成的测试用例T

步骤2.2、检查被测固件程序的结束状态,若被测固件异常结束,则将导致被测固件程序异常结束的测试用例T

优选地,所述步骤2.1使用嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息具体方法为:QEMU在执行嵌入式固件程序时会先将嵌入式固件程序的指令按照基本块翻译成本地指令,翻译由QEMU中的tb_gen_code函数完成,因此在tb_gen_code函数中将记录被测嵌入式固件程序执行信息的桩代码插入到固件指令的翻译结果中,当翻译后的嵌入式固件程序被执行时就会执行桩代码指令,桩代码指令将被测固件的执行信息保存到记录固件程序代码覆盖率的内存中。

图3(a)所示为在QEMU环境下执行二进制程序的流程,QEMU通过tb_find函数查找要执行的二进制程序的基本块,如果此基本块已经被翻译过,则直接执行,否则调用 tb_gen_code函数将要执行的二进制程序的基本块翻译成本地指令后执行。

图3(b)所示为模糊测试工具AFL(American Fuzzy Lop)的QEMU模式对被测程序插桩的原理图,为了能记录被测程序的代码信息,AFL在QEMU的tb_find函数中加入了一段记录被测程序信息的统计代码,当QEMU要执行被测程序的一个基本块代码时会先调用 tb_find函数,tb_find函数中的统计代码会记录被测程序的执行信息。由于被测程序的同一段代码每次被执行时都需要QEMU调用tb_find进行翻译,因此这种插桩方法使得同一段程序每次执行时都需要进行重复的翻译插桩,极大的影响了模糊测试的执行效率。

图3(c)所示为本发明记录被测固件程序代码信息的插桩原理图,为了提高被测嵌入式固件程序在QEMU虚拟环境下的运行速度,本发明将记录被测固件程序代码执行信息的桩代码通过tb_gen_code函数直接插入到被测固件程序翻译后的本地指令前,因此,对于同一段代码,只需要在第一次执行的时候进行插桩操作,而不需要每次执行同一段代码时都将程序控制权从被测嵌入式固件程序切换到QEMU来记录被测固件程序的代码执行信息。

图4为使用本实施例的插桩方式与使用模糊测试工具AFL执行嵌入式固件程序的速度对比,对于不同的嵌入式固件程序,在本实施例插桩方式下的执行速度比在AFL插桩方式下的执行速度快。

图5为使用本实施例方法对某智能插座固件中的lighttpd程序进行模糊测试发现的漏洞,证明了本发明方法的有效性。

上述实施例面向嵌入式固件漏洞挖掘提出了一种基于字权变异与虚拟插桩技术的嵌入式固件灰盒模糊测试方法,可有效提高嵌入式固件漏洞挖掘的速度和效果。该方法包括如下步骤:1)字权变异:使用基于字段权重的测试用例变异策略生成新的测试用例;2)虚拟插桩:使用嵌入式固件QEMU虚拟仿真环境翻译时插桩方法获取被测嵌入式固件的代码覆盖信息。基于字段权重的测试用例变异策略能提高测试用例迭代更新的质量和速度,嵌入式固件 QEMU虚拟仿真环境翻译时插桩方法能减小被测嵌入式固件在统计代码覆盖信息时的执行开销,两者结合能极大提高嵌入式固件漏洞挖掘的效率。

上面对本发明实施例结合附图进行了说明,但本发明不限于上述实施例,还可以根据本发明的发明创造的目的做出多种变化,凡依据本发明技术方案的精神实质和原理下做的改变、修饰、替代、组合或简化,均应为等效的置换方式,只要符合本发明的发明目的,只要不背离本发明的技术原理和发明构思,都属于本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号