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

Track-SSG   ·   发表于 2018-11-1   ·   漏洞文章

卷积神经网络

卷积神经网络(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的方法均不可逆。对于融合后的模型而言,单从图像维度进行扰动对抗成本较高,效果将十分有限。


    打赏我,让我更有动力~

    0 Reply   |  Until 2018-11-1 | 689 View
    LoginCan Publish Content
    返回顶部 投诉反馈

    掌控者 © 2016 - 2020. All Rights Reserved. 掌控者

    Powered by 掌控者