论文部分内容阅读
随着当今手机、平板等移动设备的普及,各类相关的移动软件也随之迅猛发展。其中,安卓(Android)系统作为现如今全球使用量最多的智能移动操作系统,带给了人们巨大的便利,改变了人们的生活方式。而专门运行在安卓系统上的安卓应用,数量繁多,类型丰富,成为了安卓生态的一个重要的组成部分。但是,由于安卓应用的普遍性,许多攻击者将攻击的目标转向它们,期望利用安卓应用来达到他们的不法目的。在这其中,安卓应用重打包(Repackaging)就是这些攻击的最主要的途径之一。所谓应用重打包,就是将应用从市场上下载(或通过其他方式)获取后,重新打包成新的应用发布到应用市场。攻击者可以在重打包过程中,向其中添加恶意的代码或者修改部分功能。攻击者们为了能够利用到原应用的流行性,他们会尽可能的保证重打包后的应用和原应用在软件行为上表现一致,从而使应用使用者们无法区分出来。这类安卓重打包现象将会给用户、安卓市场乃至整个安卓生态带来巨大威胁。因此,对应用重打包的检测有着非常重要的意义。为了检测出安卓应用重打包,已经有许多工作被提出来并取得了一定的效果。其中较为普遍的方法就是先从应用中提取软件胎记(Birthmark)[1],通过对比应用的胎记来判断应用之间是否存在重打包现象。软件胎记是指从应用中抽象提取得到的模型,该模型包含了该应用的特有的、稳定的软件特征,能够唯一的标识出该应用。但是,随着安卓应用开发技术的不断发展,越来越多的应用在开发完成后被工具混淆或者加密——这类技术也同样可以作用在重打包后的应用之上。初期的工作大都沿用传统静态软件胎记技术,依据静态分析获取的信息来抽取应用的软件胎记。但是这些信息易被代码混淆干扰,例如插入—些永真永假的分支、添加中间调用等混淆都会对现有工作产生影响。ViewDroid[2]与ResDroid[3]等方法考虑到移动应用图形化用户界面很大程度体现了应用的行为特征,通过静态分析应用界面来抽取软件胎记。这些方法提高了对混淆应用的抗干扰能力,但是仍存在不足之处。例如利用反射替换、插入不可见元素(如Activity)等方式都可以逃避这类方法的检测。不仅如此,所有上述静态工作均无法应对应用加密的情况,而面向移动软件的动态软件胎记技术研究也才刚刚起步——工作[4]利用压力测试工具Monkey驱动应用执行,记录系统的应用程序编成接口(Application Programming Interface,API)的调用情况,并以此为依据抽取应用的软件胎记。工作[5]利用用户界面中的控件属性作为软件胎记,但是依然依赖部分静态信息,导致软件胎记易受到干扰。同时,更值得注意的是,结构混成化已成为移动应用发展的趋势。利用原生技术与网络(Web)技术结合开发的混合应用因其独特的软件结构、JavaScript语言的动态无类型的特性,进一步增加了重打包检测的难度。考虑到重打包的应用为了利用原应用的流行性,通常会保持和原应用相似的观感,使得在应用界面布局、交互方式上,重打包应用和原应用有着较高的相似性。因此,本文认为从动态界面信息中提取软件胎记是一个可行的技术方案,提出了一个面向运行时用户图形界面特征的安卓应用软件胎记模型:抽象组转移图(AGTG),以及基于该胎记模型的重打包检测框架。基于该模型,我们分别实例化了两个软件胎记:布局组图(LGG)和区域组图(RGG)。布局组图可以有效的抵抗应用混淆和加密这两类情况,显著提高了安卓应用重打包检测的抵抗性和可信性。而区域组图的提出,改进了布局组图方法中的不足,同时还能够处理现如今逐渐流行的混合安卓应用的重打包检测问题,提高了检测该类应用的准确性以及检测效率。总结而言,本文的主要贡献是:1.提出了一个面向运行时安卓应用图形界面特征的软件胎记:抽象组转移图(AGTG)。AGTG模型化了应用在运行过程中的界面以及界面转移,将相似的界面特征划分为同一组作为图的节点,将界面转移作为图的边。同时,也提出了 AGTG生成算法以及其相似度比较算法,在应用动态运行过程中生成软件胎记,并比较对应胎记之间的相似度,从而进行进行重打包检测。2.为了使得胎记能够对混淆和加密有着较好的抵抗性,我们提出了一个AGTG的实例化胎记:布局组图(LGG)。我们还实现了生成和对比LGG的的原型工具Repdroid,并使用了两组数据集检测方法的有效性。根据实验结果,第一组中全部的98对混淆或者加密的重打包应用被全部检测出来;第二组的125个商业应用中,误报率为0.08%。3.为了能够改进基于布局组图方法中的不足,我们提出了另一个基于AGTG的软件胎记:区域组图(RGG)。基于区域组图的重打包检测不仅可以处理混淆和加密应用,还可以检测混合应用中的重打包情况。我们也为该方法实现了原型工具RegionDroid,对该方法在混淆加密效果进行评估。同时我们还下载了另外157个混合应用,实验结果显示其误报率为0.016%。