论文部分内容阅读
Java语言已经成为了近几年最为重要的编程语言之一,根据权威开发语言排行榜TIOBE的统计,从2002年至今的10年内,Java语言市场占有率始终处于所有开发语言的前两位。近年来,随着安卓系统的普及以及安卓平台将Java作为其程序设计语言,Java语言不论在移动终端还是在个人电脑、服务器平台上都已经占据了不小的份额。如今,毫无疑问Java语言影响着信息产业的方方面面。与此同时,随着Java语言及其支撑平台的飞速发展,Java程序员和Java应用的数目也在飞速增长之中。以安卓平台为例,目前安卓官方市场上的应用数目已经超过了50万个,并且.这个数量仍然在以平均每个月2万个的速度飞速膨胀。迅速增长的Java应用数量给Java程序的管理和维护带来了挑战。Java代码中的程序漏洞(包括程序功能性漏洞,或称程序错误,以及程序安全性漏洞)每年都会给应用的使用者造成巨大损失,因此检测、诊断与排除Java代码中潜在的程序漏洞是Java应用的一个主要需求。程序漏洞检测和诊断几十年来一直是软件研究领域的关键问题。近年来随着多核架构和智能移动终端的普及,程序漏洞检测和诊断的研究逐渐集中在以下两个方面:(1)多核架构下的并发错误研究,致力于检测、诊断和排除由于程序并行化带来的并发错误。例如,通过记录并发程序运行时的不确定,并促使该程序在随后的运行过程中确定的重现某一并发错误,进而减少定位对应程序漏洞的难度。(2)智能终端上的漏洞检测和诊断研究,力图对智能终端应用中的各种程序漏洞进行检测和诊断。包括检测并诊断应用中可能发生的功能性及安全性漏洞。例如,采用符号化执行方式遍历应用程序执行路径,通过分析程序行为检测程序漏洞,并生成对应程序输入以简化诊断过程;通过对程序进行污染分析,可以检测其中可能存在的信息泄露等安全漏洞。由于智能终端上的应用通常采用应用市场集中发布的模式,同时每个应用市场每月都有数以万计的应用进入,因此对此类应用进行审核不仅对程序分析速度要求较高,而且还需要提供完备的验证机制,为高效地去除可能具有安全漏洞的应用提供佐证。这两个方面研究的对象恰好也是Java程序目前所面临的主要问题。然而,当相关研究成果被应用到Java语言上时,现有研究多从程序漏洞本身模式出发,通过借用适用i其他语言的类似漏调整检测与诊断方法,进行对Java程序漏洞的检测。但是,Java语言的许多特性,如面向对象、托管执行和运行时事件,使得其不同于以往的过程式语言和本地语言运行模式。简单的将其他语言的已有经验应用于对Java程序的漏洞检测与诊断效果并不理想。比如,由于Java托管运行时通过垃圾回收机制管理程序内存使用,在Java程序运行时,其数据移动较C/C++等本地语言程序多,因此当确定性重现系统被应用到Java程序时,受大量的数据移动影响,重现系统的记录和重现开销巨大,从而极大地限制了重现系统的性能。另外,移动终端中Java应用通常采用事件驱动的运行模型,该模型下的程序运行具有较大的随机性和不确定性。一些继承自传统漏洞检测与诊断手段的研究,例如针对Java应用的符号化执行,往往需要牺牲其检测与诊断精度才能确保该过程的顺利完成。本文在充分分析现有程序漏洞检测和诊断方法作用于Java应用时的性能和效率等问题的基础上,提出了一个系统的解决方案。从移动终端、桌面应用和服务器等角度,着力于提高程序设计者以及应用程序市场对Java应用的漏洞检测与诊断能力。本文提出的三个新技术,即基于对象的确定性重现,导向性符号化执行,与采用符号化执行的信息泄露漏洞检测与诊断技术,充分弥补了程序漏洞检测与诊断技术在Java语言等动态语言上的不足。相对于之前的研究,本研究借助于对Java语言本身语言模型与运行模型的深入了解,从Java语言模型本身出发设计适合该语言的漏洞检测与诊断技术,测试表明使该技术在作用于Java应用时达到远优于已有技术的性能和效果。具体而言,本文的主要贡献如下:1.首次提出了基于对象的确定性重现技术,设计并实现了ORDER系统以完成对多线程Java应用的确定性重现。ORDER系统利用Java程序多以对象作为基本逻辑单元的特性,结合Java虚拟机对内存中对象的管理机制,提出以对象为粒度的确定性重现技术。该系统的性能是所有已知同类系统中最好的,在保证重现系统确定性的前提下,该系统记录阶段的开销仅为114%。此外,通过将重现系统的记录和重现实现于Java虚拟机中,ORDER系统不仅能重现现有系统可以重现的程序错误,还能够重现已有系统不能重现的错误,如由外部代码中的程序漏洞造成的错误。这也就意味着ORDER能够被用于诊断更多的程序漏洞。2.首次提出导向性符号化执行方法,致力于提高符号化执行技术在应用于安卓应用时的运行效率,为利用符号化执行检测与诊断安卓Java程序漏洞提供基础。本文设计并实现了SymDroid系统以提供高效率的符号化执行。本文通过对安卓编程与运行模型的分析,揭露符号化执行在应用于安卓程序时的路径爆炸问题,并提出导向性符号化执行技术解决该问题。SymDroid系统利用静态程序分析的结果,在不影响搜索精度的前提下对符号化执行的搜索空间进行限定,导引符号化执行过程的进行。该系统有效地提升了符号化执行的效率,在少于几个小时的时间内,就可以完成对特定应用的某一行为进行的检测和诊断。而现有的其他符号化执行工具或者不支持安卓应用等事件驱动程序,或者需要牺牲代码覆盖率以保证分析的顺利完成。3.首次提出结合符号化执行和静态分析技术的安卓应用信息泄露检测与诊断技术,以弥补相关工具在辅助诊断信息泄露触发条件时的不足,并同时增强信息泄露检测技术在安卓平台上的漏洞检测能力。本文设计并实现LeakMiner系统,通过静态污染分析技术和导向性符号化执行技术检测并诊断安卓系统中的信息泄露漏洞。该系统可以在几乎没有误报的前提下检测出大部分存在信息泄露漏洞的安卓应用,并提供与该漏洞相关的程序输入。通过该系统提供的程序输入信息,程序员可以快速了解造成程序漏洞的代码,并对该漏洞进行修复。应用市场也可以利用这一信息快速确认信息泄露的存在,并隔离该应用。同时,由于采用了本文提出的导向性符号化执行方法,LeakMiner系统的分析时间短,它能够在一小时内完成对单一程序的漏洞检测和相关程序输入生成的所有工作。