论文部分内容阅读
计算机与互联网技术的快速发展,带来了一场计算机软件领域的技术革命。从PC时代的单机软件,到互联网时代的分布式软件,再到如今云计算时代倡导的软件服务,计算机软件的应用得到了前所未有的普及,软件已成为当代社会基础设施的重要组成部分,深刻影响着社会生活的方方面面。然而,随着功能特性的不断增强,软件的规模和复杂性也呈现快速增加的趋势,使得传统程序分析手段在软件可靠性和安全性分析领域的应用受到了前所未有的挑战。程序分析(Program Analysis),是指对计算机程序行为的正确性、健壮性、安全性等属性进行自动化分析的过程。目前,程序分析技术被广泛应用于软件的开发与测试过程中,对提升软件质量具有关键意义。从总体上看,当前程序分析技术在软件可靠性与安全性分析方面的应用主要存在以下三大关键问题: 1.超大规模程序中的复杂漏洞检测问题。软件漏洞的本质是代码缺陷,可能受软件设计与实现、硬件架构与执行环境等诸多因素的影响。因此,针对软件漏洞,尤其是以逻辑漏洞为代表的复杂软件漏洞的自动化大规模检测技术依然存在很多问题。由于逻辑漏洞一般与软件的特定功能相关,其隐蔽性往往更强,特征通常也更为复杂,因而缺乏有效的检测手段。正是在这样的背景下,如何设计一种针对逻辑漏洞的准确、高效的检测方法,使其能够适用于超大规模软件,就成为了一个亟待解决的问题。 2.针对软件中第三方异构插件的大规模行为分析问题。近年来,随着移动互联网的兴起,受软件即服务理念的影响,软件的插件化成为了新的趋势。越来越多的软件厂商开始以第三方插件的方式将自己的产品提供给移动开发者。考虑到第三方插件与软件本身在结构和功能上存在的差异性,已有的研究方法尚不能对这类异构插件的软件行为进行有效分析,因此如何为异构的第三方软件插件提供细粒度与大规模的行为分析就成为了一个需要解决的问题。 3.复杂软件行为分析方法的准确性与完整性问题。近年来,随着移动应用程序的快速发展,一方面,代码混淆、动态代码加载技术的广泛应用使得传统的静态分析方法受到了很大限制。另一方面,日趋复杂的用户界面交互逻辑也使得传统动态分析方法的有效性大大降低。考虑到已有的软件分析方法在面对复杂软件时,一般难以做到既兼顾静态分析与动态分析的优点,又避免它们的缺点。因此,需要设计一种针对复杂软件的分析方法,能够在保证高效准确的同时,也具备较高的代码覆盖率与良好的可扩展性。 针对上述三大关键问题,本文做了如下工作: 1.针对现有程序分析方法在超大规模程序中的复杂漏洞检测方面存在的不足,本文基于程序依赖图对复杂逻辑漏洞的模式特征进行抽象,并利用图挖掘的技术原理,提出了一种适用于超大规模软件的逻辑漏洞检测方法,实现了复杂逻辑漏洞模式特征的自动化精确建模与匹配。根据上述方法,本文实现了一个基于API模式特征的自动化逻辑漏洞检测系统,实现了超大规模软件中复杂逻辑漏洞的准确高效检测。实验表明,本文提出的逻辑漏洞检测方法适用于多种平台或架构的软件系统,具备良好的通用性。另外,实验过程中发现的38个0-day逻辑漏洞,也从另一方面说明了该方法的有效性。 2.针对现有研究方法对软件的第三方异构插件进行大规模分析中的不足,本文从移动广告网络这一典型的软件第三方异构插件入手,利用静态分析技术实现了基于广告API的软件行为分析,并总结出了开发者对于不同第三方广告插件的使用偏好,以及用户对不同广告软件行为的喜好。实验结果表明,大部分移动开发者对第三方广告插件的使用持谨慎态度,过多或不恰当的广告行为会引起用户的反感,从而导致开发者广告收益的下降。 3.针对现有程序分析方法在应对复杂软件分析时表现出的效率、准确性和可扩展性等方面的不足,本文结合静态分析与动态分析的优势,设计并实现了一种基于函数调用图的Android应用程序行为混合分析方法。该方法能够对混淆代码和隐藏软件真实行为的应用程序进行准确高效的行为分析,从而提高软件的可靠性与安全性。根据上述方法,本文实现了一个针对Android应用程序的混合分析框架。实验表明,基于函数调用图的混合分析技术能够完整、高效、准确地分析Android应用程序的各种软件行为。相比于单纯使用静态或动态分析方法,其代码覆盖率有显著提高。