【异常检测】恶意软件检测:MaMaDroid (DNSS 2017)

这篇文章用马尔可夫链建模API序列,依据恶意和正常的APP虽然可能调用相同的API序列,但是调用顺序不同。文章用的是纯静态分析的方法.

《MAMADROID: Detecting Android Malware by Building Markov Chains of Behavioral Models》NDSS 2017

方法:四步走

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ffQF92sX-1642753194945)(C:UserslichiAppDataRoamingTyporatypora-user-imagesimage-20201207145941706.png)]

文章其实用的并不是API,而是用的API所属的family或者package,如上图,一个API,属于一个类;类属于package;package属于family。作者也是有苦衷的,静态分析得到的API太多了,下面详细说。

第一步拿到apk用soot等工具反编译出Call Graph;第二步从Call Graph中遍历出API序列,同时抽象成package/family序列;第三步马尔可夫链建模;第四步二分类。

一、提取Call Graph

拿到这个APP的apk,然后用静态分析工具Soot和FlowDroid提取出API Call Graph。例如图2是一个恶意软件的代码段:

【异常检测】恶意软件检测:MaMaDroid (DNSS 2017)

二、提取序列

首先识别出图上所有的起始节点,然后遍历整个图找到所有的执行路径,从而得到了这个APP的API序列。

理想很丰满,但是由于文章是从静态分析提取出的API序列,44k个app,一共提取出了超过1000万API,这意味着词典大小是1000万,转移矩阵有1000万个节点。因此没办法只能将API归类,把API抽象到对应的package或者family。

package一共有340种,包括:Android 243、Google API 95、 自定义 1(很可能包含恶意动作)、 模糊 1。

family一共有11种,包括自定义和模糊。

这样就把API抽象归类,词典大小就降下来了,提取出序列如图4:

【异常检测】恶意软件检测:MaMaDroid (DNSS 2017)

得到一个 v o c a b _ s i z e × v o c a b _ s i z e vocab_size times vocab_size vocab_size×vocab_size大小的转移矩阵,这个APP的特征向量就是这个转移矩阵。可以用PCA来降维,可以更好。

之后的分类器都基于马尔可夫链提取出来的特征向量。

四、分类

用四个分类算法:Random Forests、1-Nearest Neighbor(1-NN)、3-Nearest Neighbor(3-NN)、SVM。算法的输入就是第三步中得到的特征向量。

实验效果

【异常检测】恶意软件检测:MaMaDroid (DNSS 2017)

这篇文章呼吁和引导的接下来的方向也是解决模型的老化问题。

来源:chad_lee

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月18日
下一篇 2022年1月18日

相关推荐