这篇文章用马尔可夫链建模API序列,依据恶意和正常的APP虽然可能调用相同的API序列,但是调用顺序不同。文章用的是纯静态分析的方法.
《MAMADROID: Detecting Android Malware by Building Markov Chains of Behavioral Models》NDSS 2017
方法:四步走
第一步拿到apk用soot等工具反编译出Call Graph;第二步从Call Graph中遍历出API序列,同时抽象成package/family序列;第三步马尔可夫链建模;第四步二分类。
一、提取Call Graph
拿到这个APP的apk,然后用静态分析工具Soot和FlowDroid提取出API Call Graph。例如图2是一个恶意软件的代码段:
二、提取序列
首先识别出图上所有的起始节点,然后遍历整个图找到所有的执行路径,从而得到了这个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:
得到一个 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。算法的输入就是第三步中得到的特征向量。
实验效果
这篇文章呼吁和引导的接下来的方向也是解决模型的老化问题。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!