当前位置: 首页 > 专利查询>上海大学专利>正文

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

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

【技术实现步骤摘要】
一种基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法


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

技术介绍

[0002]嵌入式设备以其功耗低、成本低等特点被广泛应用于各个行业。近年来,随着通信技术、智能终端、云计算等基础支撑技术的发展,嵌入式设备的功能越来越丰富。嵌入式设备正在逐渐取代传统的非嵌入式设备(如插座、电灯、水表、电表等),这给我们的工作和生活带来了极大的便利。由于嵌入式设备的开发缺乏统一的规范,嵌入式固件中很可能存在漏洞。但是嵌入式设备普遍缺乏安全防护能力,因此嵌入式固件中的漏洞对使用者的个人隐私、财产及生命安全造成了极大的威胁。对嵌入式固件进行漏洞挖掘,发现并及时修复固件漏洞对提高嵌入式设备的安全性具有重大现实意义。
[0003]现有的嵌入式固件漏洞挖掘方法大多基于嵌入式设备或对嵌入式固件进行静态分析。基于嵌入式设备的固件漏洞挖掘方法直接和物理设备交互,无法获取固件程序的内部信息,且需要先获取嵌入式设备;而对嵌入式固件进行静态分析存在严重的误报问题,静态分析的结果还需要依靠人工验证。为解决上述问题,近年来以AFL(American FuzzyLop)为代表的灰盒模糊测试技术被大量应用在嵌入式固件漏洞挖掘领域,该技术通过代码插桩解决了模糊测试过程中固件程序内部代码执行信息无法获取的问题,从而可以在不需要人工分析的基础上指导高质量测试用例的生成。然而,现有的AFL代码插桩技术在虚拟化环境下(如QEMU) 需要在代码翻译执行的过程中重复的对代码的虚拟化指令进行追踪,极大的降低了模糊测试的执行效率。此外,AFL也缺乏一种针对嵌入式固件输入字段分析变异的手段,导致测试用例的生成和变异缺乏导向性,这也从另一个方面影响了模糊测试的效率。
[0004]因此,为了提高AFL灰盒模糊测试技术挖掘嵌入式固件漏洞的效率,本专利技术提出一种基于字权变异和虚拟插桩技术的嵌入式固件灰盒模糊测试方法,基于字段权重的变异有针对性的指导测试用例的生成,同时结合虚拟插桩技术在虚拟化指令翻译的第一次进行追踪代码固化插桩,从而进一步提高模糊测试的效率。

技术实现思路

[0005]本专利技术面向嵌入式固件漏洞挖掘问题,提出一种基于字权变异和虚拟插桩技术的灰盒模糊测试方法。该方法针对被测嵌入式固件程序搭建虚拟运行环境(如QEMU),在虚拟运行环境下对嵌入式固件程序进行基于虚拟插桩的模糊测试和基于字权变异的测试用例生成。该方法不依赖嵌入式设备硬件,具有模糊测试执行效率高、测试用例生成质量好等特点,可以在高效获取嵌入式固件代码覆盖信息的基础上有效地挖掘嵌入式固件中的漏洞。
[0006]为了达到上述专利技术目的,本专利技术通过以下具体技术方案进行实现:
[0007]一种基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法,包括如下步骤:
[0008]1)字权变异:基于字段权重的测试用例变异策略生成新的测试用例;
[0009]2)虚拟插桩:嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息。
[0010]优选地,一种基于字权变异和虚拟插桩技术的嵌入式固件灰盒模糊测试方法,包括如下步骤:
[0011]1)字权变异:基于字段权重的测试用例变异策略生成新的测试用例,具体为:
[0012]步骤1.1、收集并筛选测试用例,删除冗余测试用例,对保留下来的测试用例打分并添加到被测嵌入式固件程序的测试用例库中;
[0013]步骤1.2、从测试用例库中选取一个测试用例T
i
,判断测试用例T
i
是否已按字段分割,若已按字段分割,则执行步骤1.4;
[0014]步骤1.3、将选取的测试用例T
i
按照被测固件程序的输入格式分割成不同的字段,并对各个字段赋变异权重;
[0015]步骤1.4、对测试用例T
i
进行打分,根据测试用例T
i
的得分确定由T
i
生成的新的测试用例的数量;
[0016]步骤1.5、随机生成一个变异次数M
c
,M
c
为此轮生成新的测试用例需要变异的次数;
[0017]步骤1.6、随机生成一个变异概率P并随机选取测试用例T
i
中的字段f,若字段f的变异权重大于或等于变异概率P,则对字段f进行变异,并记录变异的字段f,重复此操作直至对测试用例编译M
c
次,输出变异生成的新的测试用例T
i
';
[0018]2)虚拟插桩:嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息,具体为:
[0019]步骤2.1、将变异生成的测试用例T
i
'作为被测固件程序的输入数据在嵌入式固件虚拟运行环境下运行被测固件程序,使用嵌入式固件翻译时插桩方法记录被测嵌入式固件的执行信息;
[0020]步骤2.2、检查被测固件程序的结束状态,若被测固件异常结束,则将导致被测固件程序异常结束的测试用例T
i
'保存到异常测试用例库中。
[0021]优选地,在所述步骤1.1中,筛选测试用例的方法为:以被测嵌入式固件程序的边执行信息为标准,被测嵌入式固件程序的边即从一个基本块到另一个基本块的跳转,依次从测试用例库中选取测试用例作为被测嵌入式固件程序的输入数据,记录被测嵌入式固件程序的边执行信息,若被测嵌入式固件程序执行了新的边,则将此测试用例添加到测试用例库中,否则丢弃此测试用例。
[0022]优选地,在所述步骤1.3中,依据被测嵌入式固件程序的输入数据格式分割测试用例,将被测嵌入式固件程序的输入数据看成由n个字段组成的数据,则测试用例T
i
看成是由 f1,f2,...f
n
共n个字段组成的数据,即其中f
j
为输入数据格式中的第j个字段。
[0023]优选地,在所述步骤1.4中,对测试用例打分的方法为:测试用例T
i
的得分S
i
计算方法如下:
[0024][0025]其中e
j
表示测试用例T
i
命中的第j条边,为命中边e
j
的测试用例的数量。
[0026]优选地,在所述步骤2.1中,使用嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息具体方法为:QEMU在执行嵌入式固件程序时会先将嵌入式固件程序的指令按照基本块翻译成本地指令,翻译由QEMU中的tb_gen_code函数完成,因此在tb_gen_code函数中将记录被测嵌入式固件程序执行信息的桩代码插入到固件指令的翻译结果中,当翻译后的嵌入式固件程序被执行时就会执行桩代码指令,桩代码指令将被测固件的执行信息保存到记录固件程序代码覆盖率的内存中。
[0027]本专利技术与现有技术相比较,具有如下显而本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法,其特征在于,包括如下步骤:1)字权变异:基于字段权重的测试用例变异策略生成新的测试用例;2)虚拟插桩:嵌入式固件翻译时插桩方法获取被测嵌入式固件的执行信息。2.根据权利要求1所述的基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法,其特征在于:所述步骤1)具体包括下列步骤:步骤1.1、收集并筛选测试用例,删除冗余测试用例,对保留下来的测试用例打分并添加到被测嵌入式固件程序的测试用例库中;步骤1.2、从测试用例库中选取一个测试用例T
i
,判断测试用例T
i
是否已按字段分割,若已按字段分割,则执行步骤1.4;步骤1.3、将选取的测试用例T
i
按照被测固件程序的输入格式分割成不同的字段,并对各个字段赋变异权重;步骤1.4、对测试用例T
i
进行打分,根据测试用例T
i
的得分确定由T
i
生成的新的测试用例的数量;步骤1.5、随机生成一个变异次数M
c
,M
c
为此轮生成新的测试用例需要变异的次数;步骤1.6、随机生成一个变异概率P并随机选取测试用例T
i
中的字段f,若字段f的变异权重大于或等于变异概率P,则对字段f进行变异,并记录变异的字段f,重复此操作直至对测试用例编译M
c
次,输出变异生成的新的测试用例T
i
'。3.根据权利要求1所述的基于字权变异和虚拟插桩的嵌入式固件灰盒模糊测试方法,其特征在于:所述步骤2)具体包括下列步骤:步骤2.1、将变异生成的测试用例T
i
'作为被测固件程序的输入数据在嵌入式固件虚拟运行环境下运行被测固件程序,使用嵌入式固件翻译时插桩方法记录被测嵌入式固件的执行信息;步骤2.2、检查被测固件程序的结束状态,若被测固件异常结束,则将导致被测固件程序异常结束的测试用例T
i...

【专利技术属性】
技术研发人员:周鹏时磊
申请(专利权)人:上海大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1