深度学习是机器学习的分支,它使用包含复杂结构或多重非线性变换构成的多个处理层对数据进行高层抽象,其优点在于使用非监督式或半监督式的特征学习和分层特征提取的高效算法来替代手工获取特征,比起传统机器学习对领域知识的要求更低.
本项目尝试将深度深度学习算法用于安卓恶意软件检测.
1 安卓应用的背景知识
安卓应用程序包文件(Android application package, APK)是一种安卓操作系统上的应用程序安装文件格式.一个APK文件内包含被编译的代码文件(.dex文件),文件资源(resources), assets, 证书(certificates)和清单文件(manifest file),如下图所示.
APK文件的基本结构
这些文件的内容和作用如下:
- classes.dex: Dalvik字节码,可以被Dalvik虚拟机执行.Android的执行代码被编译后封装在这个文件中.
- AndroidManifest.xml: 一个Android的清单文件,用于描述该应用程序的名字,版本号,所需权限,注册的服务,链接的其他应用程序等.该文件使用xml文件格式.
- META-INF文件夹,下面有3个文件:MANIFEST.MF( 清单信息), CERT.SRA(保存应用程序的证书和授权信息), CERT.SF(保存SHA-1信息资源列表).
- res: APK所需的资源文件夹
- assets: 不需编译的原始资源文件目录
- resources.arsc: 编译后的二进制资源文件
- lib: 库文件目录
2 安卓应用静态分析
2.1 安卓应用静态特征
对Android应用的静态检测,是指在不运行代码的情况下,采用词法分析,语法分析等各种技术手段直接分析从应用软件本身反汇编后提取的特征.通过提取的特征与恶意软件样本库中各个样本的特征之间的比较,依据两者相似程度值的大小来判断待检测软件是否具有恶意行为.由于不需要运行待检测软件,静态检查具有方便易实施,资源损耗少等优点.
目前,通过静态分析识别安卓系统恶意软件的方法占据了主导地位,这些研究中提取出的特征主要有以下几种:权限,API调用,控制流,数据流,函数调用图,硬件组件和Intent信息传递.下面对几种常见的静态特征进行分别阐述.
- 权限
每个APK文件都包含一个manifest文件,Android系统可以在这个文件中获得应用所需要的权限的详细信息.这些权限包括各种硬件访问权限(GPS,照相机等)和敏感信息(通讯录,短信等),还有访问其他应用的权限.
安卓官方给权限设置了一个权限的保护级别.这个保护级别暗示权限的潜在风险,并且指出当决定是否赋予权限时系统应该遵循的校验程序的流程.安卓中共定义了四个保护级别,分别是normal, dangerous, signature 和 signatureOrSystem.级别越靠后,其敏感程度越高,需要的验证越多.
在本作品中,我们使用这个保护级别作为权限的危险等级评判标准. - API调用序列
用户层应用程序通过调用操作系统API执行应用程序的命令,可以实现网络连接,文件读写,数据库读写,短信及电话操作等功能.因此API调用序列作为特征具有一定的代表性,在判定恶意软件中起到重要作用. - 组件
Android应用程序主要由四大组件构成,包括活动,广播接收器,服务和内容提供器.除广播接收器可以在程序中动态注册外,其他组件需要在AndroidManifest.xml文件中声明.
恶意代码行为的实现需要通过组件的形式表达;同一家族的恶意代码,其组件具有一定相似性.因此Android应用程序组件信息在一定程度上可以代表其运行时的行为.
2.2 Dalvik操作码
操作码字段在计算机中表示指令的操作特性和功能.一条指令的机器码由两个部分:操作码和操作数组成,操作码表示要操作的动作,而操作数描述被操作的对象和范围.
Dalvik指令有两百多条,对其进行分类和精简,去掉无关指令,且只保留操作码字段.在此将这些操作码分为M, R, G, I, T, P, V七大类指令集和,它们分别代表移动,返回,跳转,判断,取数据,存数据,调用方法.这七类主要的Dalvik操作码如图所示.
七类主要的Dalvik操作码
对于APK中的操作码序列,可以使用N-gram模型提取特征,一个n等于3的序列如下所示:
PVR VRT RTV TVR
3 安卓应用动态分析
静态分析的缺点在于反汇编后的代码难以理解,而且分析过程工作量巨大;并且对于加密或混淆后的代码无能为力,存在一定的局限性.这一局限性可以通过动态分析来弥补.
动态分析是指在受保护的专用系统或者虚拟机中运行程序,并监视代码的所有行为(特别是API调用情况,调用地址和参数).
在使用动态分析的研究中,主要监控的方面包括:系统调用,网络,SMS, CPU,电量,进程,内存和虚拟内存,事实通信量和过滤事件等.以上因素能够反映出被监控的程序执行时的行为,并与敏感行为挂钩,从而实现对恶意软件的识别.
相比于静态分析,动态分析具有直观,快速,能够分析未知行为等有点.然而动态分析的开销往往比较大,在环境部署和人工调查方面的代价较高.两种方法各有利弊,因此静态分析和动态分析相互结合,相互补充可以达到更好的效果.
安卓应用动态分析方法主要包括属性分析,系统调用分析,函数抽象分析和数据流追踪分析.下面分别对其概念和实现方式进行介绍.
- 系统属性分析
主要分析程序对系统属性造成的变化和可能带来的影响,例如系统关键文件是否被替换,是否有新的应用被安装,开机启动项是否被修改等. - 系统调用分析
对API进行挂钩(hook),来监控程序是否调用了对应API,实现行为监控. - 函数抽象分析
函数抽象分析对函数调用序列和I/O进行监控,并对其行为进行抽象. - 数据流追踪分析
监控应用程序执行过程中处理和产生的数据,并且跟踪这些数据的流向.
网友评论