一种基于功能模型的二进制代码漏洞发现方法技术

技术编号:3955607 阅读:283 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及计算机软件逆向分析领域。一种基于功能模型的二进制代码漏洞发现方法,首先基于静态逆向分析系统建立代码功能模型,并基于所述代码功能模型构造初始测试用例集;其次,通过动态测试与回放分析系统依据覆盖率控制和选路策略在动态测试平台上加载测试用例集,并采用动态路径约束优化和约束求解、基于代的路径遍历算法进行测试用例集的调整,以及根据回放分析进行异常的精细分析及漏洞定位;第三,静态逆向分析系统和动态测试与回放分析系统均将各自分析得到的程序属性存入功能模型中,并以功能模型中的程序属性来指导各自的分析测试工作。能有效减少测试用例生成的盲目性,提高测试用例集的有效性,进而提高漏洞挖掘的自动化程度和效率。

【技术实现步骤摘要】

本专利技术属于计算机软件逆向分析领域,具体地说,本专利技术涉及一种新的计算机软件漏洞发现技术,即一种可执行软件漏洞发现方法。
技术介绍
二进制代码级的软件漏洞挖掘技术本质上是一种特殊类型的基于 逆向分析的软件测试技术,其研究涉及各类漏洞的形成机理、软件测试理论、操作系统运行 机制、静态的反汇编分析技术和动态调试跟踪技术、处理器仿真动态跟踪技术等。目前的挖 掘技术从逆向分析的软件测试角度而言,可分为三类白箱分析、黑箱分析和灰箱分析。白箱分析包括分析和理解源代码。对于在源代码一级的软件漏洞挖掘,主要分析 不安全函数的调用,给出可能导致漏洞的程序模式或匹配规则,设计一些静态分析工具,通 过扫描源代码来发现漏洞。白箱分析的优点是高效快速,整个过程可以自动完成,能较全面 地覆盖系统代码。而其存在的问题是通过分析会产生大量的误报,分析复杂性高,结果可 用性差。2000年,美国加利福尼亚大学的David Wagner发表的“A First Step Towards Automated Detection ofBuffer Overrun Vulnerabilities”初步给出了基于源代码分析 的溢出漏洞发现规则。Cigital的SourceScope、开放源码的ITS4、FlowFinder、Estima发 布的RATS是几款比较典型的静态扫描分析工具,可以用以发现C或C++程序中的缓冲区溢 出漏洞,其中RATS还支持Perl、PHP、Python等编程语言。黑箱分析是指直接利用各种输入对程序进行探测,并不借助于任何源代码。黑箱 分析作为软件测试的手段已经发展了很多年,理论比较成熟。通过输入非常规的命令行参 数、交互时的输入、环境变量等数据来触发潜在的安全漏洞。相对于白箱分析,黑箱分析容 易实施,并能够较准确和真实地确定缓冲区溢出漏洞的存在。黑箱分析的主要缺点是不 能确定是否覆盖了目标程序的所有代码,而且无法处理由一组输入序列引起的安全漏洞。 Fuzzing就是一种基于黑箱分析的漏洞自动检测技术。它向被测试的应用程序提供半有 效性的输入,即可以被应用程序所接受并且具有一定破坏性的随机输入。它检查应用程序 是否能正确处理可能的错误输入,通过监控应用程序的执行情况发现程序中潜在的漏洞。 Fuzzing技术可以用于检测多种安全漏洞,包括有缓冲区溢出漏洞、整型溢出漏洞、格式 化串漏洞、竞争条件漏洞、SQL注入、跨站点脚本、远程命令执行、文件系统攻击、信息泄露寸。灰箱分析结合了白箱分析和黑箱分析技术,灰箱分析一般需要某些工具的协同工 作。比如,灰箱分析在调试程序中运行目标程序,并给目标程序提供专门的输入数据集,通 过这种方法在程序运行的同时检测可能的错误和漏洞。例如,Rational的Purify就是一 个强大的工具,可以在软件运行时动态检查软件,提供运行时详细的内存使用和资源消耗 的信息,为缓冲区溢出漏洞的发现提供依据。与灰箱分析相关的各类工具有反汇编工具如 DataRescue公司的IDAPR0、动态跟踪工具如Compuware公司的Softice、代码覆盖工具如 Maryland 大学的 dyninst API 工具等。此外,还有基于形式化机器证明、计算机辅助推理和补丁比对等方法的漏洞发现 技术。传统的漏洞发现方法有以下缺点(1)漏洞测试效率不高。在漏洞测试中,测试数据是随机产生的,或者有固定的模式。测试数据的产生和程序如何处理这些数据无关,另外一旦测试数据产生就是最终的测 试数据,测试效率不高。(2)漏洞测试的效果不好评估。现在常用代码覆盖率来评估漏洞测试的效果存在 很多不足,因为代码覆盖率和漏洞测试效率并不存在直接联系,代码覆盖率高并不表示发 现的漏洞多。(3)异常不好排查。现有的漏洞发现方法不能自动分析异常的原因,且不能自动记 录指令的执行过程。
技术实现思路
本专利技术针对现有技术不足,提出一种基于功能模型进行漏洞发现的全新思路,能 有效减少测试用例生成的盲目性,提高测试用例集的有效性,进而提高漏洞挖掘的自动化 程度和效率,为漏洞发现的自动化和智能性、安全性测试的完备性等提供有力保障。本专利技术所采用的技术方案,包括静态逆向分析系统、动态测 试与回放分析系统和功能模型库,首先基于静态逆向分析系统建立起具有形式化验证和推 理功能的代码功能模型,并基于所述代码功能模型构造初始测试用例集,即建立功能模型 库;其次,通过所述动态测试与回放分析系统,依据覆盖率控制和选路策略在动态测试平台 上加载测试用例集,对测试用例集进行动态测试,并采用动态路径约束优化和约束求解、基 于代的路径遍历算法进行测试用例集的调整,以及根据回放分析进行异常的精细分析及漏 洞定位;第三,静态逆向分析系统和动态测试与回放分析系统均将各自分析得到的程序属 性存入功能模型中,并以功能模型中的程序属性来指导各自的分析测试工作。所述的基于功能模型的二进制代码漏洞发现方法,通过所述的静态逆向分析系 统,实现二进制代码的反汇编简化抽象表示(SAIR)、程序代码控制流分析、运行时刻环境 抽取、变量取值范围分析、指针别名分析、数据结构分析还原、数据类型传播分析、脆弱点分 析、污点传播分析以及路径约束生成与优化,逆向分析得到各类程序属性,并对各类程序属 性进行描述分类存入功能模型中。所述的基于功能模型的二进制代码漏洞发现方法,二进制代码的反汇编简化抽象 表示(SAIR)的流程包括下述步骤①对二进制代码文件通过反汇编器进行反汇编得到汇 编程序,将可执行程序中机器指令序列转化成汇编指令序列;②提取反汇编代码,包括代码 和数据、子程序信息、调用集合;③根据汇编指令的特点,对不同处理器指令系统进行分析, 结合设计的描述指令相关信息属性的语法和语义实现二进制代码的反汇编简化抽象表示。所述的基于功能模型的二进制代码漏洞发现方法,设计一种描述指令相关信息属 性的语法,通过对指令语义的描述,建立从汇编代码到中间语言代码的映射,分析二进制代 码的各类属性,包括程序控制流、变量的取值、数据结构还原、数据的依赖关系的需要,实现 二进制代码简化汇编语言中间表示,SAIR使用以下语法分类①a e Aexp,算术表达式;②b e Bexp,布尔表达式;③I e lns,指令集;假定程序的变量集合可数明确,不会出现新的立即数、标号、操作符,则SAIR对应 的单词符号有以下几种①η e Num,数值;②1 e Lab,标号;③Ri e R,寄存器;④M e M,n e Z,内存单元,M eM可简写成;直接寻址的内存单元广(η),η e Z ;间接寻址的内存单元 *(η+^),η e Ζ, Ri e R;⑤ 0pa e Opa,算术操作,Opa = {+,-,*,/};⑥ opr e 0pr,关系表达 式,Opr = {>,=,<};⑦ opb e 0pb,布尔表达式,<> =卜,Λ,ν);SAIR抽象语法规则描述如下算术表达式Aexp:a: = η | RO | * (n+R0) | a0 opa B1 ;布尔表达式Bexp :b = true | false | jmp 11 a0 opr al \ not b|b0 opb bl ;程序指令1:1::= ' I ' 本文档来自技高网
...

【技术保护点】
一种基于功能模型的二进制代码漏洞发现方法,包括静态逆向分析系统、动态测试与回放分析系统和功能模型库,其特征是:首先基于静态逆向分析系统建立起具有形式化验证和推理功能的代码功能模型,并基于所述代码功能模型构造初始测试用例集,即建立功能模型库;其次,通过所述动态测试与回放分析系统,依据覆盖率控制和选路策略在动态测试平台上加载测试用例集,对测试用例集进行动态测试,并采用动态路径约束优化和约束求解、基于代的路径遍历算法进行测试用例集的调整,以及根据回放分析进行异常的精细分析及漏洞定位;第三,静态逆向分析系统和动态测试与回放分析系统均将各自分析得到的程序属性存入功能模型中,并以功能模型中的程序属性来指导各自的分析测试工作。

【技术特征摘要】

【专利技术属性】
技术研发人员:王震宇窦增杰姚伟平何红旗陈楠刘建林刘铁铭王瑞敏
申请(专利权)人:中国人民解放军信息工程大学
类型:发明
国别省市:41[中国|河南]

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

1