Android系统恶意程序检测技术在电子取证中的应用
2019-12-14杨龙,蔺杨
杨 龙,蔺 杨
(1.湖南省公安厅,湖南 长沙 410001;2.长沙市公安局,湖南 长沙 410005)
据北京奇虎科技有限公司互联网安全中心发布的《2014年中国手机安全状况报告》对当时市场较为流行的几种智能终端应用调查[1]表明:不论是Google公司的Android还是Apple公司的iOS都不同程度的存在被病毒程序攻击的问题。Android系统的恶意程序虽然出现的比较晚,但近年来Android系统恶意病毒应用呈井喷状态,伴随而来,针对Android开展电子取证的工作量也急剧增加,加强Android系统应用程序的管理也突显紧迫[2]。
1 Android系统恶意程序取证研究
研究恶意程序的电子物证技术,主要是通过逆向工程技术和动态监测完成对恶意应用的电子取证,为司法诉讼提供相关证据。
1.1 Android应用程序静态检测分析
根据目前Android安全数据分析,恶意程序的行为特征主要体现在恶意资源消耗、范围失控传播、隐私数据盗用、数据擦除等方面,其方式包括开机自启动、静默执行等。根据恶意程序各种行为特征,可以通过对其行为实现原理上进行分析,进而映射到代码层。
一个程序的恶意判断可以从多个方面来进行。在静态检测过程中,我们主要采用逆向工程技术,对程序反编译后,再从特征值匹配、权限检测、敏感API分析等多个角度进行综合分析,将多方面静态检测出来的结果合理赋值,采用危险特征值加权评估的方式,进行程序的危险定级,与此同时,开展电子取证工作,视具体情况出具相关检验报告或意见。静态检测取证整体框架如图1所示。
图1 静态检测取证系统框图
1.1.1 逆向工程原理
逆向工程也称为反向工程(Reverse Engineering)[3],其含义是根据已有的应用程序,通过逆向工程来得到源码,进而分析掌握其设计框架。目前该方法被很多公司采用,也可用来分析应用程序是否有安全隐患和漏洞。
逆向工程的功能模块以Android APK应用程序文件作为输入,以配置文件和代码文件作为输出。其中APK应用程序文件属于Android系统安装的文件,是我们熟知的ZIP格式文件。Android逆向工程主要处理两部分[4]:xml和dex。 对于xml文件的反编译一般采用工具有两种,APKtool和 AXMLPrinter2.jar。 反编译dex一般分为两步:第一步,从dex文件反编译出class文件,通常使用 dex2jar.bat和 APKtool。 从 class文件反编译到java可以使用jd-gui、Jodeclipse以及JadClipse工具。
APK文件经过逆向工程后生成dex和smali两种不同格式的文件,使用dex2jar工具可以将android的.dex 文件转换生成 classes.dex.dex2jar.jar文件,再用rar解压工具解压出jar文件中的class文件,然后用jad或者DJ Java Decomplier反编译工具将Java的.class文件反编译成.java文件,单独java文件还不足以掌握程序的特征,虽smali汇编代码的可读性不如java,但是它可以与java代码解析出来的源码进行功能比对,所以,要想完整的反映一个应用程序的所有特性,必须要smali和java两种类型文件各一份[5]。结合对比审查不仅能够快速找到可疑点,还能够保证分析结果的准确性。
1.1.2 打包校验
打包校验过程处于整个静态分析取证的前端,主要分析应用程序的签名信息和应用程序包的信息,如PackageName等[1],通过查寻数据库中相应的包名对应的签名信息进行校验。如果发现签名不统一,则可以判断此安装文件有一定的安全隐患。
二次打包技术是恶意程序作者最常用的技术。恶意程序作者会分析并下载流行的程序,反编译而后导入恶意的Payloads,再二次打包生成APK。最后恶意程序作者会把二次打包的APK上传到第三方Android应用市场。用户很容易会被诱骗安装受到感染的恶意应用。
在Android系统中,Android程序必须经过数字证书的签名后才可以进行安装。数字证书用以标识应用程序的作者并与应用绑定。故可以通过打包校验,及时的发现被修改或者植入了恶意程序段的恶意应用。这个方法通过提取APK中的公钥信息和PackageName信息,然后和样本数据库中对应的PackageName进行匹配视其公钥信息是否和样本数据库中的一致。如果发现签名不一致,则可以判断此安装文件有一定的安全隐患,需要进一步检测。
1.1.3 APK 反编译
通过打包校验后,我们可以初步筛选出有安全隐患的程序,接着开始进行APK反编译工作。通过反编译程序(APKtool)实现对APK文件的反编译,获取其源代码文件以及各类资源文件。此过程也可以被称为资源获取过程。
通过APKtool反编译之后可以得到应用程序所包含的资源文件,存放在res目录下,通过修改和替换这些资源文件可以改变这个应用程序的界面,所以Android应用程序的汉化和去广告都是用APK-tool完成的。而APKtool同时会将.dex文件反编译成.smali文件,而smali目录中的文件与Java源文件是相对应的,这是APKtool常用的两个命令:
反编译命令 APKtool d<app_path/filename.APK>[<dir>]
编译命令 APKtool b[<app_path/filename.APK>][<out_file>]
通过APKtool逆向出来的资源包括了res资源库、smali文件夹、original文件夹、unknown文件夹以及 AndroidManifest.xml文件。
res包含了应用的所有图片资源、布局文件以及 style.xml、string.xml等 value 文件。
smali文件夹下是整个应用的smali文件,smali是Dalvik VM内部执行的核心代码。通过阅读smali代码,我们可以正确的理解程序的意思和思想。在smali中有对应于Java语法的自身语法,包括数据类型和方法表示。
unknown文件夹中防止的是反编译器不识别的文件,一般.html文件都放在这个文件夹中。
在 AndroidManifest.xml文件中我们可以看到工程的整个结构,包括权限,组件等信息。因此AndroidManifest.xml是逆向工程第一个需要分析的文件。
1.1.4敏感权限检测
在Android系统中,一个应用如果需要实现某些特殊功能,都需要向系统申请权限。申请权限的方式主要是在源代码的Manifest.xml中进行声明。一些高危权限如隐私数据拥有操作权限的申明需要格外注意。
一般情况下,除非移动应用已经通过申请或者利用系统Linux内核存在的漏洞获取了最高管理员的权限,一个移动应用只能访问自己的私有数据(/scared目录中的数据需要申请写外部存储器的权限才可以访问)。所以,通过对APK的权限进行分析,如果没有申请一些敏感的权限,并且也不存在ROOT的Exploit,那么就可以判定一个应用是一个正常的应用,如果申请了一些敏感权限,则需要进一步的检测。
1.1.5 权重分析
以上述的权限检测为例,即使一个应用申请了大量的冗余权限,且权限中有敏感权限,但是其在实际API调用中并没有调用敏感API,单单依靠敏感权限申请的检测无法得到该程序合理的安全性解释。
我们一般采用平均权重分配法,对上述参考因子进行随机权重分配。并抽取市场上主流的、安全的应用进行测试,获得各自的参考值,然后对参考值通过聚类算法,获得聚类中心。将聚类中心作为标准参考值。如果测试APK的危险值小于标准参考值,则判断危险程度为高,并需要进一步人工检查。如果危险值大于标准参考值,则危险程度为低。
1.2 Android应用动态监测分析
在实际取证应用中,我们还会采用动态监测分析,应用程序最基本的行为是在系统中执行的一条条指令,包括逻辑、运算、执行控制、存储处理和接口处理等。但是孤立的研究每一条指令其意义并不大。从软件工程角度出发,可以把一系列命令看作是一个程序行为,通过检测程序行为,与静态检测中获取的权限声明相比较,如果发现程序行为比申请的权限大,说明这个程序是恶意程序的概率就大[6]。
Android应用动态监测一般由两部分组成:应用运行实时行为监测和监测结果分析。常用的动态监测技术由沙箱技术、钩子技术等。
总体来看,动态监测技术就是实时的检测被测程序的行为,所发送的数据,并对相关信息、行为和数据等进行捕获。因此对于恶意应用取证来说,静态检测技术和动态监测技术都是必不可少的。
2 Android恶意程序样本检测与分析
2.1 Android恶意样本程序检测分析概述
前文已详细阐述了如何通过静态检测技术和动态监测技术实现针对Android系统恶意程序开展电子取证。具体流程一般为检测环境准备、样本获取、恶意程序检测、电子证物提取以及出具报告这几个环节。其中恶意程序检测环节又分为APK逆向、静态检测和动态监测三个子项目。
笔者将对工作中捕获的一个Android恶意程序“相册.APK”进行检测和取证。该恶意程序伪装成相册程序,无基本相册功能,实际上该程序运行后,会申请大量敏感权限,能够群发恶意短信,获取大量用户信息,属于典型的恶意程序。
2.2 检测环境准备
在进行恶意程序检测取证之前,首先准备实验环境的搭建。其中包括硬件设备和软件环境两大部分。
硬件设备有:取证工作站、手机信息号屏蔽设备、手机专用检验设备、照相机等。
软件环境有:杀毒软件、手机取证系统、Wireshark、手机PC套件等。
2.3 Android恶意程序样本获取
本次检测实验是以一台安装了“相册.APK”木马的手机(联想手机A288T型号)作为样本,该样本手机由于用户的疏忽,点击了其短信内含有恶意链接地址,下载安装了手机木马程序,导致用户手机内大量隐私信息被泄露。恶意程序植入用户手机后,以致该手机用户遭受到诈骗犯罪侵害。为查明该手机样本中是否含有恶意程序、恶意程序的数量、恶意程序具体行为以及相关涉案线索,需对该样本手机进行检测取证,获取手机中的恶意程序进,并开展检测取证工作。
2.4 Android恶意程序检测取证
2.4.1 样本登记
对已感染了“相册.APK”木马的手机进行唯一性编号,并对手机型号、手机IMEI码、Android版本号、内核版本号等相关信息进行登记。随后,再对具有唯一编号的实验手机进行拍照和保全备份。
2.4.2 数据提取
首先,启动检验工作站的杀毒软件对工作站自身工作系统进行杀毒,其次,在手机通信信号屏蔽的状态下,运行手机检验系统,分别获取其内存和SD卡信息,找出所有APK文件。
2.4.3 筛查分析
将所有提取的APK文件进行静态筛查过滤,排除正常APK程序包,通过识别签名、查看权限申请等方法,将剩下未知来历的APK文件,批量导入手机取证系统中,通过敏感权限检测,发现只有“相册.APK”申请了大量与其描述功能完全不一致的敏感权限,因此它的危险等级高。
2.4.4 逆向工程
为了能够更好的确定风险函数的调用检测,需要对原始的可执行应用程序进行反编译,在反汇编实现过程中,综合比较 Dexdump、APKtool、Dedexer等工具性能,发现APKtool可以对所有资源进行处理,功能强大,可以重新打包,能够快速地解析出应用程序中的manifest.xml配置文件,通过Android-Manifest.xml文件的扫描比对,提高了检测速度,避免对所有代码进行全部特征值扫描比对。通过APKtool反编译APK,获取资源文件。进而可对资源文件进行综合分析评估,判定该程序是否具有安全风险性。
2.4.5 静态检测
静态检测主要还是指在程序没有实际运行的情况下,通过程序控制流、数据流等信息来研究分析程序的行为[7]。因为“相册.APK”样本的风险评估高,属恶意程序。首先需要在不运行的情况下,通过dex2jar反编译出恶意程序的源代码,使用jd-gui工具阅读jar文件代码。但是经一系列操作后,发现无法进一步查看源代码文件。因此对“相册.APK”内的lib.so文件进行分析,经过逆向分析源程序解密出的字符串,如图2所示。
经分析发现AB为分隔符,前面的数字为字符ASCII码减去51所以100AB等于1,102AB等于3依此类推。得到一个邮箱名a1353347****@vip.*.com,手机号 1353347****,密码:****168。
图2 逆向结果
2.4.6 动态监测
由于AndroidManifest.xml文件的静态分析不能反映应用程序数据流的走向和远程服务端,在此我们还需采用动态监测技术进行分析。本实验网络抓包使用Linux支持的Tcpdump工具。为实时监测掌握“相册.APK”程序运行后的具体行为特征,在此,将“相册.APK”程序安装到联网的实验机中。操作流程如下:
(1)加载实验机,即加载联想手机A288T,如图3所示。
图3 加载实验机
(2)向实验机中 Tcpdump文件赋值,如图 4所示。
图4 权限赋值
(3)为抓包的文件进行命名,命名为1_capture.Pcap,如图5所示。
图5 重命名
在抓包工具Tcpdump打开后,运行“相册.APK”,间隔数十几秒钟后,关闭该应用程序。将1_capture.pcap文件pull到电子检验工作站中,通过Wireshark读取网络数据通信包。通过抓包分析能够发现实验机联网后数据的流向,明确了“相册.APK”恶意程序运行时数据回传的地址,为案件侦查提供线索支撑。
至此,我们已掌握该恶意程序联网后数据的流向为某邮件服务器IP地址,与静态检测的结果进行比对吻合。为获取动态监测出来的邮箱地址信息。我们还需要进行抓包解析工作,如图6所示。
图6 捕捉到的数据包
经实验发现,邮件发件人和收件人均为a1353347****@vip.*.com,因此,我们可以证实,a1353347****@vip.*.com 邮箱为恶意程序编写用于接收手机使用者通话记录、短信内容等个人手机信息。
同时,动态监测发现,该恶意程序会向通信录列表内用户群发恶意短信,该恶意短信包括了接收人姓名,因此极易欺骗用户,如图7所示。
图7 截获的恶意短信
对恶意短信内的连接URL地址进行调查发现,用户如果点击链接,则会出现下载安装一个“相册.APK”程序的提示,被害者通过几次点击“下一步”安装后,该恶意程序便成功地实现感染和传播。
2.5 Android恶意程序取证结果
本次实验中所捕获并分析的恶意程序“相册.APK”,属于木马型恶意APK,调用大量敏感权限,且该恶意程序会读取手机联系人信息和用户收件箱信息。同时对联系人列表内的联系人群发恶意短信。通过短信完成该恶意程序的传播过程。同时该恶意程序会将用户隐私信息如联系人列表、短信等相关信息发送到指定邮箱,因此本恶意程序具有极高的危害性。
3 结论
在现有Android安全机制下,需要在第三方的参与下对应用程序进行检测分析,及时发现应用程序可能带来的威胁,为发布预警信息、案件调查和取证提供技术支撑和保障。