面向漏洞挖掘的基于符号分治区的测试用例生成技术
发布时间:2021-12-01 23:05
在漏洞挖掘中,符号执行技术是一种常用的测试用例生成技术。但当软件中包含加解密、校验和检验等复杂数学运算函数时,使用符号执行技术生成测试用例存在无法有效求解约束表达式的问题,导致漏洞挖掘效率低下。针对该问题,文章结合分治算法的思想提出基于符号分治区的测试用例生成技术。首先通过静态分析技术识别软件中的加解密、校验和检验等函数;然后以程序中的加解密、校验和检验函数为分界点对软件进行分区,符号执行引擎每执行到软件的一个分治区,就在本区引入一个新的符号变元进行约束构建,在约束求解时从软件最后一个分治区开始递归求解。基于该方法,文章在符号执行平台S2E上实现了漏洞挖掘原型系统Divide,并与现有的符号执行生成测试用例技术进行对比实验。实验结果表明,文章方法能够快速、有效地生成测试用例,提高漏洞挖掘的效率。
【文章来源】:信息网络安全. 2020,20(05)北大核心CSCD
【文章页数】:8 页
【部分图文】:
图1分治区划分示意图??5)令分治区2的符号表达式F4〇〇aF5〇〇aF6〇;)等??于“AAAA”,求解得到分治区2的具体输入值/
?*p=0;??13?}??14?b64decode(buf,?buf2);??15?puts(MThe?decode?result1');??16?puts(buf2);??17}??以32位系统为例,执行到分治点函数b6Wecode〇??时如鑛取辟麵言息进行分析。32位系统的函数参??数以及函数返回地址都放置在函数的堆栈空间中,通过??对函数调用前后的行分析即可获取函麵回職??与函数参数信息。当程序流执行callb^Wecode指令后,??b?decode〇的堆栈空间如图3所示。函数找从栈顶到栈??底依次保存该函雖行完毕的返回脈,函数的参数1??(buf?)、参数2?(?buf2)等信息。当软件执行到函数挂钩??祖时,首先读取締器ESP的值,获取函麵纖顶??在内存中的位置;之后从函数找读取函数执行完毕后的??返回地址以及用来引人符号变元的内存空间的地址;最??后将寄存器EIP的值覆盖为函数的返回地址以跳过该函??数的执行。??esp??????返回地址??Argl?(buf)??Arg2?(buf2)??ebp??图3堆栈空间示例??以代码1为例,符号变元引入可以理解为如下过??程:辟执行引擎执行到代码行14时调用符号引入模??块,分析b64decode〇的堆栈,获取代码行15的EIP值??与b64decode〇中第2个参数bu£2的地址。在buf2的地??址空间内引人新的符号变元,并跳过代码行15的执行,??直織行代码行16。??符号变元引入的详细算法如算法1所示。算法输??人为分治点函数地址,输出为新引人的符号变元。算??法1通过函数getSymb〇进行调用。??算法1符号变元引入
3?vl一1))??(And?(Eq?0x41?(Read?w8?0x2?v〇))??(And?(Eq?0x41?(Read?w8?0x1?vl_1))??(Eq?0x41?(Read?w8?0x0?vl_l)))))????calculated?pathConstraints'?size?=?2,?original?pathConstraints'?size?=?Z??图6约束构建??个分治区的约束,使约束表达式的值等于sir中的内容??并求解,得到的值即为输人。求解结果如图7所示。??00000000?娜■?YWFhYQ==.??00000010??00000020??60060036??60060040??00006056??00000060??图7求解结果??4结束语??当软件中包含加解密、校验和检验等复杂数学运??算函数时,細符^撕技术生成测试用例存在无法有??效求解约束表达式的问题。针对该问题,本文提出了基??于符号分治区的测试用例生成技术。通过实例可以看出??本:能够函数的约棘解问题,能??够細咖密,校錄复杂数学运算函数盼测试??用例方酿具优势,提高了漏洞挖掘的效率。但本妓??法需要先通过对软件的静态分析得到作为分治点的函数??的相关信息,对软件静态分析能力要求较高。下一步的??工^把函麵要施加入软般析狐提高发现??与分析软件中分治点函数信息的能力。?(责编马珂)??参考文献:??[1]?DONG?Qixing.?Research?on?Test?Case?Generation?Technology?Based??on?Dynamic?Symbol?Execution[D]
【参考文献】:
期刊论文
[1]模型检测中状态爆炸问题研究综述[J]. 侯刚,周宽久,勇嘉伟,任龙涛,王小龙. 计算机科学. 2013(S1)
[2]基于符号化执行的Fuzzing测试方法[J]. 陈建敏,舒辉,熊小兵. 计算机工程. 2009(21)
硕士论文
[1]基于动态符号执行的测试用例生成技术研究[D]. 董齐兴.中国科学技术大学 2014
本文编号:3527222
【文章来源】:信息网络安全. 2020,20(05)北大核心CSCD
【文章页数】:8 页
【部分图文】:
图1分治区划分示意图??5)令分治区2的符号表达式F4〇〇aF5〇〇aF6〇;)等??于“AAAA”,求解得到分治区2的具体输入值/
?*p=0;??13?}??14?b64decode(buf,?buf2);??15?puts(MThe?decode?result1');??16?puts(buf2);??17}??以32位系统为例,执行到分治点函数b6Wecode〇??时如鑛取辟麵言息进行分析。32位系统的函数参??数以及函数返回地址都放置在函数的堆栈空间中,通过??对函数调用前后的行分析即可获取函麵回職??与函数参数信息。当程序流执行callb^Wecode指令后,??b?decode〇的堆栈空间如图3所示。函数找从栈顶到栈??底依次保存该函雖行完毕的返回脈,函数的参数1??(buf?)、参数2?(?buf2)等信息。当软件执行到函数挂钩??祖时,首先读取締器ESP的值,获取函麵纖顶??在内存中的位置;之后从函数找读取函数执行完毕后的??返回地址以及用来引人符号变元的内存空间的地址;最??后将寄存器EIP的值覆盖为函数的返回地址以跳过该函??数的执行。??esp??????返回地址??Argl?(buf)??Arg2?(buf2)??ebp??图3堆栈空间示例??以代码1为例,符号变元引入可以理解为如下过??程:辟执行引擎执行到代码行14时调用符号引入模??块,分析b64decode〇的堆栈,获取代码行15的EIP值??与b64decode〇中第2个参数bu£2的地址。在buf2的地??址空间内引人新的符号变元,并跳过代码行15的执行,??直織行代码行16。??符号变元引入的详细算法如算法1所示。算法输??人为分治点函数地址,输出为新引人的符号变元。算??法1通过函数getSymb〇进行调用。??算法1符号变元引入
3?vl一1))??(And?(Eq?0x41?(Read?w8?0x2?v〇))??(And?(Eq?0x41?(Read?w8?0x1?vl_1))??(Eq?0x41?(Read?w8?0x0?vl_l)))))????calculated?pathConstraints'?size?=?2,?original?pathConstraints'?size?=?Z??图6约束构建??个分治区的约束,使约束表达式的值等于sir中的内容??并求解,得到的值即为输人。求解结果如图7所示。??00000000?娜■?YWFhYQ==.??00000010??00000020??60060036??60060040??00006056??00000060??图7求解结果??4结束语??当软件中包含加解密、校验和检验等复杂数学运??算函数时,細符^撕技术生成测试用例存在无法有??效求解约束表达式的问题。针对该问题,本文提出了基??于符号分治区的测试用例生成技术。通过实例可以看出??本:能够函数的约棘解问题,能??够細咖密,校錄复杂数学运算函数盼测试??用例方酿具优势,提高了漏洞挖掘的效率。但本妓??法需要先通过对软件的静态分析得到作为分治点的函数??的相关信息,对软件静态分析能力要求较高。下一步的??工^把函麵要施加入软般析狐提高发现??与分析软件中分治点函数信息的能力。?(责编马珂)??参考文献:??[1]?DONG?Qixing.?Research?on?Test?Case?Generation?Technology?Based??on?Dynamic?Symbol?Execution[D]
【参考文献】:
期刊论文
[1]模型检测中状态爆炸问题研究综述[J]. 侯刚,周宽久,勇嘉伟,任龙涛,王小龙. 计算机科学. 2013(S1)
[2]基于符号化执行的Fuzzing测试方法[J]. 陈建敏,舒辉,熊小兵. 计算机工程. 2009(21)
硕士论文
[1]基于动态符号执行的测试用例生成技术研究[D]. 董齐兴.中国科学技术大学 2014
本文编号:3527222
本文链接:https://www.wllwen.com/guanlilunwen/ydhl/3527222.html