cdxy.me
Footprints on Cyber Security and Python

卷积神经网络

卷积神经网络(Convolutional Neural Network, CNN)被广泛应用于图像识别。想象一个2维图像,按每一个像素切开,然后用一个N * N的窗口在图像上滑动采集特征。

png

在此基础上,我们可以使用神经网络来整合低中高不同层次的特征,并且使用端到端的多层次分类来构建更复杂的模型。

AlexNet[1] 模型结构

png

在图像识别领域,"窗口"在二维图像上滑动以采集某一片区域的特征;而在自然语言处理(NLP)领域,"窗口"通过滑过矩阵的一行来采集特征。

Text-CNN[2] 模型结构 png

Char-level CNN[3] 模型结构 png

安全领域的CNN

安全场景下的分类问题(如:恶意软件识别、恶意流量识别)可以复用成熟的图像识别、文本识别领域的既有研究成果,将安全问题转化为图像问题、文本问题。

  • 把二进制文件转为灰度图,通过纹理判定Malware,从而把恶意文件查杀问题转化为图像识别问题。

  • 代码、流量本身就是文本,套用一些粗粒度的NLP方法即可解决某些安全场景的分类需求。

对抗样本

对抗攻击(adversarial attack)与对抗样本(adversarial examples)指的是一些通用的能够欺骗上述神经网络的方法。此类方法通过对图像加以简单的像素修改,就可以在人眼察觉不到任何变化的前提下,使分类模型作出完全相反的判断。

在此领域,研究人员已提出多种使样本能够稳定绕过分类器的算法,如最经典的FGSM[4]。

pic

与渗透测试相同,对抗样本的生成方法同样分为"黑盒"、"白盒",好比黑盒的fuzz、扫描与白盒的代码审计。如果我们事先了解分类模型的结构,就可以使用更快捷有效的对抗方案。

常见的对抗方案按照已知信息可分为三种:

  1. Gradient-based attacks:已知梯度(白盒)。
  2. Score-based attacks:已知类标概率(黑盒)。
  3. Decision-based attacks:已知最终决策(黑盒)。

此类算法的Python库有:

  1. CleverHans,TensorFlow的子项目。
  2. foolbox,支持TensorFlow/PyTorch/Theano/Keras/Lasagne/MXNet等多种框架。
  3. AdvBox,中文demo,用例比较友好,源码较简洁。

基础攻防场景下的对抗样本

在图像识别场景下,对某个/某些像素的RGB值的轻微扰动不会影响人眼对图像的观察和判断。

但针对恶意代码、流量、Malware分类的对抗却无法复用这种"添加扰动"的方式,因为二进制文件的相邻byte之间是相互依赖的,改动任何一个byte都会破坏二进制文件的正常执行逻辑。在网络攻击payload中改动一个byte很可能会使攻击失效。

在此场景下,我们仍可以通过向样本中注入冗余信息的方式来误导分类器。这些冗余信息对(bin/script/payload)运行时的功能无影响,但能够影响AI模型。

Append Attack

针对Malware分类器,我们可以在文件的尾部添加一些训练好的特殊bytes来欺骗之[5]。

尾部bytes计算流程:

pic

首先对PE文件尾部append一块随机bytes,然后使用对抗算法(Fast Gradient Method, FGM)对整体embedding结果进行计算,但只更新append部分,最终对抗结果再由L2 distance metric近似映射回bytes,生成对抗样本。

pic

这种基于append的方法瓶颈有二:

  1. 尾部的扰动并不会破坏bin文件本身的恶意特征,这种扰动效率低下,生成有效的对抗样本需要的padding较长(正常改一两个byte的事,用尾部padding可能需要1000个byte)。
  2. CNN/RNN一般都有固定输入长度,当bin文件长度本身已经达到CNN模型上限时,此时我们padding的扰动在CNN的视野范围之外,起不到任何效果。

Slack Attack

相较append attack而言,更有效的方案是寻找样本(二进制程序/脚本文件/攻击流量)的"松散片段",并在这些位置中插入扰动。

pic

同样在对抗计算过程中,我们只对插入的部分进行更新,以保证程序的原有功能不被影响。

pic

局限

尽管append attack和slack attack两种模式能够将图像领域的对抗算法赋能给基础攻防,但此类方法建立在embedding操作可逆的基础上。

而对于基础攻防领域大量的“文本分类”问题。其embedding过程一般不可逆,我们尽管能够找到合适的slack、能够计算出对抗结果,但无法将结果转换为正常文本(下图中的mapping过程),也就是说无法生成新的payload。

现阶段的对抗样本方案仍只能对MalConv[6]这种end-to-end模型奏效。事实上,学界现有Malware分类方案除了图像流之外,还存在PE结构[7]、沙箱行为[8]、opcode[9]等多个维度的特征,而这些其他需要降维embedding的方法均不可逆。对于融合后的模型而言,单从图像维度进行扰动对抗成本较高,效果将十分有限。

Ref