安卓设备的不断增加促进了移动应用市场的繁荣,安卓用户从世界各地的应用市场下载应用并安装(如典型的应用市场Google Play、Amazon Appstore等)。随着这些第三方应用市场的不断发展,整个安卓生态系统正在不断地被恶意软件所影响。这些恶意软件通过对合法的应用进行重打包,伪装成正常的应用出现在第三方市场上,其恶意行为包括窃取短信与个人信息、发送付费短信等。然而,阻止这些恶意软件并不容易,尤其对于Android软件:最近的一份报告指出99%的恶意软件应用运行在安卓设备上。
应用审查面临的挑战 当前的应用市场都会采取必要的审查手段对上传的应用进行分析,鉴定其行为是否可疑。例如,Google Play的审查引擎Bouncer通过静态扫描匹配已知的恶意代码,并在谷歌云提供的一个虚拟环境中执行应用以判断是否存在潜在的恶意行为。但其问题在于静态扫描不能检测未知的恶意行为。另外,应用可以通过识别虚拟环境的特征,从而在动态执行的时候隐藏恶意行为。此外,动态分析通常很难覆盖到应用所有的执行路径。
近期相关研究团队提出的审查方法多针对已知的可疑行为进行检测,例如从不可信的网站动态加载二进制代码、组件挟持相关的操作、Intent挟持等行为。这些方法都需要复杂的信息流分析以及一系列启发式方法对恶意行为进行分类。此外还可能需要进行动态分析甚至是人工参与分析;且多数动态检测是在模拟器上进行的,可被恶意软件检测到并绕过。另外,这些方法都没有使用市场规模的海量应用去作性能评估。
捕获未知恶意代码片段 事实上,大多数安卓恶意应用都经过重打包,即恶意作者把一些攻击代码附在几个不同的合法应用中。通过这种方式不仅可以把恶意代码隐藏在看似正常的应用中,还可以自动化地制作和发布大量的恶意程序。另一方面,一般的重打包应用只是包含几个广告库,但重打包的恶意应用与之不同,恶意代码片段会出现在几个毫不相关的应用中,而这些应用除了一些库外没有其他公共部分。
上述发现引出了一个新的方法去检测重打包类型的恶意软件,它主要是针对安卓恶意应用,且不需要建立恶意行为模型。我们仅需比较同源应用(一个应用和它的重打包版本或者由同一个应用重打包后的几个应用)中的不同部分,以及非同源应用中的相同部分来检查可疑的代码片段(函数级别)。一旦发现这些代码片段中有难以解释的代码(如非公用库中的敏感操作),那么它们就很有可能是恶意代码。我们称这种方法为DiffCom分析,它可以用来检查未知的恶意行为,并且不需要重量级的信息流分析。
大规模的检测 基于该基本思想,我们开发了一个跨市场的安卓重打包恶意软件检测工具 —— MassVet。MassVet不用匹配恶意代码特征或已知的恶意行为模型,它仅仅依赖市场上已存在的应用去检测一个新上传的应用,具体来说,它通过在整个应用市场进行一个高效的DiffCom分析来检测一个应用。市场中任何与新上传应用相关的应用(如同源应用)都会被很快的定位到,之后对于不同签名的应用做如下处理:有相同视图结构的应用分析它们的不同代码部分,对不同视图结构的应用分析其公共代码部分。通过这种方法得到的代码片段,在去掉那些重用的代码(如公共库等)后进行进一步分析,依据一些特征(如敏感API调用等)来判断其是否存在恶意行为。
这些大规模的检测背后是一系列高效的视图级别和函数级别的比较过程。为实现对视图的高效可扩展分析,我们把应用的视图结构(用户界面之间的联系)抽象成一个向量来表示,把这个向量作为视图的几何中心,称为v-core。为方便进行二分查找,所有应用的v-core都按序保存,这使得整个方法具有可扩展性。
我们的发现 我们收集了来自33个安卓市场,约120万个应用,在云平台实现了MassVet。实验证明了MassVet可以在10秒内对一个应用进行检测,并且误报率很低。更重要的是,我们从120万个应用中发现了127,429个恶意应用(其中有20个是未知恶意行为的应用,另外还有34,026个恶意应用没有被VirusTotal检测出)。进一步证明了MassVet的检测覆盖率比VirusTotal集成的所有扫描器(如Kaspersky、Symantec、McAfee等)都要高。除此之外,我们还发现有30,552个恶意应用来自Google Play,恶意软件作者不断地同谷歌的应用审查策略对抗,使得Google Play上的部分应用在被移除后,又不断地重新出现。
本文的贡献总结如下:
(1) 我们开发了MassVet,对安卓应用进行大规模的恶意代码检测。上传到MassVet的应用仅需要和市场上存在的应用进行对比。MassVet利用恶意代码重打包的特点,检测出恶意应用,甚至未知恶意行为的应用。MassVet基于云平台且可以快速地进行视图级别和函数级别的比较,从而具有很好的可扩展性。由于v-core和m-core数据集(120万个应用仅占100G的空间)是从多个应用市场得到的,所以MassVet还可以利用来自其他市场的应用来检测来自另一个市场的应用。
(2) 我们实现了MassVet并基于120万个应用对其进行评估,据我们所知,这在安卓恶意代码检测领域的数据样本中具有最大的规模。Google Play作为世界上最大的安卓市场,其规模有130万个应用。我们的系统发现了十万恶意应用,其中部分恶意应用能够躲避当前已有的恶意程序扫描器。MassVet的检测覆盖率超过了VirusTotal中所有主流的扫描器,并且可以在10秒内完成对一个应用的扫描。部分恶意软件有上百万的安装量,其中5000个软件被安装超过10000次。实验部分也分析了Google Play如何审查上传的应用,以及恶意软件作者是怎样隐藏和传播恶意代码。
演讲Slides 下载:面向海量软件的未知恶意代码检测方法