一种二进制程序漏洞挖掘方法和系统的制作方法

文档序号:9911534阅读:924来源:国知局
一种二进制程序漏洞挖掘方法和系统的制作方法
【技术领域】
[0001] 本发明涉及计算机应用技术领域,特别涉及一种二进制程序漏洞挖掘方法和系 统。
【背景技术】
[0002] 从漏洞挖掘对象来分,软件漏洞挖掘可以分为两类:一类是针对源代码的漏洞挖 掘;另一类是针对二进制程序的漏洞挖掘。源代码漏洞挖掘的最大特点是:有丰富、完备的 语义信息。所以,针对源代码的漏洞挖掘相对比较容易。一般采用静态分析的方法就可以检 测出漏洞,且在静态分析时,由于有明确的程序执行路径,所以其通常有较高的代码覆盖 率。
[0003] 然而源代码毕竟不是二进制程序,源代码层次的安全并不代表二进制程序的安 全,两者之间的对应性无从验证,比如,源代码中不存在编译、链接过程中引入的漏洞。 Linux系统下的符号链接漏洞就是在链接过程中引入的漏洞,该类漏洞在源代码中并不存 在,却真实地存在于二进制程序中。另一方面,由于商业利益和软件产权保护等问题,很多 时候安全工作者并不能拿到软件源代码,而只能针对二进制程序进行漏洞挖掘。所以,研究 二进制程序的漏洞挖掘具有十分重要的意义。
[0004] 从语义信息上来说,二进制漏洞挖掘要比源代码困难许多,因为它面对的不是具 有完整语义的高级语言,而是贴近系统底层的机器码。也正因为此,对二进制程序进行漏洞 挖掘,会比在源码上更加实用与准确。
[0005] 对于二进制程序的漏洞挖掘,按照其是否真实执行可分为三类:1)静态分析法进 行漏洞挖掘;2)动态执行法进行漏洞挖掘;3)动静结合进行漏洞挖掘。
[0006] 静态分析指在不执行程序的情况下,对程序进行语义、流程分析的技术。静态分析 中,目前研究较多的是静态污点分析(Static taint analysis)和符号执行(Symbolic execution)。静态污点分析是在程序数据流和控制流分析的基础上,将输入数据标记为"污 染数据"(不可信数据),然后检查被污染数据是否影响程序中某些关键节点,比如:jmp、 call指令。如果影响,则认为存在漏洞。而符号执行指在不真实执行程序的情况下,用符号 值表示程序变量的值,然后模拟程序执行来进行相关分析。
[0007] 动态执行指通过真实执行二进制程来进行漏洞挖掘。该技术目前采用较多是动态 污点分析(Dynamic taint analysis)和模糊测试(Fuzzing)。动态污点分析和静态污点分 析的原理基本相同。区别在于,静态污点分析在检测时并不真正运行程序,而是通过模拟程 序的执行来传播污点标记;而动态污点分析技术需要运行程序,同时实时传播并检测污点 标记。模糊测试(Fuzzing)在一种基于动态执行的漏洞挖掘方法,在整个软件漏洞挖掘领域 中占有重要地位,也是目前二进制程序漏洞的主要挖掘方式。该技术通过构造不同样本数 据来测试二进制程序的执行状况,从而确定目标程序是否存在漏洞。
[0008] 静态分析与动态执行技术都有其各自的优缺点,比如:静态分析的优势在于分析 全面,但准确性差强人意。动态执行在准确性上表现良好,但代码覆盖率很低。仅仅依靠静 态或者动态的方式对二进制程序进行漏洞挖掘显然存在一定的弊端,如何采用动静结合的 方式进行有效的漏洞挖掘是该领域技术人员需要解决的技术问题。

【发明内容】

[0009] 本发明提供一种二进制程序漏洞挖掘方法和系统,以解决上述技术问题。
[0010] 本发明提供的一种二进制程序漏洞挖掘方法,包括步骤:
[0011] 步骤A,采用反编译器IDA将二进制程序转化为汇编语言,并基于IDA进行汇编语言 层次的静态分析得到函数流图;
[0012] 步骤B,通过中间语言平台BAP将所述汇编语言转化为BIL语言,并结合静态分析的 分析结果对所述BIL语言进行Promela模型建模;
[0013] 步骤C,构建漏洞模型,并插入到所述Promela模型中;
[0014]步骤D,引入外部C代码修补SPIN,并基于修补后的SPIN模拟执行所述Promela模 型,检测漏洞;
[0015]步骤E,输出检测结果和漏洞信息。
[0016]其中,所述步骤B中结合静态分析的分析结果对所述BIL语言进行Promela模型建 模包括步骤:
[0017] B1,依据静态分析得出的函数流图,对BIL代码进行程序切片切分成BIL语句;
[0018] B2,进行从切分后得到的BIL语句到Promela语句的细粒度代码转化;
[0019] B3,将经过细粒度代码转化后的Promela语句构建、组装成Promela模型。
[0020] 其中,步骤B1包括步骤:
[0021] 依据静态分析的函数流图,以sub函数为单位,将BIL代码切分成不同函数片断;
[0022] 对BIL代码中的汇编指令进行多维度匹配,将所述函数片断切分成指令集;
[0023]对BIL语句的完备性进行检验,以将BIL指令集切分成BIL语句。
[0024] 其中,步骤B2包括步骤:
[0025] 预先对BIL语句的各种特征进行总结,并构建BIL语句的特征池将其置于特征池 中;
[0026] 将待转化的BIL语句与所述特征池中的特征进行匹配;
[0027] 将匹配后的BIL语句转化为符合Promela中嵌C语法的Promela语句。
[0028] 其中,步骤C包括:
[0029]对已知的软件漏洞样本进行分析总结,抽象出漏洞特征,用Promela语言描述漏洞 特征,建立漏洞模型;
[0030]采用代码插粧技术,将所述漏洞模型插入到所述Promela模型中。
[0031]其中,步骤D中引入外部C代码修补SPIN包括步骤:
[0032]预先设置外部C代码,来构建执行所述Promela模型必要的系统资源、维护临时状 态、处理SPIN无法处理的BIL中的表达式和关键字以及处理BAP无法解析的汇编指令;
[0033]步骤D中基于修补后的SPIN模拟执行所述Promela模型,检测漏洞包括步骤:
[0034] 将Promela模型转化为C代码程序;
[0035]使用编译器将转化后的C代码和外部C代码联合编译成一个可执行程序;
[0036]执行编译好的可执行程序进行模型检测。
[0037]本发明还提供一种二进制程序漏洞挖掘系统,包括预处理模块、代码转化模块和 模型检测模块;
[0038]预处理模块,用于采用反编译器IDA将二进制程序转化为汇编语言,并基于IDA进 行汇编语言层次的静态分析得到函数流图;
[0039] 代码转化模块,用于通过中间语言平台BAP将汇编语言转化为BIL语言,并结合静 态分析的分析结果对BIL语言进行Promela模型建模;构建漏洞模型插入到Promela模型中;
[0040] 模型检测模块,用于引入外部C代码修补SPIN,并基于修补后的SPIN模拟执行所述 Promela模型,检测漏洞;输出检测结果和漏洞信息。
[0041] 其中,代码转化模块,用于:
[0042] 依据静态分析得出的函数流图,对BIL代码进行程序切片切分成BIL语句;进行从 切分后得到的BIL语句到Promela语句的细粒度代码转化;将经过细粒度代码转化后的 Prome 1 a语句构建、组装成Prome 1 a模型;对已知的软件漏洞样本进行分析总结,抽象出漏洞 特征,用Promela语言描述漏洞特征,建立漏洞模型;采用代码插粧技术,将所述漏洞模型插 入到所述Promela模型中。
[0043]其中,代码转化模块,用于:
[0044] 依据静态分析的函数流图,以sub函数为单位,将BIL代码切分成不同函数片断;对 BIL代码中的汇编指令进行多维度匹配,将所述函数片断切分成指令集;对BIL语句的完备 性进行检验,以将BIL指令集切分成BIL语句;
[0045] 预先对BIL语句的各种特征进行总结,并构建BIL语句的特征池将其置于特征池 中;将待转化的BIL语句与所述特征池中的特征进行匹配;将匹配后的BIL语句转化为符合 Prome la中嵌C语法的Prome la语句。
[0046] 其中,模型检测模块,用于:
[0047]预先设置外部C代码,来构建执行所述Promela模型必要的系统资源、维护临时状 态、处理SPIN无法处理的BIL中的表达式和关键字以及处理BAP无法解析的汇编指令;将 Promela模型转化为C代码程序;使用编译器将转化后的C代码和外部C代码联合编译成一个 可执行程序;执行编译好的可执行程序进行模型检测。
[0048] 本发明实施例提供了一种二进制程序漏洞挖掘方法和系统,将待挖掘的目标二进 制程序转化为汇编语言,并进行汇编语言层次漏洞的静态分析,结合静态分析的分析结果 对中间语言BIL进行Promela模型建模,利用中间语言作为桥梁实现二进制程序的自动化建 模,进而利用SPIN的嵌C功能进行模拟执行,并引入外部C代码来弥补模型检测的不足,实现 漏洞的模型检测。如此,用静态分析结果优化模型检测的模拟执行,提出了一种新的采用动 静结合并基于模型检测进行漏洞挖掘的机制,实现了静态分析与动态执行的结合;使用该 方法和系统进行漏洞挖掘测试,结果表明,该漏洞挖掘方法和系统能够准确地挖掘出已知 的软件漏洞,且能得到精确的漏洞类型与位置信息,实现了基于动静结合构思进行有效的 漏洞挖掘。
[0049] 外部C代码的引入使得该漏洞挖掘系统的实现成为可能的同时,也扩展、改进了 SPIN的模型执行性能。
【附图说明】
[0050] 图1为本发明二进制程序漏洞挖掘方法一个实施例的流程示意图;
[0051] 图2位本发明二进制程序漏洞挖掘系统的一个实施例的结构框架示意图;
[0052] 图3本发明实施例中模型检测漏洞挖掘流程图;
[0053] 图4本发明实施例中自动化建模过程;
[0054]图5本发明实施例中SPIN验证过程;
[0055]图6本发明实施例中外部C代码引入SPIN的原理图;
[0056]图7本发明实施例中漏洞挖掘系统设计框
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1