Android应用差异性检测与分析
2016-03-16马德棚
马德棚
摘要:在中国,第三方Android应用商店众多。目前Android市场缺乏有效的监管以及Android应用开放的分发策略,引发了诸多安全问题。文章以Android系统数字签名机制为研究方向,基于静态分析的方法,以Android应用程序逆向工程为基础,以Android应用程序的数字签名、运行权限、Dalvik可执行文件作为静态分析对比检测的依据,设计检测方法,对第三方应用商店中的APK文件和对应的官方版本的APK文件进行差异性检测并对造成各种差异的原因进行了详细的分析。
关键词:Android;静态分析;差异性检测;差异性分析
Google允许开发者通过不同途径发布应用,开发者可以通过应用商店、个人网站、企业网站、邮件等发布自己开发的APK文件。这意味着Android开发者可以用任何方法自由地分发其开发的应用程序。
Android应用开发者可以通过几乎所有流行的应用商店来发布其的APK文件以拓展市场,从而带来更大的经济效益。然而,更新APK文件需要更多的相应投入,非常消耗精力和时间。即使APK文件有微小的变化,更新上传也要在一个在特定时间内上传到所有的应用商店,实际中将有一些应用商店没收到开发者更新的APK文件。即使所有第三方应用程序商店不被忽略,但是应用商店是否会偷偷修改上传的应用程序或者其他人是否会上传具有相同名称的应用程序,这仍然是值得质疑的。
文章在Yi Ying Ng等人的基础上提出了一种静态检测方法,优化了APK文件之间差异检测的流程,提高了检测效率,通过一次检测即可统计出各种差异的数目以及差异文件的详情,并分析了各种差异产生的原因。为了进行研究,文章使用JAVA语言开发了一个自动化分析工具,当应用商店中的一个APK文件下载完成后,使用工具将其和其对应的官方版本进行检测。最后对产生差异的原因进行了分析。
1 相关研究
恶意应用检测。Kirin提出了一个安全框架,在安装时检测潜在的不安全的应用程序并且对识别出的包含不安全策略配置的应用进行阻止。Virus Meter通过功耗的监控讨论了恶意软件的检测。Jiang等人实现了一个名为DroidRanger的系统来了解现有的Android市场的整体健康状况。为了检测官方和非官方市场的恶意软件,其提出了基于权限的含有丰富的语义信息的行为足迹。为了发现恶意应用,其依靠一些启发法来区分潜在的风险。 应用商店的可信性分析。Zhen Xie等人分析了苹果应用商店中的“共谋组”成员的特征,然后依此建立了“共谋组”成员之间的关系图,通过图聚类检测出“共谋组”,然后去除“共谋组”的不真实的评分和评论后估算应用商店的可信性。Hengshu 2hu等人开发了一个检测系统,通过检测苹果应用商店里应用的排名、评分和评论的异常,通过统计,假设进行了应用商店的可信性分析。
2 APK文件差异性检测方法设计与实现
静态分析(Static Analysis)是指在不运行代码的情况下,采用词法分析、语法分析等各种技术手段对程序文件进行扫描从而生成程序的反汇编代码,然后阅读反汇编代码来掌握程序功能。静态分析主要包括差异分析、特征匹配、权限检测、函数检测、类别检测等5项内容。
本文采取静态分析的第2种方法进行差异性检测。差异性检测从易到难有3个阶段:第I个是对APK文件的包名称、版本代码和SHA256校验值(SHA256是最强的哈希函数,可用于检查文件的一致性)的检测。第2个是对包含permission的Android Manifest.xml文件的检测。第3个是对存放数字签名的META-INF文件夹的检测。这几种方法与文献一致。在此基础上,采用代码静态分析的方法,对代码差异进行详细分析。
检测框架,如图1所示。
3 实验结果分析
3.1 数据收集
选取的15个市场是360手机助手、安智市场、百度手机助手、当乐网、机锋、安卓市场、应用宝、搜狗市场、移动应用商场、91应用市场、应用汇、乐商店、木蚂蚁、豌豆荚、小米应用商店。从15个市场中收集了717个APK文件,收集时间是2015年12月9日。收集的APK文件在15个商店里的分布如表1所示。从表1可以看出并不是所有的应用商店都能下载下来选定的50个热门应用。因此,可以得出结论,几乎没有应用商店拥有市场上的全套Android应用。开发人员可能并不想加入竞争对手的应用程序商店发布其应用程序。
3.2 APK文件差异性检测结果分析
检测结果分为九种,包括完全相同、SHA256校验值不匹配、更低版本、更高版本、由于是错误的返回导致包名称不匹配、SHA256校验值不匹配但是却没有修改、权限文件差异、源码差异、资源相关文件差异。非资源相关内容的修改包括Android Manifest.xml,classes.dex和lib/文件夹下的内容的修改,相比于其他的差异这是属于比较严重的,因为它可能会影响应用程序的正常功能。资源相关内容的修改包括存储在res/.assets/文件夹下的文件以及resources.arsc文件内容的修改。11.58%的APK文件不是最新版本,用户可能并不知道APK文件的确切版本。事实上,下载一个过时的APK文件非常危险,因为其中可能有未被识别的漏洞,而这些漏洞在高版本中已经得到修复。应用商店中30.96%的APK文件的版本比它们对应的官方APK文件的版本高。这意味着应用的更新行为不太一致,并且不可靠,即所有类型的应用商店,包括官方网站的版本管理处于一个比较混乱的状态。通过分析差异性检测的结果,得到如下结论:
(l)包名称不匹配:包名称不匹配的平均百分比为0.28%。一种情况是因为网站标示的问题,当搜索一个应用时,可能会出现多个名字一样的应用。看似没什么差别,但如果选择了其中的一个,不一定是预期的那个。例如,搜索春雨医生时,官方包名为me.chunyu.ChunyuDoctor,安智市场应用的包名为me.chunyu.ChunyuDoctor HD,是PAD适用的版本,但网站却没有注明。另外一种是可能是因为,Android应用开发者喜欢在不同的商店对同一个APK文件创造不同的包名称。例如,UC浏览器官方包名称为com.UCMobile在91市场中包名称为com.UCMobile,ac。
(2) SHA256校验值不匹配:在这个评估标准下,大多数(55.09%)未能通过。这表明,这些APK文件虽然和官方版本拥有相同的包名称和版本代码,但其和官方APK文件是不一样的。为了找到这些APK文件和官方APK文件之间的差异,需要进行APK差异性检测。
(3)从APK差异性检测分析的结果来看,395个APK文件的SHA256校验值是不匹配的,其中只有325个APK文件在内容上有所不同。70个文件是零修改的,它们拥有的文件数量以及每个文件的SHA-I摘要值和官方版本是完全相同的。这证明,SHA256校验值不匹配并不一定能确定APK文件之间有差异。
(4)为了分析SHA256校验值不匹配却又是零修改的原因,查看APK文件解压后的所有目录,发现出现这种情况时META-INF文件夹下多了一个类似channel xxx或者vendor_xxx的空文件。原来每当发布新版本时,APK文件会被分发到各个应用市场。为了统计这些市场的效果(活跃数、下单数等),需要有一种方法来唯一标识它们。通过渠道号(channel)来区分不同的市场。比如,豌豆荚市场中美团应用的渠道号是wandoujia,360手机助手中美团应用的渠道号为qihu360。客户端访问API时会在请求参数中带上渠道号,以便后台接下来计算不同渠道的效果。在META-INF目录内添加空文件,可以不用重新签名应用。这样,每打开一个渠道包只需复制一个APK文件,在META-INF中添加一个使用渠道号命名的空文件即可。
4 结语
文章以15个时下流行的Android第三方应用商店中的50个具有较高下载率的应用为样本,通过常见的逆向工程手段,采用静态分析方法,采取多个特征值检测方法,综合几个特征值对比分析结果,检测了这些应用与其对应的官方版本之间的差异,提高了正确性,降低了误报率和错报率,并分析了这些差异产生的原因,为进一步研究打下了基础。