恶意代码检测--已看梳理

静态检测技术:

  优点:可以提供测试环境更安全、速度更快。

  缺点:容易受到包装器和恶意代码混淆技术、部分反拆卸技术的影响,导致静态方法无效。

  主要方法:

    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进 行 交 互,因此 Zhan gM[ 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 是j ava 源 码 编 译后生成的j ava字节码文 件,是 最 终 用 来 被 虚 拟 机 Dalvik 加 载和运行的可执行 Android 文件。对 classes.dex 文件反编译, 根据反编译的程序即可生成函数调用图, 其中节点表示函数,边表示函数之间的调用关系,有向边 也称弧,边的始点称为弧尾,终点称为弧头,一条弧表示弧尾 的节点函数调用弧头的节点函数。 

具有语法性的特征:考虑可执行程序的语法结构(限制较多,当前多使用具有语义性的特征)

原文地址:https://www.cnblogs.com/yvlian/p/11432376.html