一种安卓系统非正常程序的检测方法实证研究
2019-03-11李清炀
李清炀
一种安卓系统非正常程序的检测方法实证研究
李清炀
华东政法大学 刑事司法学院, 上海 201620
针对安卓系统非正常程序较多的现状,提出一种新的检测方法,结合了应用程序分类以及系统调用法,目的是提高安卓系统非正常程序检测的准确性。计算分类的数据采自谷歌商店,非正常程序样本采自安卓病毒共享库,通过系统调用值和阈值的计算对比,判断实验样本的正常性。实验结果表明:本文提出的方法能够准确检测出安卓系统中的非正常程序,有一定的推广价值。
安卓系统; 非正常程序; 检测; SMO
随着安卓应用软件的不断增多,非正常程序也在快速增长。安卓用户使用的第三方应用程序主要是从谷歌商店搜索、购买和下载的,但是谷歌商店的非正常程序检测机制存在一定的缺陷,使得程序安全性难以得到完全保障。非正常程序往往带有恶意攻击的目的,而且会产生变种,攻击手段也变得越来越丰富。当前关于安卓系统非正常程序检测使用较多的有静态法和动态法。静态法是依靠纯技术手段对检测目标的特征进行抽取和分析,无需运行目标软件;动态法则需要运行目标软件,通过动态分析对目标软件的行为进行检测。Shawn Powers用静态法抽取目标软件的特征样本,根据提前构建的函数调用表进行对比分析,结合分类法判断程序的正常与否[1]。但是静态法只能识别以往出现过的不正常程序特征,对于新型的不正常程序难以检测。Chanajitt等通过动态法记录目标软件的运行日志,利用日志信息对不正常程序进行检测,并用回归分析法以及决策树法分类不正常事件[2]。动态法会占用较多的手机系统资源,而且代码覆盖率并不高,经常有漏报现象出现。针对两种方法存在的局限性,本文提出了一种新型的检测方法,通过SMO算法进行分类学习,检测工作由远程服务器进行,并使用优化算法细分应用程序,最后调用系统数据实现非正常程序的准确检测。
1 安卓系统非正常程序的检测过程
1.1 安卓系统非正常程序的检测流程
本文检测安卓系统非正常程序的流程如图1所示。首先按照已经收集好的权限信息情况,对权限向量进行提取,采用SMO分类器实现分类学习,并构建分类模型,然后采集各类别中的应用程序调用频数,准确计算系统调用阈值。当新安装的应用程序开始运行时,会将程序权限信息发送给服务器,并在类别判定之后每隔1 min上传调用数据,计算出调用值的大小,并与调用阈值相对比,判断程序的正常与否,如果程序非正常,则整个监控过程结束。在10 min里面,如果没有发现非常行为,则可以定性为正常程序,整个监控过程结束。检测结果会反馈给用户,如果用户发现分类有误,还可以对分类进行修改,然后重新开始监控。
图 1 安卓系统非正常程序检测流程图
1.2 基于SMO算法的分类学习
在谷歌商店里,全部应用程序总共分成了26个大类别。本文通过Python脚本获取每一个大类别中一定数量程序的权限使用情况,同时结合AAPT提取训练集中的安卓显示文件,该文件为XML格式,在自动化分析下可以抓取相关的权限标签,得到每一个程序的权限使用情况。
程序1:读取安卓显示代码
假设当前的应用程序数量为个,任意一个程序的权限使用情况记录成:A(1,2,…136。A(1≤≤)为程序名称,136表示安卓系统根据字母表进行顺序排列的136个权限,如果程序使用该权限则记成1,否则记成0。尽管安卓应用程序的全部权限达到了136个,但这些权限并不会同时使用。据相关统计,安卓应用程序能够申请到的权限一般为10~25个[3]。Rajivkumar等在研究中证明了SMO算法对安卓应用程序权限分类有着较好的效果[4]。Elbert等采用了SMO以及其它三种算法,分别验证安卓应用程序的权限分类结果,实验结果证明SMO算法的查全率和准确率更高[5]。本文通过SMO算法进行分类学习,最终实现对安卓应用程序权限的准确分类。
假设训练数据为个,所有训练数据统计成:(1,1)(2,2),…(A,S),用A(1≤≤)代表权限使用情况,用S(1≤≤)代表分类标签,标签值用1或-1表示,其中1表示一类,-1表示另一类。通过SMO算法两两比较训练数据类别,按照程序权限进行分类学习,由此判断出权限类别。当应用程序新安装并运行时,程序权限使用情况会传给远程服务器,在服务器端分析处理之后,得出权限向量并进一步比较与确定。
图 2 Financial statistics应用程序系统调用频数
1.3 基于系统调用的安卓非正常程序检测
在Linux3.10内核中,系统调用达到了290个。按照Kirubavathi等的研究结果,对于安卓应用程序行为的反映,能够使用到的系统调用并不多[6]。为尽量提升结果的精确性,并且降低运算量,本文使用的系统调用有18个,包括文件打开和读取、子进程创建、可执行文件运行等系统调用。以Financial statistics财务管理应用程序为例,检测这一分钟内调用系统的频数,如图2所示。
程序2:获取系统调用的代码
Financial statistics表面是一款财务管理的应用程序,但非正常程序发布者可以利用该程序对用户隐私信息进行主动收集。根据图2显示的系统调用频数,I/O总控制函数(ioctl)调用数最高,超过了2000次。Gaviria等认为正常运行于Linux内核中的进程,系统调用频数相对比较稳定,但有非正常行为产生时,则系统调用频数会出现较大的波动[7]。本文使用的18个系统调用频数在正常情况下较稳定,但出现非正常行为时将导致频数改变。在基于SMO算法的分类学习之后,本文基于系统调用对安卓非正常程序进行检测。
第一步:计算每分钟内应用程序的系统调用权值:(S,R)=U×(1-(S,R))2(1)
在上式中,S(1≤≤18)代表第个系统调用;R(1≤≤26)代表谷歌商店根据英文字母顺序进行排列的第个类别;U(1≤≤18)代表第个系统调用的实际情况,如果已使用记成1,如果未使用记成0;(S,R)是系统调用的出现频率;(S,R)是1 min时间里产生的系统调用权值。
第二步:确定每一个类别下面系统调用的阈值。抽取训练集每一类别中个正常程序,在-1至(1≤≤10,Î) min里面连续操作,总耗时10 min,系统调用值计算如公式(2)所示,系统调用阈值计算如公式(3)所示。
对比分析系统调用值与系统调用阈值,如在10 min里面系统调用值≥系统调用阈值,则可以判断为非正常程序,10 min里面系统调用值<系统调用阈值,可以判断为正常程序。
2 实验分析
2.1 安卓系统应用程序分类结果与分析
本实验通过Python脚本抓取谷歌商店中不同类别下面的应用程序,抓取量为2096个,这些程序组合成训练集,在每个类别中的分布情况如图3所示。
通过Python脚本读取每个程序的安卓显示代码,分析出程序的权限向量,然后随机选择10个大分类,采用SMO分类器进行分类学习,结果如表1所示。
图 3 被抓取程序在每个类别中的分布情况
表 1 应用程序分类结果
根据应用程序分类结果,准确率和查全率都比较高,证明SMO分类器可以进行较好的分类学习。
2.2 安卓系统非正常程序检测结果与分析
本实验从谷歌商店选取与SMO分类学习相同的10个大分类,每一个分类选取20个程序,依次在安卓手机中安装,并对程序功能操作10 min,通过Python脚本分析系统调用数据,使用公式(3)计算系统调用阈值,结果如表2所示。
本实验从安卓病毒共享库中提取20个不正常样本,然后从谷歌商店中提取10个正常样本,分别在安卓手机中安装,通过Python脚本分析,并使用公式(2)计算10 min操作过程中的系统调用值,部分应用程序的非正常检测结果如表3所示。
表 2 系统调用阈值统计
表 3 部分应用程序非正常检测结果
3 讨论
从实验结果看,正确判断应用程序类别将对检测结果造成直接的影响。根据谷歌商店的分类,Financial statistics归属于财务分类,系统调用阈值为3.297,如果判断为交通运输类,则系统调用阈值为3.477,而Financial statistics系统调用值为3.386,则该程序会被判断为正常,由此造成了检测误判。只有先正确判断出程序类别,才能进一步进行检测,程序类别是决定检测准确率的主要因素。Coelho等提出一种基于系统调用的安卓系统非正常程序检测法,将系统调用事件分成正常和非正常两种,通过系统调用的频数信息抽取和计算,对比两种事件的相似度,由此判断程序正常与否[8]。Avuclu等认为安卓系统非正常程序检测需要以程序分类为基础,提出一种调用程序分类参数的方法,为非正常程序检测提供重要依据[9]。但这些方法都有一定的片面性,本文采用的检测法综合了程序分类和系统调用,对于安卓系统非正常程序检测有着更高的准确率。
4 结论
本文提出的一种安卓系统非正常程序检测方法,主要是以应用程序的分类为前提,同时结合系统调用法,通过安卓手机收集应用程序的权限信息以及系统调用数据,然后发送到远程服务器,由远程服务器按照权限信息实现应用程序的分类,以此为依据统计系统调用的频数,检测运行程序的正常与否。根据实验结果,本文提出的方法能够准确检测出安卓系统中的非正常程序。
[1] Powers S. Android Candy: A Virtual Android[J]. Journal of business logistics, 2017(6):14-25
[2] Chanajitt R, Viriyasitavat W, Raymond Choo KK. Forensic analysis and security assessment of Android m-banking apps[J]. The Australian journal of forensic sciences, 2018,50(4):1-17
[3] 徐林溪,郭帆.基于混合特征的恶意安卓程序检测方法[J].计算机工程与科学,2017,40(10):1837-1846
[4] Mente R, Bagadi A. Android Application Security[J]. Advances in computational sciences and technology, 2017,10(4):1207-1210
[5] Jan van Veldhuizen E. ESP8266 on the Elektor Android I/O Board Load new firmware yourself[J]. Elektor, 2018(1):100-104
[6] Kirubavathi G, Anitha R. Structural analysis and detection of android botnets using machine learning techniques[J]. International Journal of Information Security, 2018,17(2):153-167
[7] de la Puerta G, Borja JS. Using Dalvik opcodes for malware detection on android[J]. Logic journal of the IGPL, 2017,25(6):938-948
[8] Coelho R, Almeida L, Gousios G,. Exception handling bug hazards in Android[J]. Empirical software engineering, 2017,22(3):1264-1304
[9] Avuçlu E, Başçiftçi F. A new approach to minimize the loss of life after natural hazards by using Android operating system[J]. Natural Hazards, 2018,90(2):1005-1016
Empirical Study on Detecting Abnormal Procedures in Android Systems
LI Qing-yang
201620,
Aiming at the current situation that there are many abnormal programs in Android system, a new detection method is proposed, which combines application classification and system call method. The purpose is to improve the accuracy of the detection of abnormal programs in Android system. The classified data were collected from Google Store, and the abnormal program samples were collected from Android virus shared library. The normality of the experimental samples was judged by comparing the system call values and thresholds. The experimental results show that the method proposed in this paper can accurately detect abnormal programs in Android system, and has certain popularization value.
Android system; abnormal procedures; detection; SMO
TP391
A
1000-2324(2019)01-0150-04
10.3969/j.issn.1000-2324.2019.01.034
2018-07-20
2018-09-22
李清炀(1999-),男,在读本科,专业方向:计算机科学与技术. E-mail:1328526113@qq.com