[发明专利]一种基于简易符号执行的二进制代码漏洞挖掘方法有效
申请号: | 201210243800.7 | 申请日: | 2012-07-13 |
公开(公告)号: | CN102841844A | 公开(公告)日: | 2012-12-26 |
发明(设计)人: | 马金鑫;李舟军;忽朝俭 | 申请(专利权)人: | 北京航空航天大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京慧泉知识产权代理有限公司 11232 | 代理人: | 王顺荣;唐爱华 |
地址: | 100191*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 简易 符号 执行 二进制 代码 漏洞 挖掘 方法 | ||
技术领域
本发明涉及到一种基于简易符号执行的二进制代码漏洞挖掘方法,可以检测由输入不当导致的漏洞。可适用于多平台,且只对二进制代码进行静态解释,不需要实际执行,因此较高效。使用其中一种安全属性规则成功地验证了所有近年来瑞星、超级巡警、诺顿等杀毒软件驱动程序中报的ioctrol例程中的漏洞。适用于软件测试、漏洞挖掘等领域。
背景技术
传统软件漏洞挖掘方法一般使用黑盒Fuzz测试,通过构造一组随机输入传递给程序,直到程序崩溃。这种方法较盲目,既无法获知哪些程序路径已经被执行,也无法有导向性地构造输入,使程序可执行到未被遍历过的路径。测试过程中的大部分时间都在重复执行着同样的路径,使测试时间成本过高。源码级的测试可以帮助程序员发现很多由于代码风格或错误的语法语义引起的BUG,但存在几个缺点:1)无法发现程序运行时的BUG;2)在很多情况下,源码并不是可及的;3)需对每一类程序设计语言分别考虑。
对于软件测试、漏洞挖掘等领域,往往需要考虑代码覆盖问题,尽可能多地覆盖二进制代码的执行路径,可以提高发现程序代码中BUG的可能性。然而,由于二进制代码中的分支数量非常多,使获取某一执行路径所对应的输入成为最难的研究问题之一。为解决这个问题,学术界提出了一种新的概念,符号执行,即把输入作为符号,然后通过静态解释源码的形式来收集约束,遇到分支时,同时展开两条路径,继续向下进行。符号执行的误报率极低,但是也存在一些弊端:解释过程中,状态空间容易增长得非常大,效率较低。
近年来,国外出现了一些基于动态执行路径,符号与具体执行混合的方法所实现的工具,如DART、CUTE、Sage、Catchconv、Fuzzgrind等。其中,DART与CUTE同宗,它们使用同样的中间语言、插装方式及求解方法。Catchconv与Fuzzgrind为开源工具,都使用Valgrind作为其插装框架,只有微软的Sage是运行在Windows上,但未发布出来。但这些工具有一个共同的缺点,由于需要对源代码或二进制代码进行插装,由于插装代码的大量存在使运行效率较低,对于恶意软件,实际运行会带来其它危险。
综上所述,本发明提出一种针对于二进制的、使用简易的符号执行挖掘漏洞的方法。在本方法中,先获取二进制代码的控制流信息,并把二进制代码翻译到一种中间语言,在该中间语言和控制流信息对某个函数进行符号执行,函数体内的分支一般不会很多,且不需要考虑循环问题,因此比传统的符号执行更加高效,通过获得表达式与输入向量间的依赖关系,根据一定的安全属性规则来判断是否漏洞。
发明内容
本发明的目的就是在克服传统的符号执行与具体执行的缺点的前提上,提供一种基于简易符号执行的二进制代码漏洞挖掘方法,它是一种快速、有效的软件漏洞挖掘方法,针对二进制代码中的函数进行符号执行,并考虑控制流从而达到代码覆盖。
为达到上述目的,本发明的技术方案是这样实现的:
一种基于简易符号执行的二进制代码漏洞挖掘方法,该方法包括以下步骤:
步骤A.实现反汇编引擎,可以提取二进制代码中的函数信息,并能分析函数内的控制流信息。
步骤B.实现二进制代码翻译组件,将二进制代码转化成中间语言。
步骤C.确认输入点(即函数的参数及子函数调用),对函数中调用的子函数进行建模。
步骤D.根据步骤A,B,C中产生的结果进行符号执行,把输入作为符号,静态解释中间语言并更新每条指令执行的上下文,对于分支,需要保存当前上下文,遍历一条路径后,再恢复保存的上下文,继续执行下一条路径。
步骤E.当执行到函数结束时,符号执行过程产生一些与输入相关的表达式集合,根据一定的安全属性规则,简化、分析这些表达式最后判断是否有漏洞。
其中,步骤A中所述的二进制代码为Windows、Linux等操作系统下的x86可执行代码。
步骤A所述控制流信息是由基本块信息组成的链表,基本块信息包括:
A1.基本块标号(Label),表示该基本块的标识符,值唯一;
A2.基本块的开始地址(Start Address);
A3.基本块的结束地址(End Address);
A4.基本块的入度数(In Count),表示可以到达该基本块的前驱的数量,入度数为0的基本块为本函数的第一个基本块;
A5.基本块的出度数(Out Count),表示由该基本块可到达的后继的数量,该值不大于2,出度数为0的基本块为本函数的最后一个基本块;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210243800.7/2.html,转载请声明来源钻瓜专利网。