论文部分内容阅读
系统安全领域有很多关键问题需要针对二进制代码进行安全特性的分析,比如安全脆弱性分析与利用,安全后门分析,恶意代码分析等等。对二进制代码进行分析的重要工程方法之一是反编译,但传统反编译的目标是将二进制代码逆向变换成C/C++等高级编程语言源码,受限于高级编程语言的复杂语法结构,这种方法不但要花费大量的代价(往往需要人工介入)以支持正确的语法结构,而且最终的输出结果并不利于后续计算机辅助安全分析;更进一步,高级编程语言无法精确描述安全敏感的低级操作,这样的反编译过程会造成安全相关敏感信息的丢失,从而直接影响安全分析的正确性。
本文从二进制代码安全分析的特殊需求出发,对现有反编译技术进行改进和完善,着重研究其中的控制流分析(包括复合条件结构识别、复合多路分支结构识别、嵌套循环结构识别等)、数据流分析(别名分析、变量重用等)和代码生成(规范化中间语言表达)等三方面的关键技术,以保全安全相关敏感信息为前提,将二进制代码里被编译优化或者混淆打乱并重组的控制流和数据流结构转变为结构化良好的规范化的中间语言表达,从而为各种安全分析应用提供支持。
本文的创新点主要体现在以下几个方面:
(1)提出了基于复合分支子图的复合条件结构识别算法,该算法比经典的C.Cifuentes算法和E.Moretti算法在识别准确率和实现效率上都有显著提高;
(2)首次提出基于级联分支子图的复合多路分支识别算法,可将零散分支簇准确识别构成多路分支结构(Switch);
(3)在深入探讨嵌套循环和深度优先搜索(depth-first search,DFS)之间的相关属性的基础上,提出了基于单次遍历的识别算法,该算法比R.E.Tarjian等人多次遍历的算法快2-8倍;
(4)在研究嵌套循环算法识别的同时,发现并首次提出程序控制流图的“低非结构化属性”(LoW Unstructuredness Property,LUP),该属性将控制流图和普通的单根有向连通图相区分,并可以为算法设计、优化和选择提供有效的指导。
(5)在控制结构分析、LuP属性的基础上提出了一种控制流图规范化算法,将二进制代码中杂乱分布的基本块转变为可归约(reducible)的结构良好的规范化序列表示;
(6)数据流分析部分:引入了符号执行和编译领域的静态单一赋值(SSA),并根据反编译的特殊需求首次提出支持变量生成的静态单一赋值分析(VG-SSA)。该算法比传统反编译中采用的def-use分析方法更好地解决了二进制代码中的别名分析和变量重用等重要问题,并能更好地支持反混淆(de-obfuscating)和切片(slicing)等后续分析需求。
(7)提出了面向二进制代码安全分析的中间语言——PANDA语言,该语言兼顾低级语言和高级语言特性,在保持安全相关敏感信息不丢失的前提下,支持B.S.Baker的SL语言结构,将数百种不同的机器指令归结成不到二十种规范化指令,可以有效的为各种计算机辅助安全分析做支撑。在这些关键技术研究基础上,实现了BESTAR(Binary Executable S’rrucmrizerand AnalyzeR)反编译系统,并针对Windows XP平台和LJnux平台的典型应用程序做了大量实验,验证了这些技术的有效性和正确性,并已成功应用在二进制漏洞挖掘和恶意代码分析等研究课题中。
研究工作得到国家高技术研究发展计划专项(项目编号:2006AA012402)项目资助。