• 休闲生活
  • 教育教学
  • 经济贸易
  • 政法军事
  • 人文社科
  • 农林牧渔
  • 信息科技
  • 建筑房产
  • 环境安全
  • 当前位置: 达达文档网 > 达达文库 > 建筑房产 > 正文

    Android重包装应用程序静态分析系统的设计

    时间:2020-09-18 07:52:30 来源:达达文档网 本文已影响 达达文档网手机站

    摘 要:本文以Android重包装应用程序的检测为研究内容,通过对当前主流的静态分析技术进行对比与总结,提出了一种基于众包的Android重包装应用程序静态分析方法。该方法选取能表征Android应用程序唯一性的信息作为特征字符串,利用众包构建Android应用程序注冊与数据库服务平台,对比签名鉴别重包装应用程序。最后为验证所提出方法的有效性,构建原型系统进行实验测试。实验结果表明,本方法能够有效进行Android重包装应用程序的静态分析。

    关键词:Android应用程序 重包装 静态分析 众包

    中图分类号:TP399 文献标识码:A 文章编号:1672-3791(2017)10(b)-0119-03

    1 相关技术研究

    现在的Android恶意应用程序分析方法主要是利用动态分析技术或静态分析技术进行恶意应用的检测。Android恶意程序的各种攻击方式中,应用程序重新打包是极为常见的手段。文献[1]研究发现,当攻击者通过反编译手段获得一个良性Android应用程序的源码后,可以实施的恶意操作通常有三类。

    (1)注入广告SDK。向原程序中加入广告SDK,实现广告收入。

    (2)替换应用内广告。替换掉原程序作者在其应用中设置的广告SDK的发布者ID,实现窃取程序开发者的广告收入。

    (3)添加恶意代码。在大体了解代码流程的基础上,加入恶意代码片段,使得用户执行过程中触发恶意操作。

    前两种恶意操作方式主要是对知识产权的侵害,后一种的危害则是十分巨大的。攻击者在实施恶意操作后只需要重新打包签名形成新的安装包APK文件就可以上传至应用商城。用户看到的貌似是正常的一款应用程序安装包,安装后也能使用程序功能,但Android终端实际上已经遭到了恶意程序的入侵。文献[1]研究显示许多流行的Android应用程序包括QQ、AngryBirds等都已经出现了被重包装的情况。

    由于静态分析不需要运行程序,可以实现代码的全覆盖以及没有运行时开销等优势,特别适合进行Android重包装应用程序的分析。文献[2]就设计了一种DroidMOSS检测系统,对官方来源的应用实现反编译获得源码,然后采用模糊哈希技术对程序切片提取Android应用行为模式作为特征形成指纹,构建应用数据库进行分析。该研究发现第三方应用商城中至少有5%至13%的Android应用存在重新包装的情况,多数植入了恶意代码和添加了广告SDK,情况不容乐观。但是该方法对于恶意攻击者可以在代码中加入无效冗余代码以降低形成指纹的相似性来逃避分析和可以进行高度的混淆加密进而导致无法生成指纹的情况没有考虑到。

    文献[3]则综合选取了Android应用程序的签名、权限和可执行文件作为对比的依据,指标具有综合性。但是该方案仍然存在文献[2]中需要在源代码中嵌入代码的缺点,适用性比较受限。

    综上,如何快速、有效地分析Android平台中重包装应用程序仍是亟待解决的问题。主要难点就是如何快速判断两个安装包APK文件是属于同一个程序。事实上,只要能够知道两款软件其实是一个程序,那么比较一下程序的开发者签名,就能够立即得知其中是否存在重包装的情况。

    2 基于众包的Android重包装应用程序静态分析方法

    2.1 众包机制

    众包(crowdsourcing)指的是一个公司或机构把过去由员工执行的工作任务,以自由自愿的形式外包给非特定的大众网络的做法。它本身描述了一种新的商业模式,现在也指从广泛群体,特别是在线社区,获取所需想法、服务或内容贡献的实践。在软件安全性分析领域,众包多用来收集数据,需要社会成员广泛的参与,可以取得很好的效果[4]。但与此同时,众包也会带来很大的隐私争议[5]。

    近年来,文献[5]都提出使用众包(crowdsourcing)机制来参与Android应用程序的分析,希望通过监测大量真实的用户使用程序的数据,来获取充足特征值判断程序的性质。本文即是基于此提出了一种基于众包的Android重包装应用程序静态分析方法,使用众包机制搜集信息来判断程序的一致性,以此来快速分析程序重新打包问题,并设计了一种高效的重包装分析原型系统。

    2.2 特征获取

    分析Android重包装应用程序首要解决的问题就是如何判断两个安装包APK文件是属于同一个程序。判断安装包APK文件是否属于同一个程序,Android本身是提供现有机制的。Android应用程序发布时会生成一个APK文件,即应用程序的安装文件,其本质上是一个zip格式的压缩包。除了源代码及资源文件,它还包含名为AndroidManifest.xml的清单文件,以向Android系统声明必要的信息,见图1。

    Android系统使用包名(Package Name)来唯一标识一个应用程序,包名在开发时由开发者指定,位于清单文件AndroidManifest.xml的“package”属性。包名相同的程序可以升级覆盖原先版本的程序。除了包名,AndroidManifest.xml清单文件Int类型的android:versionCode主要用于版本标识,确定升级信息。String类型的android:versionName用于显示给用户版本号信息。

    另外,Android系统使用签名在用户、程序和进程之间建立信任关系,对应用程序的完整性和发布机构的唯一性进行校验。一般使用JDK自带的Keytool和Jarsigner给程序签名。Keytool是个密钥和证书管理工具。Jarsigner利用密钥仓库中的信息来对APK文件进行签名。如果不同开发者使用了相同的包名,签名不同的程序不会被升级替换,这样可防止已安装的应用被相似的恶意软件通过升级替换掉。开发者持有签名的私钥,APK文件内META-INF\CERT.RSA存放公钥,通过比较公钥可以判断私钥是否一致。因此可以提取以上信息,组拼成字符串来唯一标识一个Android应用程序。

    基于以上信息,可以利用众包机制,构建出一个数据库服务作为Android应用程序的注册平台,要求开发者向平台提供程序唯一性标识信息。平台采用先到先注册的机制,并检查保持包名的唯一性。当用户需要安装一款应用程序时,只要查寻一下Android应用程序的注册平台就可以知道Android应用程序是否存在重新包装情况。

    2.3 分析流程

    从APK类型文件中提取唯一性信息需要以下工具:

    (1)keytool.exe:JDK(Java Development Kit)自带的密钥和证书管理工具,主要用于密钥和证书的创建、修改、删除等。keytool工具利用以下命令查询APK文件中的签名信息:

    keytool.exe -printcert -file apk\CERT.RSA

    (2)aapt.exe:Android Asset Packaging Tool是Android SDK(Software Development Kit)自带的资源打包工具,具备查看APK文件内资源的功能。aapt工具利用以下命令查询APK文件中的唯一标识信息:

    aapt.exe dump badging [.apk文件路径]

    使用脚本程序调用keytool和aapt工具,并对结果字符串信息提取,获得所需的查询信息(Package Name,versionCode,versionName,Application signing),生成字符串,进行数据库查询。

    具体重包装分析流程如下。

    Step1:输入APK文件OR应用程序安装文件URL地址。

    Step2:预处理。

    If(输入为URL地址)启动网络爬虫工具下载APK类型文件。

    Step3:信息提取。

    提取APK文件信息构造成字符串信息。

    (Package Name,versionCode,versionName,Application signing)

    Step4:查询。

    提交查询信息至Android应用程序注册平台;

    利用Package Name、versionCode、versionName查询唯一相同的应用;

    比较Application signing字段。

    Step5:输出结果。

    If(两相同应用的Application signing相同)输出非重包装程序;

    If(两相同应用的Application signing不同)输出重包装程序;

    If(未查询到相同应用)输出应用未曾注册,不能判别。

    Android应用程序的注册平台利用众包机制要求非特定群体提供出Android应用程序的唯一性标识信息。Android应用程序的注册平台不提供应用程序下载推广工作,仅为维护Android平台安全,不会对其他应用商城构成竞争,还会有促进与规范作用。因此,利用众包机制构建一个应用程序的注册平台并实施重包装分析具备可行性。

    3 Android重包装应用程序静态分析原型系统设计

    3.1 系統流程框架设计

    Android重包装应用程序静态分析原型系统需要对进行过重包装的Android恶意软件进行快速分析识别,同时功能模块也要考虑到服务器运算能力、网络等资源紧张的现实,主要分析步骤如下。

    (1)用户通过手机客户端提交需要检测的APK文件,或者选择提交APK文件下载路径的URL地址到服务器端。

    (2)服务器对接收到的信息进行校验。如果接收到的是URL地址,启动网络爬虫工具下载地址对应的APK文件,对获得的APK文件进行解压等预处理。

    (3)服务器对被预处理的APK文件进行信息提取,组拼成特征字符串。

    (4)服务器将提取的特征字符串通过网络通信模块,送至注册平台查询数据库记录,对比签名信息,生成报告返回到客户端展示。

    3.2 系统功能模块

    根据图2可以看出该系统设计为客户端和服务器两部分,五大功能模块。其中客户端含有“文件提交模块”,负责用来提交需要分析的APK文件。繁重的分析工作由服务器端进行,主要有“提交接收模块”“网页抓取模块”“信息提取处理模块”和“网络通信模块”4个部分。“提交接收模块”首先需要接收用户提交的应用安装包信息,校验提交的文件格式是否正确。若用户上传的是应用程序安装文件URL地址,则启动“网页抓取模块”,利用网络爬虫工具下载APK类型文件。服务器顺利获取APK文件后,“信息提取处理模块”开始解析APK类型文件,获取应用独特的包名、签名和版本号等信息,生成特征字符串唯一标识该程序。然后通过“网络通信模块”与Android应用程序注册平台的数据库记录对比,查看同样包名的应用程序是否存在一致的签名信息,如果发现同样的程序出现不同签名,则判定为重新打包生成的恶意程序,直接反馈结果给客户端。无论出于什么目的,重新打包原作者的应用程序后再发布,就判断为恶意软件。若签名一致,则排除为重新打包的情况。

    3.3 推荐系统的实现

    该系统采用Client/Server架构进行开发,客户端运行环境是Android 6.0系统,服务器运行环境是Ubuntu 14.10系统。在“重包装分析工具”中点击输入框,选取需要分析的APK文件,使用“应用上传”按钮,启动文件提交模块向服务器提交数据。待上传成功后,启动“开启分析”按钮,通知服务器端开启分析过程,依次启动提交接收模块、信息提取处理模块和网络通信模块。分析结束后,服务器端将分析结果反馈给客户端进行展示。

    4 结语

    准确、高效地分析和鉴别Android重包装应用程序,对于只能访问第三方应用商店的中国Android系统用户具有重要意义。本文提出的基于众包的Android重包装应用程序静态分析方法,利用现有的Android安全机制,提出构建Android应用程序注册平台,实现对Android恶意程序的综合、高效分析,可以大大加快Android重包装应用程序静态分析的速度和提高准确性。

    参考文献

    [1]Zhou W,Zhou Y,Jiang X,et al.Detecting repackaged smartphone applications in third-party android marketplaces[A].Proceedings of the second ACM conference on Data and Application Security and Privacy[C].ACM,2012:317-326.

    [2]余小秋.基于行为分析的Android应用程序安全评估技术研究与系统设计[D].北京邮电大学,2015.

    [3]李少辉.基于静态分析的安卓重新打包程序检测方法研究[D].北京交通大学,2014.

    [4]Brabham D C.Crowdsourcing as a model for problem solving:An introduction and cases[J]. Convergence,2008,14(1):75-90.

    [5]Amos B,Turner H,White J.Applying machine learning classifiers to dynamic android malware detection at scale[A].2013 9th international wireless communications and mobile computing conference(IWCMC)[C].IEEE,2013:1666-1671.

    相关热词搜索: 静态 应用程序 分析 设计 系统

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网