卷积神经网络(Convolutional Neural Network, CNN)被广泛应用于图像识别。想象一个2维图像,按每一个像素切开,然后用一个N * N的窗口在图像上滑动采集特征。
在此基础上,我们可以使用神经网络来整合低中高不同层次的特征,并且使用端到端的多层次分类来构建更复杂的模型。
AlexNet[1] 模型结构
在图像识别领域,"窗口"在二维图像上滑动以采集某一片区域的特征;而在自然语言处理(NLP)领域,"窗口"通过滑过矩阵的一行来采集特征。
Text-CNN[2] 模型结构
Char-level CNN[3] 模型结构
安全场景下的分类问题(如:恶意软件识别、恶意流量识别)可以复用成熟的图像识别、文本识别领域的既有研究成果,将安全问题转化为图像问题、文本问题。
把二进制文件转为灰度图,通过纹理判定Malware,从而把恶意文件查杀问题转化为图像识别问题。
代码、流量本身就是文本,套用一些粗粒度的NLP方法即可解决某些安全场景的分类需求。
对抗攻击(adversarial attack)与对抗样本(adversarial examples)指的是一些通用的能够欺骗上述神经网络的方法。此类方法通过对图像加以简单的像素修改,就可以在人眼察觉不到任何变化的前提下,使分类模型作出完全相反的判断。
在此领域,研究人员已提出多种使样本能够稳定绕过分类器的算法,如最经典的FGSM[4]。
与渗透测试相同,对抗样本的生成方法同样分为"黑盒"、"白盒",好比黑盒的fuzz、扫描与白盒的代码审计。如果我们事先了解分类模型的结构,就可以使用更快捷有效的对抗方案。
常见的对抗方案按照已知信息可分为三种:
此类算法的Python库有:
在图像识别场景下,对某个/某些像素的RGB值的轻微扰动不会影响人眼对图像的观察和判断。
但针对恶意代码、流量、Malware分类的对抗却无法复用这种"添加扰动"的方式,因为二进制文件的相邻byte之间是相互依赖的,改动任何一个byte都会破坏二进制文件的正常执行逻辑。在网络攻击payload中改动一个byte很可能会使攻击失效。
在此场景下,我们仍可以通过向样本中注入冗余信息的方式来误导分类器。这些冗余信息对(bin/script/payload)运行时的功能无影响,但能够影响AI模型。
针对Malware分类器,我们可以在文件的尾部添加一些训练好的特殊bytes来欺骗之[5]。
尾部bytes计算流程:
首先对PE文件尾部append一块随机bytes,然后使用对抗算法(Fast Gradient Method, FGM)对整体embedding结果进行计算,但只更新append部分,最终对抗结果再由L2 distance metric近似映射回bytes,生成对抗样本。
这种基于append的方法瓶颈有二:
相较append attack而言,更有效的方案是寻找样本(二进制程序/脚本文件/攻击流量)的"松散片段",并在这些位置中插入扰动。
同样在对抗计算过程中,我们只对插入的部分进行更新,以保证程序的原有功能不被影响。
尽管append attack和slack attack两种模式能够将图像领域的对抗算法赋能给基础攻防,但此类方法建立在embedding操作可逆的基础上。
而对于基础攻防领域大量的“文本分类”问题。其embedding过程一般不可逆,我们尽管能够找到合适的slack、能够计算出对抗结果,但无法将结果转换为正常文本(下图中的mapping过程),也就是说无法生成新的payload。
现阶段的对抗样本方案仍只能对MalConv[6]这种end-to-end模型奏效。事实上,学界现有Malware分类方案除了图像流之外,还存在PE结构[7]、沙箱行为[8]、opcode[9]等多个维度的特征,而这些其他需要降维embedding的方法均不可逆。对于融合后的模型而言,单从图像维度进行扰动对抗成本较高,效果将十分有限。
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.