本文内容源自Sanya Chaba等人的学术论文《Malware Detection Approach for Android systems Using System Call Logs》。
基于签名的静态检测技术广泛应用于安卓平台的恶意应用检测。该方法主要是提取签名数据并与病毒等恶意软件样本的签名进行比对,这种方法不能检测出未知的恶意应用。研究人员提出一种新的基于系统调用日志+机器学习算法的方法进行安卓恶意软件检测。
背景
恶意软件的分类主要有:病毒、蠕虫、木马、广告软件、犯罪软件、攻击工具等。
研究人员已经建立了两种恶意软件检测的方法。
一是静态分析,研究人员在不运行恶意软件的情况下执行恶意软件。静态分析中用到的技术包括反编译、模式识别、解密等。因为未知的恶意应用因为使用混淆、加密等技术会使签名不同,所以静态分析方法不能识别未知的恶意软件。
二是动态分析,动态分析方法可以检测应用的行为,比如网络访问、运行时发送短信和打电话等。动态分析是在沙箱环境下运行的,这样可以防止恶意软件感染真实的运行环境。
恶意软件检测
因为安卓本身加入了一些新的特性,加上手机本身的一些限制,用传统方法进行手机恶意软件检测很难保证成功率和效率。
研究人员提出一种使用系统调用日志进行恶意软件检测的方法。该方法一共分为三步,
1. 生成系统调用日志。2. 卡方 (Chi-square)过滤,并生成数据集。3. 利用机器学习算法进行检测。
研究人员手机了66个应用的系统调用个日志信息,生成的系统调用日志数据集中记录了每个应用的19个特征。多特征融合能增加检测的精确度。研究人员使用的机器学习算法有朴素贝叶斯算法、随机森林算法和随机下降梯度算法(Stochastic Descent Gradient Algorithm)。机器学习的结果会输出到Weka软件中进行分析。
注:Weka(Waikato Environment for Knowledge Analysis)是来之新西兰怀卡托大学的一款开源软件,主要是数据挖掘方面的一些算法的集合。
系统调用日志生成
首先,要安装沙箱模拟器Genymotion来运行每个应用,每个应用运行5分钟左右来观察应用想行为。系统生成系统调用日志的命令是strace,Python脚本的运行流程图为:
应用卡方 (Chi-square)过滤算法
用每个应用的系统调用日志创建数据集,数据集包含系统调用信息,有没有系统调用有1/0来表示。算法1如下图所示,算法复杂度为O(n)。
数据集创建后,为了改善检测的精确度,需要对提取的特征进行过滤,过滤的算法使用的卡方Chi square算法。算法2就是用来实现卡方过滤机制的算法。
研究人员从结果中挑选了18个特征,并加入到恶意软件检测的特征中。
机器学习算法
创建的数据集作为3个机器学习算法的输入。机器学习算法有朴素贝叶斯算法、随机森林算法和随机下降梯度算法(Stochastic Descent Gradient Algorithm)
下图是朴素贝叶斯分类的事件流。
输入到随机森林算法中后,数据集会被划分为随机的子集,然后每个子集会有一个决策树。根据这些结果,把决策树聚合在一起。这样就可以检测未知或恶意的应用样本的了。
实验结果
机器学习算法的结果会输出到Weka中进行分析,分析结果如图所示,朴素贝叶斯分类算法的正确率为93.75%,随机森林分类算法的正确率为93.84%,SGD算法正确率为95.5%。
结论
文章提出了一种利用系统调用日志进行恶意软件检测的方法,在生成了应用的系统调用日志之后,使用了卡方算法对特征进行过滤,然后使用朴素贝叶斯、随机森林、随机下降梯度算法三种机器学习算法进行检测。实验结果说明,检测的正确率很高,SDG算法的检测正确率大于95%。
领取专属 10元无门槛券
私享最新 技术干货