静态检测技术:
优点:可以提供测试环境更安全、速度更快。
缺点:容易受到包装器和恶意代码混淆技术、部分反拆卸技术的影响,导致静态方法无效。
主要方法:
n-gram字节代码作为特征用于检测野外恶意可执行文件;(n-g表达式是指n序列中相邻的元素,而这些元素可以是字节、指令或其他信息软件的功能)
挖掘windows中可执行文件的结构特征;
恶意软件二进制文件可视化为灰度图像,使用图像处理技术可视化和分类恶意软件;
从恶意软件程序中提取结构信息作为属性函数调用图(Kong等人将样本进行反汇编,并从汇编代码中生成样本的函数调用图。对于每个函数,提取6种类型的特征。针对每一类特征,采用判别距离度量学习算法进行聚类,最后利用权值组合得到检测模型。恶意代码静态方法容易受到包装器和恶意代码混淆技术的影响;部分反拆卸技术,导致静态方法无效。)
动态检测技术:
优点:可以提供测试环境更安全、速度更快。
缺点:容易受到包装器和混淆技术的影响,在分析之前通常需要外壳解密,并进行标准化处理。
主要方法:
opcodes n-gram
API调用序列(Nair等人通过对[18]恶意代码及其变体API调用序列进行动态分析,从这种恶意代码中提取共享API调用短序列作为签名,可以实现对同类恶意代码的检测。Chen和Fu[19]通过对恶意代码的动态分析得到API调用序列,API调用短序列遍历API调用具有相同的长度,然后将这些短序列放入向量中,作为恶意代码的签名。Firdausi等人[20]提出了一种动态行为恶意代码检测方法,该方法监控样本的系统调用,然后将系统调用报告转换为向量空间模型。该方法采用两种特征提取方法:(1)用二进制0或1表示特征值;(2)用系统调用的频率表示特征值。通过使用多种机器学习分类算法对两种特征进行处理,使系统调用频率特征表示取得稍好效果。Ahmed等人通过在动态API调用序列中挖掘时空信息来进行恶意代码检测。空间信息是指API调用的参数和返回值的统计,包括均值、方差、熵、最小值和最大值。时间信息是指API调用序列的传输概率。以上的动态检测方法使用的是系统调用序列的固定长度,但是很难确定序列的短长度是否合理,即使是一个最优的长度值,也会丢失大量的语义信息,即另一个序列的长度)
由于恶意代码需要实现自身的功能需要借助操作系统提供的API完成,而API的调用序列可以表示恶意代码的行为以及涉及的语义信息。API调用序列分为静态和动态的调用序列,静态调用序列不需要运行程序的前提下获得文件导入表或者反汇编文件中的API调用序列,动态调用序列即需要在虚拟机运行程序中利用调试等技术获得与系统交互的API调用序列。获得API调用信息作为特征,使用分类算法进行检测,最后达到了较高的精度。然而,由于恶意代码会隐藏导入表API的调用,使得无法获得全部API调用信息,最终导致静态API序列作为特征检测恶意代码的效率不高,但恶意代码需要完成自身功能及时隐藏导入表API调用,也会与操作系统中的API进行交互,因此ZhangM[4]将可疑文件置于虚拟机中运行动态获得API序列,并计算API序列和正常文件的距离作为特征进行检测。动态获得API调用序列的特征进行检测技术中,要获得特征就必须运行恶意代码,导致开销过大,而对于某些能够检测到虚拟机存在环境的病毒无能为力,并且一些恶意代码采用了相关行为层的混淆技术,导致动态提取API调用序列失败。
图(软件控制流程图、数据流程图、系统调用图,函数调用图,然后通过相似性测量的检测,数据挖掘和机器学习的方法来实现恶意代码)(26 Karbalaie等人提出了一种基于调用图的恶意代码挖掘系统检测方法;该方法首先将系统调用序列转换为图)
函数调用图是编译过程对程序中函数调用关系的一种静态描述,其中节点表示函数,边表示函数之间的调用关系,由于程序的功能性主要由库函数和系统调用来决定,因此函数调用图能为程序的实际行为提供静态的有效近似,是程序的结构化表示形式,对于基于源码或二进制码的局部软件变形具有鲁棒性,函数调用图通过IDAPro这种成熟的交互式反汇编工具生成。
FCG捕获程序的调用关系,其中的每个顶点代表一个本地函数。对于每个本地函数,我们首先将其转换为中间语言,然后从中提取六种类型的属性。它们包括操作码(每个操作码的出现频率),API(调用每个库API函数的次数),内存(在此函数中进行的内存读写操作次数),IO(数量)I/O读写操作),寄存器(每个寄存器的读写操作次数)和Flag(每个文件的更改次数)。于每种属性类型,我们将其表示为与本地函数关联的特征向量。
混合检测技术
生物免疫检测技术
提高分类准确率,降低FN,不增加负载。
2014 Drebin Effective and Explainable Detection of Android Malware in Your Pocket:
集合了很多特征,使用机器学习方法分类。
CCS(CA)-2014-Semantics-Aware Android Malware Classification Using Weighted Contextual API Dependency Graphs:
基于语义的,behavior graph,
Fan et al. - 2016 - Frequent Subgraph Based Familial Classification of Android Malware:
TDSC(JA)-2016-MADAM Effective and Efficient Behavior-based Android Malware Detection and Prevention:
看不懂a
DroidDetector: Android Malware Characterization and Detection Using Deep Learning
mali是介于Java代码和Dalvik字节码之间的一种中间语言。许多同学可能知道,编写Android APP通常使用Java语言,Java编译之后得到dex文件,给Dalvik虚拟机执行。在Android逆向时,为了更方便地对Dalvik字节码进行理解或修改,引入了一种中间语言即Smali。Java代码、Smali代码、Dalvik字节码的关系类似于C代码、汇编代码、机器码的关系。 Smali语法十分简单,易于理解,通常对APP的重打包修改也是在Smali语言的层面上进行。有关Smali语法的具体规则这里不做过多介绍,大家可自行搜索资料。我们可以使用smali、baksmali工具实现Smali代码与dex文件的转换。
在安全应用程序中注入恶意程 序 主要由以下步骤构成,第一步对其进行反汇编;第二步在 反汇编后的安全应用程序中注入恶意代码,加入的应用程序的 功能和恶意攻击的代码的内容有关;第三步将被改写过的安全应用程序重新打包并签名。
要提取函数调用图需在第三方网站上下载APK文件,对APK文件进行解压,META-INF为存放签名;信息文件res目录存放资源文件,classes.dex是java源码编译后生成的java字节码文件,是最终用来被虚拟机Dalvik加载和运行的可执行Android文件。对classes.dex文件反编译,根据反编译的程序即可生成函数调用图,其中节点表示函数,边表示函数之间的调用关系,有向边也称弧,边的始点称为弧尾,终点称为弧头,一条弧表示弧尾的节点函数调用弧头的节点函数。