paper—Generic Black-Box End-to-End Attack Against State of the Art API Call Based Malware Classifier

目录

摘要

一、引言

二、背景和相关工作

三、方法

3.1基于黑盒API调用的恶意软件分类器

3.2基于黑盒API调用的恶意软件分类器攻击

四、实验评估

4.1数据集

4.2恶意软件分类器性能

 4.3攻击性能

 4.4 RNN模型的可转移性

五、GADGET:端到端攻击框架描述

5.1对抗性示例功能验证

5.2处理API参数

5.3处理混合分类器和多种特征类型

六、结论和今后的工作


摘要

在本文中,我们提出了一种针对基于API调用的机器学习恶意软件分类器的黑盒攻击,重点是生成结合API调用和静态特征(例如可打印字符串)的对抗序列,这些特征将被分类器错误分类,而不会影响恶意软件的功能。我们证明,由于RNN变量、前馈DNN和传统机器学习分类器(如SVM)之间的可转移性原理,这种攻击对许多分类器都是有效的。我们还实现了GADGET,这是一个软件框架,可以在不访问恶意软件源代码的情况下,使用提议的攻击将任何恶意软件二进制文件转换为恶意软件分类器未检测到的二进制文件。

一、引言

在本文中,我们演示了一种规避的端到端攻击,生成一个恶意软件二进制文件,可以在不被机器学习恶意软件分类器检测到的情况下执行。

API调用通常用于描述程序的行为,是分类器的常见输入选择,只有API调用序列才能给出每个API调用的上下文和正确含义。

在本文中,对抗性示例是一个恶意API调用序列,最初正确分类,在扰动(不影响恶意软件功能)后,分类器将其分类为良性(一种形式的规避攻击)。

 为API序列.vs.为图像生成对抗性示例区别:

  • API序列由长度可变的离散符号组成,而图像表示为具有固定维数的矩阵,且矩阵的值是连续的。
  • 在对抗性API序列中,必须验证恶意软件的原始功能是否完好无损。

本文的贡献如下:

  • 实现一种新的端到端黑盒方法,为许多最先进的机器学习恶意软件分类器生成对抗性示例。
  • 实现了GADGET规避框架,在不访问恶意软件源代码的情况下,生成了一个具有干扰特征的新的恶意软件二进制文件,从而可以验证恶意功能是否完好无损。
  • 将攻击扩展到基于多特征(例如静态和动态特征)的恶意软件分类器。
  • 关注RNN变体的可转移性原理。

二、背景和相关工作

对抗示例的可迁移性针对一个模型制作的对抗性示例对其他模型有效。本文中,针对代理模型生成的相同对抗性示例对黑盒模型和其他类型的分类器都有效。

模拟攻击(mimicry attacks)中,攻击者能够编写恶意攻击代码,模仿系统调用对良性代码的跟踪,从而逃避检测。提出了几种方法:

  • 伪装攻击(Disguise attacks)——仅通过修改系统调用的参数,使良性系统调用产生恶意行为。
  • 无操作攻击(No-op Attacks)——添加语义操作,没有效果的系统调用,或具有不相关效果的系统调用,例如打开不存在的文件。
  • 等价攻击(Equivalence attack)——使用不同的系统调用序列来实现相同(恶意)效果。

对抗性示例的研究可以形式化为最小化问题使x的类别不同于x+r类别,且r最小

由分类器f正确分类的输入x受到干扰,因此产生的对抗性示例x+r 仍在输入域D中,但被分配了与x不同的标签。(错误分类)

三、方法

3.1基于黑盒API调用的恶意软件分类器

由于API调用序列可能很长(我们数据集中的一些样本有数百万个API调用),由于GPU内存和训练时间的限制,不可能一次对整个序列进行训练。因此,我们使用了一种滑动窗口方法:每个API调用序列被划分为带有m尺寸的窗口。依次对每个窗口执行检测,如果任何窗口被归类为恶意,则整个序列都是恶意的。

我们对每个API调用类型使用one-hot编码,以应对sklearn实现决策树和随机林的局限性。每个分类器的输出都是二进制的(被检查的代码是否恶意)。

3.2基于黑盒API调用的恶意软件分类器攻击

所提出的攻击分为两个阶段:

  • 使用目标分类器作为黑盒模型创建代理模型(基于雅可比矩阵的数据集扩充),
  • 通过可转移性属性,生成具有代理模型白盒访问权限的对抗性示例,并将其用于攻击黑盒模型。

算法1:代理模型训练f^

在每次迭代中,我们向每个现有样本添加一个合成示例。代理模型数据集大小为\left | X_{t} \right |=2^{t-1}\left | X_{1} \right |

算法2:对抗序列生成

一个对抗性样例是分类器将一系列API调用分类为恶意,而这些API调用被添加的API调用扰乱,因此修改后的序列将被错误分类为良性为了防止破坏代码的功能,我们不能删除或修改API调用;我们只能添加额外的API调用

D是可用功能的词汇表,攻击是在n个API调用的\left \lceil l/n \right \rceil个窗口上顺序执行的。⊥是串联操作,随机选择i。sign(Jˆf(wj)[f(wj)])给出了我们必须扰动API调用序列的方向,以降低分配给恶意类f(x)的概率,从而改变API调用序列的预测标签。

四、实验评估

4.1数据集

数据集包含500000个文件250000个良性样本和250000个恶意软件样本)。

  • 我们有勒索软件家族,如Cer-ber, Locky, Ramnit, Matsnu, Androm, Upatre, Delf, Zbot, Expiro, Ipamor。
  • 以及其他类型的恶意软件(worms, backdoors, droppers, spyware, PUA, and viruses),每个都有相同数量的样本,以防止预测偏向大多数类别。

使用Virus Total标记数据集,这是一种在线扫描服务,包含60多种不同的安全产品。基本事实是,

  • 恶意样本是指60种产品中有15种或15种以上阳性(即恶意软件)分类的样本。
  • 良性样本是指无阳性分类的样本。为防止数据集出现假阳性污染,省略了所有1-14个阳性样本。

Cuckoo Sandbox(一种常用的恶意软件分析系统)中对每个样本运行两分钟。我们解析了Cuckoo Sandbox生成的JSON文件,并提取了被检查代码在执行过程中生成的API调用序列(只关注API调用)。

恶意软件分类过程的概述:

为了减轻数据集的污染,我们使用了两种对策:

  • 应用YARA规则来查找试图检测Cuckoo Sandbox等沙盒程序的样本,并忽略了所有此类样本。
  • 只考虑了超过15个API调用的API调用序列,忽略了检测到VM并退出的恶意软件。

最终,训练集大小为360000个样本,验证集大小为36000,测试集大小为36000。所有集合在恶意和良性样本之间保持平衡。

4.2恶意软件分类器性能

  • 将最大输入序列长度限制为m=140  API调用,并用零填充更短的序列,零代表one-hot编码中的空API。
  • 较长的序列被分成多个API调用窗口,每个窗口依次被分类。如果任何窗口是恶意的,则整个序列都被认为是恶意的。
  • 所有分类器的输入是one-hot编码中m=140 API调用类型的向量,使用314bit,因为我们的数据集的布谷鸟报告中有314个受监控的API调用类型。
  • 输出为二进制分类:恶意或良性。

LSTM体系结构的概述如图2(a)所示。

对所有神经网络分类器使用Keras实现后端使用TensorFlowXGBoost和Scikit-Learn用于所有其他分类器。用于训练的损失函数是二进制交叉熵。对所有的神经网络都使用了Adam优化器

分类器还具有以下特定于分类器的超参数:

模型超参数设置
DNN由128个神经元组成的两个完全连接的隐藏层,每个神经元都有ReLU激活,退出率为0.2
CNN-1D

ConvNet有128个输出滤波器,步长为1,1D卷积窗口大小为3,ReLU激活,然后是一个全局最大池1D层和一个由128个神经元组成的完全连接层,ReLU激活,退出率为0.2

RNN、LSTM、GRU、BRNN、BLSTM、双向GRU

一个128单元的隐藏层,对于输入和循环状态退出率为0.2

线性SVM和逻辑回归分类器

正则化参数C=1.0和L2范数惩罚

随机森林分类器

使用10个具有无限最大深度的决策树和基尼准则选择最佳分割

梯度增强决策树多达100个决策树,每个决策树的最大深度为10
深度LSTM和BLSTM

两个128单元的隐藏层,每一层的输入和循环状态退出率为0.2

我们使用准确率来衡量分类器的性能:

符号含义
TP(真阳性true positive)恶意样本被黑盒分类器分类为恶意
TN(真阴性true negative)良性样本被黑盒分类器分类为良性
FP(假阳性false positive)良性样本被黑盒分类器分类为恶意
FN(假阴性false negative)恶意样本被黑盒分类器分类为良性

分类器的性能如表1所示。准确度是在测试集上测量的,该测试集包含36000个样本。

 4.3攻击性能

为了衡量攻击的性能,我们考虑了两个因素:攻击有效性和攻击开销

  • 攻击有效性(attack effectiveness)是目标分类器在测试集中检测到的恶意软件样本数,目标分类器错误分类了算法2生成的对抗序列。

 

  • 攻击开销attack overhead)是指通过算法2添加到目标分类器,成功检测到的恶意软件样本中,API调用数的平均百分比,目的是通过黑盒模型将修改后的样本分类为良性(因此仅针对成功的攻击计算):l 代表API调用序列的长度

选择了一个包含64个单元的GRU代理模型,还为代理模型使用了不同的优化器(ADADELTA而不是Adam)。在实现中,使用了CleverHans库

表2中规定了所提出的攻击的性能(三次运行的平均值)。

 4.4 RNN模型的可迁移性

本文涉及两种可转移性:

  • 对手可以针对代理模型制作对抗性示例,代理模型的架构和超参数与目标模型不同,同一个对抗性示例可以针对这两种模型,
  • 针对一种目标分类器类型制作的对抗性示例可能适用于不同类型的目标分类器。

两种形式的可转让性评估如下:

  • 如4.3所述,我们使用了GRU代理模型。然而,如表2所示,即使黑盒分类器不是GRU,攻击有效性也很高。即使黑盒分类器是GRU,超参数(例如单元数和优化器)也是不同的。
  • 针对RNN变体设计的攻击;然而,我们对其进行了测试,发现该攻击对前馈网络和传统机器学习分类器都有效,如表2的最后六行所示。因此,我们的攻击对所有恶意软件分类器都有效。

五、GADGET:端到端攻击框架描述

为了验证攻击者可以使用所提出的方法(第3节)创建端到端攻击,我们通过可转移性框架实现了GADGET:生成Api对抗性通用示例。这是一个端到端攻击生成框架,它获取一个黑盒子分类器(第3节中的f)作为输入,一个初始代理模型训练集(算法1中的X1)和一个恶意软件二进制文件来规避f,并输出一个修改后的恶意软件二进制文件,其API调用序列被f误分类为良性,在过程中生成代理模型(算法1中的ˆf)。

GADGET包含以下组件:

  • 用Python实现算法1和2,使用Keras和TensorFlow后端,
  • 一个C++包装器,用于包装恶意软件二进制文件,并在运行时修改其生成的API调用序列,
  • 一个Python脚本,用上述包装器包装恶意软件二进制文件,使其准备好部署。这些组件如图3所示。

在不破坏功能的情况下添加API调用。通过添加带有效参数的无操作API调用来实现API添加,例如,从有效文件中读取0字节。

实现通用框架。通用框架的要求是:

  • 无法访问恶意软件源代码(只能访问恶意软件二进制可执行文件),
  • 相同的代码适用于每个对抗性示例:不应编写对抗性示例特定代码。

为了满足上面两个要求:

  • 我们在恶意软件代码和实现API调用的操作系统动态链接库(例如kernel32.dll)之间使用代理代码从外部包装恶意软件二进制文件,
  • 包装代码将算法2生成的恶意软件二进制文件的对抗序列作为配置文件获取。

5.1对抗性示例功能验证

为了自动验证不会损害修改的恶意软件的功能,我们在修改前后在Cuckoo Sandbox监控中监控了每个样本。当比较API类型、返回值和API调用顺序时,如果修改后的API调用序列与修改前相同,则我们将修改后的示例定义为功能保留,但添加的API调用除外,该API调用的返回值应始终为成功值。我们发现所有18000个修改过的样本都是功能性保留的。

其中一个不在训练集中的家庭是WannaCry勒索软件。这使得它成为手动分析GADGET输出的绝佳选择。

  • 首先,我们通过布谷鸟沙盒运行该样本,并记录其API调用。4.2中提到的LSTM恶意软件分类器,成功检测到它是恶意的。
  • 然后,我们使用GADGET生成一个新的WannaCry变体,为该变体提供包含算法2生成的对抗序列的配置文件。
  • 我们再次在布谷鸟沙箱中运行修改后的WannaCry二进制文件,并将记录的API调用序列提供给同一个LSTM恶意软件分类器,该二进制文件与我们的框架和配置文件一起打包。
  • 这一次,恶意软件分类器的分类是良性的,尽管恶意功能仍然存在:文件仍由新的二进制文件加密,正如布谷鸟沙盒快照和API调用序列所示。
  • 这意味着提议的攻击是成功的,端到端的,没有破坏WannaCry的功能。

5.2处理API参数

我们现在修改攻击,以避开分析参数的分类器。为了表示API调用参数,我们使用了MIST。

MIST(恶意软件指令集)是恶意软件受监控行为的表示,针对使用机器学习的行为分析进行了优化。每个API调用都转换为一条指令。每个指令都有不同级别的信息。

  • 第一级对应于受监视的API调用的类别和名称。
  • 以下指令级别包含不同的参数块。

这种安排背后的主要思想是将“噪音”元素移动到指令的末尾,而区分模式则保留在指令的开头。我们使用了MIST 2级。我们使用Cuckoo2Mist将布谷鸟沙箱报告转换为MIST。为了处理MIST参数,我们通过以下方式修改了攻击:

  • 我们不是对每个API调用类型进行one-hot编码,而是对每个唯一的[API调用类型,MIST级别2参数]组合进行one-hot编码。

5.3处理混合分类器和多种特征类型

我们的攻击可以通过两个阶段扩展到处理混合分类器:

  • 使用算法1创建包含所有特征的组合代理模型,
  • 使用代理模型通过专门的攻击轮流攻击每个特征类型。如果对某个特征类型的攻击失败,我们将继续攻击下一个特征类型,直到目标模型实现良性分类,或者直到所有特征类型都被攻击(未成功)。

使用PE文件中的可打印字符串作为静态特征,因为它们通常被用作最先进的混合恶意软件分类器[9]的静态特征,尽管可以使用任何其他可修改的特征类型。字符串可以用来静态识别加载的DLL和调用的函数,识别修改过的文件路径和注册表项等。我们的混合分类器体系结构如图2(b)所示:

  • 动态分支,包含140个API调用的输入向量,每个API调用都经过one-hot编码,插入到128个单元的LSTM层,以及sigmoid激活函数,退出率为0.2用于输入和循环状态。
  • 静态分支,一个包含20000个布尔值的输入向量:对于整个数据集中最常见的20000个字符串中的每一个,它们是否出现在文件中。该向量被插入两个完全连接的层中,其中有128个神经元,一个ReLU激活函数,退出率为0.2。

这两个分支的256个输出被插入到一个具有sigmoid激活功能的完全连接的输出层中。因此,分类器的输入是一个包含140个one-hot编码API和20000个布尔值的向量,输出是恶意或良性分类。

在数据集上训练,仅使用动态分支(图2(a))的分类器达到92.48%。在测试集上,仅使用静态分支的分类器的准确率达到96.19%,使用两个分支的混合模型(图2(b))达到96.94%的精度,这意味着使用多种特征类型可以提高精度

六、结论和今后的工作

结论

  • 演示了一种通用的黑盒攻击,针对基于API调用序列的恶意软件分类器生成对抗序列。
  • 创建了GADGET框架,展示了对抗序列的生成可以以一种通用的方式端到端完成,而无需访问恶意软件源代码。
  • 最后,我们证明了这种攻击是有效的,即使在分析参数或使用多种特征类型时也是如此。

展望:针对此类攻击的防御机制和应对此类机制的攻击修改。

  • 检测对抗性示例,
  • 使分类器抵抗对抗性攻击。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值