论文部分内容阅读
随着计算机在国民经济和国防建设各个领域的广泛应用,作为信息系统智能载体的计算机软件的安全性变得尤为重要,软件安全漏洞已经成为信息安全风险的主要根源之一。由于软件安全漏洞的危害性、多样性和广泛性,在当前网络空间(Cyber Space)的各种博弈行为中,漏洞作为一种战略资源而被各方所积极关注。如何有效的发现漏洞、消除或减少漏洞对社会生活、国家信息安全的负面影响,即漏洞挖掘和防护工作已经成为世界各国在信息安全领域的研究重点。
面向源程序(Source Code)漏洞挖掘的研究历史已经相当悠久并取得显著进展。然而,出于商业利益、知识产权保护等原因,大部分软件厂商不对外提供源程序;有些厂商虽然提供了源程序,但源程序和实际系统之间的对应关系无从验证。另外,源程序级的漏洞分析也无法发现编译、链接过程引入的漏洞。因此直接面向二进制程序的安全漏洞挖掘研究具有重要的意义。
然而,面向二进制程序的安全漏洞挖掘面临更多的挑战。一方面,对于复杂机理的安全漏洞,基于静态程序分析的漏洞挖掘误报率高,往往需要大量人工分析来验证挖掘结果的正确性,严重制约了静态挖掘技术的应用范围。虽然以符号执行(Symbolic Execution)为代表的路径敏感分析方法可以缓解高误报率问题,但是又面临执行路径组合爆炸这一公认难题。
另一方面,基于模糊测试(Fuzz Testing)的动态漏洞挖掘技术虽然误报率低,但是其有效性完全依赖于测试数据的生成。尽管研究人员相继提出各种测试数据生成方法,对于复杂的未公开数据格式,特别是含有完整性校验信息的数据格式,现有测试数据生成方法存在严重不足,无法对目标程序有效测试。
本文围绕二进制程序漏洞挖掘问题,深入分析了动静态漏洞挖掘技术的优劣及面临的主要挑战,重点研究了动态漏洞挖掘过程中如何加强畸形样本在程序执行中的纵深传递和静态漏洞挖掘过程中漏洞建模与空间遍历方法。本文主要贡献如下:
1.首次提出校验和(checksum)感知的模糊测试方法。模糊测试作为软件安全漏洞挖掘的重要方法,在遇到校验和检测机制时往往无能为力。本文综合运用细颗粒度污点分析、程序执行路径差异定位、离线符号执行等方法,首次提出一种绕过校验和检测机制的模糊测试方法。该方法不需要访问程序源代码,也不依赖于具体数据格式及校验和算法,为运用模糊测试发现深藏的软件漏洞扫除了障碍,拓宽了传统模糊测试的应用范围。
2.提出了一种基于roBDD的离线细颗粒度污点分析方法。过大的内存消耗和低下的分析效率制约了细颗粒动态污点分析的应用。本文分析了细颗粒动态污点分析的瓶颈所在,提出了一种基于roBDD(Reduced Ordered BinaryDecision Diagram)的离线细颗粒度离线污点分析方法,提高了细颗粒度污点分析的性能,降低了内存需求,为在畸形测试例生成和校验和检查穿透等方向应用细颗粒度污点分析奠定了基础。
3.为进一步提高模糊测试的挖掘效率,提出了一种基于细颗粒度污点分析(Fine-grained Taint Analysis)的导向性样本生成方法。该方法自动识别影响安全敏感操作的输入数据片段,进而对这些片段加以扰动生成畸形测试数据。与传统模糊测试技术相比,该方法避免了对目标程序整体输入空间的盲目枚举,生成的测试用例能够直接影响安全敏感操作,提高了动态漏洞挖掘的效率。
4.为进一步加强模糊测试的安全分析能力,提出了一种基于混合符号执行(Conclic Execution)的智能样本生成方法。基于混合符号执行和约束求解技术,该方法不仅能够判断执行轨迹上是否存在潜在的安全漏洞,提供了对执行路径深度分析的能力,同时也可以对轨迹上的约束条件逐一取反并求解生成遍历不同执行轨迹的新测试样本,为提高模糊测试的代码覆盖率提供了支撑。
5.提出了一种面向脆弱性包络(Vulnerable Component)的整数溢出漏洞静态挖掘方法。针对整数溢出漏洞的特点,提出了一种整数溢出漏洞模型,并以该模型为指导提出了二进制程序中脆弱性包络自动识别方法。与传统静态挖掘工具力求遍历所有执行路径不同,该方法重点分析脆弱性包络中的程序路径,显著降低了路径总数,有效缓解了路径爆炸问题。
6.设计实现了软件安全漏洞动态挖掘系统TaintScope和整数溢出漏洞静态挖掘系统IntScope,并应用这些系统在Microsoft、Adobe、Google等著名IT公司的产品中发现数十个零日漏洞,大部分漏洞已被中国国家信息安全漏洞库(China National Vulnerability Database of Information Security)、国际安全漏洞机构CVE(Common Vulnerabilities and Exposures)等权威漏洞管理组织收录。