浙江大学学报(工学版), 2019, 53(10): 2013-2023 doi: 10.3785/j.issn.1008-973X.2019.10.019

自动化技术、计算机技术

基于随机森林算法的Android恶意行为识别与分类方法

柯懂湘,, 潘丽敏,, 罗森林, 张寒青

Android malicious behavior recognition and classification method based on random forest algorithm

KE Dong-xiang,, PAN Li-min,, LUO Sen-lin, ZHANG Han-qing

通讯作者: 潘丽敏,女,高级实验师. orcid.org/0000-0002-8850-8380. E-mail: panlimin@bit.edu.cn

收稿日期: 2018-11-15  

Received: 2018-11-15  

作者简介 About authors

柯懂湘(1997—),男,硕士生,从事Android安全的研究.orcid.org/0000-0002-4424-6286.E-mail:384209891@qq.com , E-mail:384209891@qq.com

摘要

针对当前Android恶意软件检测方法对检测出的恶意行为无法进行识别和分类的问题,提出基于随机森林(RF)算法的Android恶意行为的识别与分类方法. 该方法在对Android恶意软件的类型进行定义的基础上,利用融合多种触发机制的Android恶意行为诱导方法触发软件的潜在恶意行为;通过Hook关键系统函数对Android软件行为进行采集并生成行为日志,基于行为日志提取软件行为特征集;使用随机森林算法,对行为日志中的恶意行为进行识别与分类. 实验结果表明,该方法对Android恶意软件识别的准确率达到91.6%,对恶意行为分类的平均准确率达到96.8%.

关键词: Android安全 ; 机器学习 ; 随机森林(RF) ; 恶意软件检测 ; 恶意行为分类

Abstract

An Android malware behavior identification and classification method was proposed based on random forest (RF) algorithm aiming at the problem that the existing Android malware detection method cannot identify or classify the detected malicious behavior. The types of Android malware behavior were defined, and the potentially malicious behavior was triggered with a complex Android malicious behavior induction method. Application behavior can be captured by system function hook and transformed into behavior log. Then application behavioral feature set can be extracted from behavior log. The random forest algorithm was used to identify and classify the malicious behavior from the behavior log. The experimental results showed that proposed method had 91.6% accuracy in malware behavior identification and 96.8% accuracy in malicious behavior classification.

Keywords: Android security ; machine learning ; random forest (RF) ; malware detection ; malicious behavior classification

PDF (693KB) 元数据 多维度评价 相关文章 导出 EndNote| Ris| Bibtex  收藏本文

本文引用格式

柯懂湘, 潘丽敏, 罗森林, 张寒青. 基于随机森林算法的Android恶意行为识别与分类方法. 浙江大学学报(工学版)[J], 2019, 53(10): 2013-2023 doi:10.3785/j.issn.1008-973X.2019.10.019

KE Dong-xiang, PAN Li-min, LUO Sen-lin, ZHANG Han-qing. Android malicious behavior recognition and classification method based on random forest algorithm. Journal of Zhejiang University(Engineering Science)[J], 2019, 53(10): 2013-2023 doi:10.3785/j.issn.1008-973X.2019.10.019

截止到2018年,Android系统在全球智能手机中所占据的份额已达85%[1],但因其开放性与相对宽松的应用审查环境,各种恶意软件的数量持续增长. 近年来,为了预防和减缓恶意软件的危害,各种Android恶意软件检测方法被逐渐提出.

Android恶意软件检测方法主要可以分为静态检测方法和动态检测方法两类. 静态检测方法通过从目标软件程序中提取语义特征[2-3]或从Manifest文件中提取资源特征和权限特征[4-7]并与恶意样本特征进行比对分析. 动态检测方法通过在目标应用运行时提取各种动态行为特征如资源消耗[8-10]、函数调用[11-13],与恶意样本动态特征进行比对分析. 由于恶意软件通常会使用代码混淆、代码加壳、从网络下载恶意负载等方法对抗静态检测,导致静态检测方法难以准确识别使用了该类对抗方法的恶意软件,因此本文主要讨论动态检测方法.

现有的Android恶意软件动态检测方法主要针对应用进行威胁分析,通常只能判定软件是否为恶意软件,无法给出具体恶意行为的识别与分类结果. 针对该问题,该方法在对常见的Android恶意软件行为进行定义和分类的基础上,提出基于随机森林算法的Android恶意行为识别与分类方法,动态采集软件运行数据生成行为日志;使用随机森林算法对行为日志中的恶意行为进行识别与分类,比其他动态检测方法具有检测结论粒度更细致的优势. 本文的主要贡献如下.

1)对现有的Android恶意软件行为进行系统的定义和分类,描述了每种恶意行为具备的行为特征.

2)提出融合多种软件行为触发方式的Android软件行为动态检测方法.

3)提出基于随机森林算法的Android恶意行为识别与分类方法,与专业反病毒软件Avira AntiVirus相比,在保证恶意软件检测准确率的前提下,能够识别出具体的恶意行为类型,给出细粒度的检测结论.

1. 相关工作

现有的Android恶意软件动态检测方法主要对软件运行期间发起的行为进行检测和分析,从实现原理上可以分为以下3类.

1)第1类检测方法利用软件所消耗的资源大小识别恶意软件. 许多恶意软件在资源消耗上明显大于正常软件,例如DDOS攻击类型的恶意软件需要消耗大量的网络资源才能完成一次DDOS攻击. 该类方法监控软件所消耗的网络、电量、CPU、内存等资源,检测出软件的异常行为[8-10]. 该类检测方法只能检测出资源消耗明显的恶意程序,适用范围有限.

2)第2类检测方法通过检测软件对系统函数的调用情况来识别恶意软件. 恶意软件的一些恶意行为须利用系统提供的接口函数来实现,例如恶意软件在将窃取的隐私通过短信对外发送时,必须使用系统提供的发送短信的API来实现. 该类检测方法监控软件对函数调用情况(包含Android Native层的系统调用以及框架层的API),通过分析软件的函数调用序列以及调用函数时所传递的参数来识别恶意软件[11-13]. 该类方法只能判定软件是否为恶意软件,无法获得软件发起的恶意行为的具体信息,分析结论粒度较大,依赖于进一步的人工分析调试.

3)第3类检测方法首先检测软件对资源的访问范围,然后结合污点跟踪技术检测软件对被访问资源的使用情况,以此为依据检测出恶意软件所产生的信息泄露[14]甚至漏洞利用[15]问题. 该类方法有细致的检测粒度,可以分析出软件发起的恶意行为的详细信息,但是通常只能检测信息泄露类型的恶意行为,并且只能在Android虚拟机层进行污点跟踪,无法检测出恶意软件在Android Native层发起的恶意行为.

综上所述,现有的Android恶意软件动态检测方法中,大部分检测方法仅能判断软件的合法性,无法检测出软件的具体恶意行为,分析结论粒度较大,对恶意软件的全面分析依赖于后续人工调试;少部分检测方法虽然可以获得恶意行为的细粒度检测结论,但只能检测出特定类型的恶意行为,适用范围较窄.

本文提出基于RF算法的Android恶意行为的识别与分类方法. 该方法在对Android恶意软件的类型进行定义的基础上,首先利用融合多种触发机制的Android恶意行为诱导方法,触发软件的潜在恶意行为;然后通过Hook关键系统函数,对Android软件行为进行采集并生成行为日志,基于行为日志提取软件行为特征集;最后使用随机森林算法对行为日志中的恶意行为进行识别与分类,输出细致全面的分析结论,有效提升了Android恶意软件分析检测工作的效率.

2. 基于RF算法的Android恶意行为的识别与分类框架

2.1. 原理框架

任何恶意行为都有特定的行为模式,如隐私窃取行为必然包含对隐私数据的读取和发送这两个步骤. 恶意软件必须借助系统提供的接口来实现上述2个步骤,因此可以从Android软件对Native层函数、框架层API的调用情况以及调用时所传递的参数中提取行为特征,与恶意软件的行为特征进行对比分析来判断软件的合法性.

基于该原理,提出基于RF算法的Android恶意行为识别与分类方法. 该方法以动态分析为基础,首先通过Hook系统函数构建行为采集模块,采集Android软件对系统Native层函数、框架层API的调用情况以及调用时所传递的参数,构建行为日志,并使用行为触发模块尽可能多地触发软件的行为,以提升行为日志对软件行为的覆盖率;然后基于行为日志提炼Android软件行为特征集,使用随机森林分类算法进行恶意软件识别与恶意行为分类. 方法的原理框架如图1所示,包含3个主要模块:行为触发模块、动态采集模块、恶意行为检测与分类模块.

图 1

图 1   Android恶意行为识别与分类框架结构图

Fig.1   Android malicious behavior recognition and classification framework structure


2.2. 行为触发模块

对软件行为进行触发是动态检测的一个关键步骤. 若恶意软件的恶意行为不被触发,则动态数据采集系统无法采集到有用的信息,后续的检测过程无法检测到恶意行为. 恶意软件在大多数情况下会伪装为正常软件,只在特殊事件触发时才会执行恶意行为,这些特殊事件主要可以分为以下2类. 1)系统事件,如系统开机、系统接入网络,当某种系统事件发生后恶意软件会执行对应的恶意行为,例如只有当系统连入网络后,恶意软件才会在后台发送窃取的隐私. 2)用户对恶意软件GUI界面的操作,如恶意软件经常会伪装为播放软件,当用户点击播放按钮后,恶意软件会从网络下载恶意负载,破坏系统. 许多Android恶意软件会在Service中实现恶意功能,这样可以在用户未知的情况下,执行恶意操作.

针对通过系统事件触发的恶意行为,该方法通过模拟各种系统事件发生(如地理位置变化、网络连接和中断等)的方式触发恶意行为. Android应用要想监听系统事件,必须在Manifest中注册各种广播接收器. 该方法通过解析软件在Manifest中注册的各种广播接收器,然后利用adb工具模拟发送各种事件广播,激活对应的广播接收器,触发软件对应行为.

针对通过GUI界面操作触发的恶意行为,该方法利用Android自身提供的自动化测试工具Monkey来模拟各种UI事件(如点击、触碰、手势操作等),触发恶意行为.

针对在Service中实现的恶意行为,该方法采取启动恶意软件服务的方式来触发恶意行为. Android应用若要使用Service,必须在Manifest中注册Service. 该方法通过解析应用在Manifest中注册的Service,然后利用adb工具启动这些Service,进而触发恶意行为.

行为触发模块利用上述的3种方法来触发恶意软件行为,增加动态检测代码的覆盖率.

2.3. 动态数据采集模块

Andriod应用在发布时一般都会对程序代码进行加固、混淆处理,导致静态数据采集方法采集到的信息不全面,本方法提出一种深层次的动态数据采集方法解决该问题. 该动态数据采集方法以Android系统架构及Android安全机制为理论基础,分别在Android系统层、应用框架层进行软件行为数据采集. 数据采集方法的基本原理如图2所示.

图 2

图 2   多层次行为数据采集原理图

Fig.2   Multi-level behavior data acquisition schematic


在应用框架层,主要通过进程注入技术和Hook技术进行行为数据采集. 在Android系统中,使用虚拟机技术对上层应用软件进行管理和隔离,其中4.4版本之前采用Dalvik虚拟机,4.4版本之后采用ART虚拟机. 对于Dalvik虚拟机的拦截主要通过将非Native的Java函数变成Native函数,从而使Dalvik虚拟机放弃原来的执行序列,转而去执行另外的执行序列,最终实现对虚拟机的拦截. 对于Art虚拟机的拦截主要是通过修改Java方法所对应的ArtMethod结构,使Art虚拟机放弃之前的执行序列,转而执行注入的代码. 由于不同Android系统版本需要不同的虚拟机拦截方法,为了取得较好的采集效果和兼容性,采用同时支持Dalvik和Art虚拟机的Frida框架进行Android框架层API的Hook.

在系统Native层的行为数据采集主要采用进程注入技术及基于Inline Hook的So Hook技术. Inline Hook是通过在被Hook函数的入口处插入强制跳转的机器码,使得被Hook函数在执行时自动跳转到指定位置的函数Hook技术. So Hook基于Inline Hook的原理,对Android系统底层接口函数进行劫持,从而检测软件对系统底层接口函数的调用情况.

在行为触发模块成功触发被检测软件的相关行为时,动态数据采集模块利用上述方法对软件在应用框架层和系统Native层的行为进行检测,根据检测结果生成软件行为日志,行为日志记录的条目与各条目的含义如表1所示.

表 1   行为日志条目说明

Tab.1  Entry description of behavior log

日志条目 说明
Date 软件调用该函数的时间
Package Name 被检测软件所对应的完整应用名称
Method Name 所调用函数的名称以及该函数所属包的包名
Arguments 调用函数时所传递的参数

新窗口打开| 下载CSV


2.4. 恶意行为检测与分类模块

2.4.1. 恶意行为分类

针对Android恶意软件行为的分类目前国际上没有统一的规范,研究人员通常依靠个人经验对Android恶意软件行为进行分类. 该方法在《移动互联网恶意程序描述格式》[16]标准中给出的对移动恶意程序的定义、行为属性、判定及命名格式的规定的基础上进行完善和补充,提出Android恶意软件行为的分类标准,给出每种恶意行为的定义及对应的行为特点,根据行为属性可以分为以下6大类.

1)恶意扣费:在用户不知情的状态下,发送sp短信,购买一些用户不需要的服务,造成恶意扣费. 主要特征为发送sp短信、拦截sp短信的回复信息、删除相关发送、接收记录.

2)资费消耗:在未经用户允许的情况下,在程序后台私自下载所需要推广的软件、图片、插件等,造成用户流量消耗. 主要特征如下:访问远程服务器,获取所需下载资源的地址,下载资源.

3)隐私窃取:在用户不知情的状态下,窃取用户的隐私数据如短信、通讯录、通话记录、IMEI,IMSI、用户照片、应用信息、用户地理位置等,通过短信、网络向外发送. 主要特征如下:读取用户隐私,通过网络或者短信的方式发送数据.

4)流氓行为:在用户不知情或未授权的情况下,长期驻留在系统内存中,自动捆绑安装软件,自动添加、修改、删除收藏夹、快捷方式,频繁弹出广告窗口,用户无法正常删除和卸载. 主要特征如下:获取root权限或者设备管理员权限,发起上述流氓操作.

5)系统破坏:通过感染、劫持、篡改、删除、终止进程等手段,导致移动终端或其他非恶意软件部分或全部功能、文件无法正常使用. 主要特征如下:获取root权限或者设备管理员权限、修改其他软件代码或数据.

6)权限提升:利用系统本身的漏洞提升软件权限,从而发起用户未授权的行为. 主要特征如下:收集手机信息,通过网络下载漏洞利用程序,执行漏洞利用程序,发起超出用户授权范围的行为.

通过对大量恶意软件进行调试和分析可以发现,Android软件的行为在很大程度上取决于软件的函数调用信息,函数调用信息包含如下2个方面:1)被调用的目标函数以及调用时传递的参数;2)函数的调用顺序. 当软件调用的目标函数、传递的参数、调用顺序发生变化时,会表现出完全不同的行为模式并产生不同的结果,是判断软件合法性的关键. 该方法将软件的函数调用信息作为识别恶意行为的依据,但不是所有函数的调用信息都对软件的恶意行为识别起关键作用;通过对每种恶意行为的行为模式进行分析总结,提炼出恶意软件完成恶意行为的每个步骤中所必须依赖的一些关键系统函数,将这些函数的调用信息作为识别恶意行为的特征.

下面以隐私窃取为例,说明如何选取并构建用于识别恶意行为的特征. 一个常见的窃取用户地理位置的代码如表2所示,包含以下2个步骤:1)窃取用户的地理位置;2)将窃取的地理位置通过网络进行发送. 步骤1)需要通过getProvider->getLatitude->getLongtiude这个函数调用序列来实现,步骤2)需要调用openConnection函数实现,所以可以将图3所示的函数调用序列作为识别地理位置信息窃取的行为的特征.

表 2   地理位置信息窃取代码

Tab.2  Geographic information stealing code

Code:窃取用户地理位置信息
1:public void leakInfo(String url,String info){
2:  URL url=new URL(url);
3:  connection=url.openConnection();
4:  DataOutputStream wr=new DataOutputStream(connection.
5:  getOutputStream());
6:  wr.writeBytes(info);
7:  wr.flush();wr.close();connection.disconnect();
8:}
9:public void leakLocation(String url){
10:  locationProvider=LocationManager.GPS_PROVIDER;
11:  Location location=locationManager.getLastKnowLocation
12:  (locationProvider);
13:  String loc=location.getLatitude()+“:”+
14:  location.getLongitude();
15:  leakInfo(url,loc);
16:}

新窗口打开| 下载CSV


图 3

图 3   隐私窃取行为API序列

Fig.3   API sequence for privacy stealing


隐私窃取目标不仅包含地理位置数据,还包括短信、照片、通讯录等信息. 发送隐私数据的方式包含短信和网络2种,通过总结隐私窃取过程中每个步骤所依赖的系统函数,可以得到如表3所示的系统函数列表. 这些函数的调用信息可以作为识别隐私窃取行为的特征,用于识别其他恶意行为的系统函数详见附录1.

表 3   与隐私窃取相关系统函数条目

Tab.3  List of apis related to privacy theft

监控函数列表 备注
ContentResolver.query 根据参数不同可用于获取短信,通讯录,照片等隐私
LocationManager.getProvider 用于获取地理位置信息
Location.getLatitude
Location.getLongitude
PackageManager.getInstalledPackages 获取已安装应用
PackageManager.getInstalledApplications
TelePhonyManager.getSubscriberId 获取手机IMSI号码
TelePhonyManager.getDeviceId 获取手机设备号
SmsManager.sendTextMessage 可用于将窃取的隐私通过短信发送出去
DefaultHttpClient.execute 可用于将窃取的隐私通过网络发送
URL.openConnection
AbstractHttpClient.execute

新窗口打开| 下载CSV


附表 1   动态数据采集模块监控函数列表

恶意行为 监控函数列表 备注
恶意扣费 SmsManager.sendTextMessage 可用于发送sp短信,订购附加服务
BroadcastReceiver.abortBroadcast
ContentResolve.delete
资费消耗 DefaultHttpClient.execute 通过网络接收数据,消耗流量
AbstractHttpClient.execute
Socket.getInputStream
Socket.getOutputStream
URL.openConnection
OutputStream.write 用于保存从网络接受的数据
InputStream.read 读取从网络接收的数据
隐私窃取 ContentResolver.query 根据参数不同,可用于获取短信,通讯录,照片等隐私
LocationManager.getProvider 用于获取地理位置信息
Location.getLatitude
Location.getLongitude
PackageManager.getInstalledPackages 获取已安装应用
PackageManager.getInstalledApplications
TelePhonyManager.getSubscriberId 获取手机IMSI号码
TelePhonyManager.getDeviceId 获取手机设备号
SmsManager.sendTextMessage 可用于将窃取的隐私通过短信发送出去
DefaultHttpClient.execute 可用于将窃取的隐私通过网络发送
URL.openConnection
AbstractHttpClient.execute
流氓行为 Runtime.exec("su") 可用于获取root权限
DevicePolicyManager.isAdminActive 获取设备管理员权限
ApplicationPackageManager.setComponentEnabledSetting 隐藏应用图标
ApplicationPackageManager.installPackage 静默安装
ShortcutIconResource.fromContext 创建快捷方式
Dialog.onCreate 可用于广告弹窗
java.lang.Runtime.exec("mount") 将应用设置为系统应用
java.lang.Runtime.exec("cp")
java.lang.Runtime.exec("chmod")
系统破坏 Runtime.exec("su") 可用于获取root权限
DevicePolicyManager.isAdminActive 用于获取设备管理员权限
ActivityManager.getRunningAppProcesses 用于查看现有进程信息
ActivityManager.killBackgroundProcesses 用于终止其他进程
ActivityManager.forceStopPackage 用于终止其他应用
ApplicationPackageManager.deletePackage 用于卸载其他应用
File.delete 用于删除用户文件
Cipher.getInstance 用于加密用户文件
MessageDigest.getInstance
ApplicationPackageManager.setComponentEnabledSetting 可用于终止其他组件
android.app.admin.DevicePolicyManager.resetPassword 可用于修改锁屏密码,并锁屏
android.app.admin.DevicePolicyManager.lockNow
权限提升 Runtime.exec("su") 可用于获取root权限
DevicePolicyManager.isAdminActive 用于获取设备管理员权限
mmap 通过脏牛、Futex、zergRush等漏洞进行权限提升攻击时所需使用的native函数
madvise
malloc
phtread_create
getgid
futex_lock_pi
futex_lock_pi_atomic
mount
fopen("/proc/mounts","r")
setresuid 设置文件的S权限位

新窗口打开| 下载CSV


2.4.2. 恶意行为检测与分类模型

针对提出的Android恶意软件行为的定义以及恶意行为的特征描述,提出基于RF算法的Android恶意行为的识别与分类模型,该模型可以有效地识别Android恶意软件,能够对软件发起的恶意行为进行分类. 恶意行为的识别与分类过程如图4所示. 首先对待检测软件进行行为采集,构建行为特征;然后使用恶意软件检测模型和恶意行为分类模型,对软件及软件行为进行识别和分类.

图 4

图 4   恶意行为检测过程

Fig.4   Malicious behavior detection process


随机森林算法能够较好地处理高维度数据,具有较强的泛化能力和较好的分类效果,因此该模型的分类算法采用随机森林算法. 恶意行为检测模型主要分为2个部分:恶意软件识别模型与恶意行为分类模型. 其中恶意软件识别模型根据软件的行为日志判断软件是否为恶意软件,如果软件为恶意软件,其行为日志会交由恶意行为分类模型进一步分析,判断其发起的恶意行为的具体类别.

如2.4.1节所述,该方法针对不同类型的恶意行为,选择不同的函数、参数、调用序列进行行为特征构建,因此行为特征构建过程包含以下2个主要步骤:1)从行为日志中提取函数调用序列及相关信息;2)对函数调用序列进行N-Gram处理,得到统计特征. 下面以隐私窃取为例,说明特征构建过程.

1)从行为日志中提取出和隐私窃取相关的函数,组成函数调用序列. 部分函数需要判断函数参数取值,如ContentResolver.query()函数只有参数中包含类似"content://sms"这类uri才需要被纳入函数调用序列中.

2)从函数调用序列中提取2种特征项:1)函数调用序列中是否包含特定函数;2)利用N-Gram模型获得的函数调用时序关系特征. 为了控制特征维度,采用2-Gram模型对被监控函数的时序关系进行两两计算. 当监控的函数数目为n时,提取出特征项的总维度数为n2+n. 例如,针对隐私窃取行为共需要监控12个系统函数,分别编号为1~12,若采集到行为样本中的函数调用序列为{3,2,1},则该样本的特征可以表示为:[{3,2},{2,1},{1},{2},{3}].

图4所示,恶意行为检测过程中使用2个模型:恶意软件识别模型和恶意行为分类模型. 恶意行为分类模型包括针对6种恶意行为的检测模型,这些检测模型均通过离线训练获得,训练流程如下.

1)恶意软件识别模型的训练. 恶意软件识别模型的训练集包含2个子集:1)恶意样本APK集合;2)正常样本APK集合. 在训练过程中,首先利用脚本将样本逐一安装到测试机中,并运行行为触发模块与动态采集模块,得到样本的行为日志;然后从日志中提取样本行为特征;最后采用随机森林分类算法,建立恶意软件识别模型.

2)恶意行为分类模型的训练. 因为一个恶意应用中通常包含多种恶意行为,为了得到恶意软件全面的行为分类结果,恶意行为分类模型针对1.4.1节定义的每种恶意行为建立独立的分类模型. 以隐私窃取行为分类模型为例,隐私窃取行为分类模型的训练集分为:1)包含隐私窃取行为的恶意样本APK集合;2)正常样本APK集合. 训练过程和恶意软件识别模型的训练流程类似,在获取样本的行为特征后,采用随机森林分类算法,建立针对隐私窃取行为分类的模型.

3. 实验分析

3.1. 恶意软件识别实验

3.1.1. 实验数据与环境

该实验的目的是验证提出的恶意软件识别与分类方法能否准确地识别恶意软件,与德国知名的专业反病毒软件Avira AntiVirus进行对比分析. 实验所使用的1 071个正常样本来源于Android官方应用市场Google Play,1 000个恶意样本来源于公开数据集AMD(Android Malware Dataset)[17];AMD数据集将恶意应用按家族分类,涵盖了包含各种恶意行为的恶意应用. 实验所采用的硬件、软件环境如表4所示.

表 4   恶意软件识别实验环境

Tab.4  Malware recognition experiment environment

项目 操作系统 CPU型号
华为荣耀4A手机 Android5.1 四核 1.1 GHz
Dell 390台式机 windows7 i7-6700 CPU 3.4 GHz

新窗口打开| 下载CSV


3.1.2. 评价方法

使用准确率PD和误报率PF作为实验评价指标,PDPF的计算公式如下.

a)恶意软件识别准确率为

b)恶意软件识别误报率为

式中: $ {N_{\rm{m,m}}}$为正确识别出的恶意应用数量, $ {N_{\rm{b,b}}}$为正确识别出的正常应用数量, $ {N_{{\rm{b}},{\rm{m}}}}$为将正常应用识别为恶意应用的数量, $ {N_{{\rm{m}},{\rm{b}}}}$为将恶意应用识别为正常应用的数量,N为被检测样本的总数量.

3.1.3. 实验结果与分析

对全部1 071个正常样本和1 000个恶意样本,分别使用其中的60%作为恶意软件识别模型的训练样本,40%作为测试样本. 在训练样本和测试样本相同的前提下,分别使用提出的恶意软件识别方法和Avira AntiVirus进行训练和测试,计算准确率和误报率.

实验结果如表5所示. 可知,Avira AntiVirus和提出的恶意软件识别模型针对恶意软件的检测均有较好的效果,恶意软件的识别准确率超过了90%;该实验所选用的样本集合已经公开了一段时间,专业反病毒引擎都已将其中的恶意代码加入样本库,所以专业的反病毒引擎针对这些样本有较好的检测率,该框架是依托于动态行为检测的,针对检测尚未公开的恶意样本会存在一定优势.

表 5   恶意软件识别实验结果

Tab.5  Malware recognition experiment results

实验方法 PD/% PF/%
Avira AntiVirus 92.7 0.6
本方法 91.6 0.7

新窗口打开| 下载CSV


3.2. 恶意行为分类实验
3.2.1. 实验数据与环境

该实验的目的是验证提出的恶意行为分类方法能否对恶意软件中所包含的恶意行为进行准确分类. 实验所使用的正常样本来源于Android官方应用市场Google Play,恶意应用来源于公开数据集AMD(Android Malware Dataset)[17]. AMD数据集将恶意应用按家族分类,涵盖了包含各种恶意行为的恶意应用. 为了验证恶意行为分类模型对恶意行为识别的准确性,对恶意应用进行人工分析,标注了每个恶意应用样本所包含的恶意行为. 每类恶意行为的样本数量如表6所示. 表中,Nps为正样本数量,Nns为负样本数量.

表 6   恶意行为的样本数量

Tab.6  Number of malicious behavior samples

恶意行为 Nps Nns
恶意扣费 763 562
资费消耗 635 623
隐私窃取 1 203 1 106
流氓行为 351 423
系统破坏 576 524
权限提升 241 324

新窗口打开| 下载CSV


实验所采用的硬件、软件环境如表7所示.

表 7   恶意行为分类实验环境

Tab.7  Malicious behavior classification experiment environment

项目 操作系统 CPU型号
华为荣耀4A手机 Android5.1 四核 1.1 GHz
Dell 390台式机 windows7 i7-6700 CPU 3.4 GHz

新窗口打开| 下载CSV


3.2.2. 评价方法

提出的恶意行为分类方法为每种恶意行为均构建了分类器,所以分别对每种恶意行为的分类模型进行评估. 恶意行为分类模型基于机器学习分类算法,评估机器学习分类算法有效性的最基本4个指标如下.

1)真阳性(TP),表示正确分类为恶意行为的正样本个数.

2)假阳性(FP),表示错误分类为恶意行为的负样本个数.

3)真阴性(TN),表示正确分类为良性行为的负样本个数.

4)假阴性(FN),表示错误分类为良性行为的正样本个数.

上述4个指标构成表8所示的混淆矩阵,用来评价恶意行为分类方法的有效性.

表 8   恶意行为分类混淆矩阵

Tab.8  Malicious behavior classification confusion matrix

真实值 良性行为 恶意行为
良性行为 TN FP
恶意行为 FN TP

新窗口打开| 下载CSV


根据上述4个基本指标,提出以下评价指标.

1)恶意行为分类召回率(Recall):

2)恶意行为分类准确率(Precision):

3)恶意行为分类F值(F-Score):

3.2.3. 实验结果与分析

为了评估恶意行为分类模型能否准确、有效地识别出每种恶意行为,分别对每种恶意行为的分类器进行实验. 以针对隐私窃取分类器的实验为例,说明实验流程. 首先以2 309个样本作为实验数据集进行实验,其中包含隐私窃取行为的恶意样本1 203个,正常软件样本1 106个;然后将实验数据中的60%作为隐私窃取分类器的训练样本库,剩余40%作为测试样本库;最终统计实验结果,计算评价指标. 使用相同流程,对其他恶意行为的分类器进行实验验证,统计实验结果.

实验结果如表9所示. 表中,Ns为测试样本数量. 可知,提出的恶意行为分类方法对6类恶意行为分类的准确率不低于0.94,召回率不低于0.97,F不低于0.94,说明该方法能够有效完成对恶意行为的分类.

表 9   恶意行为分类的实验结果

Tab.9  Malicious behavior classification experiment results

恶意行为 P R F Ns
恶意扣费 0.96 0.98 0.98 1 325
资费消耗 0.98 0.99 0.97 1 258
隐私窃取 0.99 0.98 0.98 2 309
流氓行为 0.95 0.97 0.94 774
系统破坏 0.94 0.96 0.95 1 100
权限提升 0.99 0.97 0.96 565

新窗口打开| 下载CSV


通过实验结果可以发现,在恶意软件识别方面,提出的方法和专业反病毒软件Avira AntiVirus相比具有相似的准确率和误报率,且该方法具备对恶意软件行为的识别与分类能力,能够识别出软件发起的恶意行为的具体类别.

该方法还有2处不足. 1)随着Android恶意软件的发展,产生出了一些新型的恶意行为,如通过与电脑连接后,释放恶意负载感染用户电脑. 该方法目前无法准确地检测出这类新型恶意行为. 2)触发机制不够完善,无法触发一些机制较复杂的恶意行为,如用户进入某些UI界面、网页后才会触发的恶意行为,这些条件仅靠模拟点击难以触发.

在后续研究中,会针对上述情况,研究如何检测出这些新型恶意行为,提高恶意行为检测的全面性;研究更智能的触发方法,提高代码检测覆盖率.

4. 结 语

本文提出基于RF算法的Android恶意行为的识别与分类方法. 该方法对现有常见的Android软件的恶意行为进行定义和分类,描述了恶意行为的相关特征;实现了包含多种触发机制的触发系统,有效提高了动态检测代码覆盖率;通过Hook Native层函数与框架层API,动态采集软件的函数调用序列与调用时所传递的参数信息并生成行为日志,基于行为日志提炼软件行为特征集,使用随机森林算法对行为日志中的恶意行为进行识别与分类,得到包含恶意行为详细信息的检测结果. 在实验环节采用1 071个正常样本与1 000个恶意样本,与专业反病毒引擎Avira AntiVirus进行对比分析. 结果表明,利用提出的识别与分类方法可以有效地对Android平台的恶意软件进行识别,并且可以对恶意行为进行分类,相比于其他恶意软件检测方法输出更详细的检测结果. 下一步工作将研究如何检测出一些新型的恶意行为,以增加恶意行为检测的全面性;研究更加智能的动态检测触发机制,提高代码检测覆盖率.

参考文献

EGHAM. Gartner says worldwide sales of smartphones recorded 1st ever decline during the 4th quarter of 2017 [EB/OL].[2018-05-01]. https://www.gartnner.com/newsroom/id/3859963.

[本文引用: 1]

FENG Y, ANAND S, DILLIG I, et al. Apposcopy: semantics-based detection of Android malware through static analysis [C] // ACM Sigsoft International Symposium on Foundations of Software Engineering. Hong Kong: ACM, 2014: 576-587.

[本文引用: 1]

MOUHEB D, MOUHEB D, MOUHEB D, et al. Cypider: building community-based cyber-defense infrastructure for android malware detection [C] // Conference on Computer Security Applications. Atlanta: ACM, 2016: 348-362.

[本文引用: 1]

FELDMAN S, STADTHER D, WANG B. Manilyzer: automated Android malware detection through manifest analysis [C] // IEEE International Conference on Mobile Ad Hoc and Sensor Systems. Dallas: IEEE, 2015: 767-772.

[本文引用: 1]

LI J, SUN L, YAN Q, et al

Significant permission identification for machine-learning-based Android malware detection

[J]. IEEE Transactions on Industrial Informatics, 2018, 14 (7): 3216- 3225

DOI:10.1109/TII.2017.2789219     

TALHA K A, ALPER D I, AYDIN C

APK auditor: permission-based Android malware detection system

[J]. Digital Investigation, 2015, 13 (10): 1- 14

SUN L, LI Z, YAN Q, et al. SigPID: significant permission identification for android malware detection [C] // International Conference on Malicious and Unwanted Software. Fajardo: IEEE, 2017: 1-8.

[本文引用: 1]

MASSARELLI L, ANIELLO L, CICCOTELLI C, et al. Android malware family classification based on resource consumption over time [C] // International Conference on Malicious and Unwanted Software. Fajardo: IEEE, 2017: 31-38.

[本文引用: 2]

MALIK J, KAUSHAL R. CREDROID: Android malware detection by network traffic analysis [C] // ACM Workshop on Privacy-Aware Mobile Computing. Paderborn: ACM, 2016: 28-36.

ZULKIFLI A, HAMID I R A, SHAH W M, et al. Android malware detection based on network traffic using decision tree algorithm [C] // International Conference on Soft Computing and Data Mining. Cham: Springer, 2018: 485-494.

[本文引用: 2]

SUN Y S, CHEN C C, HSIAO S W, et al. ANTSdroid: automatic malware family behaviour generation and analysis for Android apps [C] // Australasian Conference on Information Security and Privacy. Cham: Springer, 2018: 796-804.

[本文引用: 2]

HUANG J, ZHANG X, TAN L, et al. AsDroid: detecting stealthy behaviors in Android applications by user interface and program behavior contradiction [C] // International Conference on Software Engineering. Zurich: ACM, 2014: 1036-1046.

DAMOPOULOS D, KAMBOURAKIS G, PORTOKALIDIS G. The best of both worlds: a framework for the synergistic operation of host and cloud anomaly-based IDS for smartphones [C] // European Workshop on System Security. Amsterdam: ACM, 2014: 6.

[本文引用: 2]

ENCK W, GILBERT P, CHUN B G, et al. TaintDroid: an information-flow tracking system for realtime privacy monitoring on smartphones [C] // Usenix Conference on Operating Systems Design and Implementation. Broomfield: ACM, 2014: 393-407.

[本文引用: 1]

ZHANG Y, YANG M, XU B, et al. Vetting undesirable behaviors in android apps with permission use analysis [C] // ACM Sigsac Conference on Computer and Communications Security. Berlin: ACM, 2013: 611-622.

[本文引用: 1]

中国反病毒联盟. 移动互联网恶意程序描述格式[EB/OL].[2018-05-01]. https://white.anva.org.cn/rel/file/ydwj.pdf.

[本文引用: 1]

WEI F, LI Y, ROY S, et al. Deep ground truth analysis of current android malware [C] // International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. Cham: Springer, 2017: 252-276.

[本文引用: 2]

/