作者:Adriel Cheng
论文工作:使用GAN来生成IP包层的网络流量,并提出了一种在CNN Gan中编码网络流量的的新方法。文章验证了GAN可以生成符合网络协议的网络流量,并且这些流量可以通过网络传输出去,得到响应。
1. 关于GAN:
生成对抗网络(Genarate Adversarail network,GAN)是一种通过两个神经网络相互博弈的方式进行学习的生成模型。生成对抗网络能够在不使用标注数据的情况下来进行生成任务的学习。生成对抗网络有一个鉴别器和生成器组成。生成器在真实空间随机取样作为输入,其输出结果需要尽量模仿训练集中的真实样本,鉴别器的输入则为真实样本或生成器的输出,其目的是将生成器的输出从真实样本中尽可能地分别出来。生成器和鉴别器相互对抗、不断学习,最终目的使得鉴别器无法判断生成器的输出结果是否真实。
(1) 鉴别器的目标是最大化分类的准确率,生成器G的目标是最小化鉴别器D的准确率。
定义生成器G和鉴别器D:
鉴别器函数:
生成器函数:
由于两者的估值是完全相反的,因此形成了零和博弈,在博弈中D和G极小化极大估值函数 V(G,D) 进行博弈:
(2) 零和博弈
零和博弈是指不管双方采取什么策略,最终双方的收益和为0,例如两人猜拳,围棋等对抗类的游戏。
零和博弈中的最大最小策略和最小最大策略
在这里把对一的双方记为 i 和 j
最大最小策略是:
最大最小策略指的是,对于 i 的每一个行动,j 都有一个针对行动,而 i 在这些最差的里边选一个最好的
最小最大策略是:
最小最大策略指的是,对于 i 每一个想要得到最好结果的行动,j 采取一个可以使其行动结果最差化的行动来应对。
在文中鉴别器的目标函数是最大化区分真实数据(来自训练集)和来自生成器的假数据的可能性。使用交叉熵来衡量损失,log(D(x)),D(x)的理想值为1表示真实标记的训练数据x;对于发生器G生成的假数据z,其损失为log(1-D(D(z)))。然后训练过程涉及最大化鉴别器的目标,通过其损失测量反馈回路来对真假数据进行分类。生成器的训练是由鉴别器的另一个反向出传播反馈回路驱动的,其目标是最小化生成器的假数据被检测到的成功率。
GAN的训练涉及到鉴别器和生成器相互博弈,类似零和博弈中的最小最大游戏。训练会持续进行直到GAN模型收敛,GAN模型收敛要满足:(1)鉴别器能够检测到真实数据和生成数据之间足够小的差异(2)生成器生成的数据能够让鉴别器几乎无法成功检测。当只满足其中一个条件时GAN模型视为失败。
在这里的最小最大策略中生成器为 i ,鉴别器为 j ,对于鉴别器能够检测到真实数据和生成数据之间足够小的差异的行为,生成器要生成能够让鉴别器几乎无法成功检测的数据。
图1 GAN中的目标函数和程序流
(3)关于GAN的更详细的介绍和参考文献
-
Ian Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, and Yoshua Bengio. 2020. Generative adversarial networks. Commun. ACM 63, 11 (November 2020), 139–144. Generative adversarial networks | Communications of the ACM
-
Mirza M, Osindero S. Conditional generative adversarial nets[J]. https://arxiv.org/abs/1411.1784
-
Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. https://arxiv.org/abs/1511.06434
-
Improved Techniques for Training GANs. https://doi.org/10.48550/arXiv.1606.03498
-
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks. https://arxiv.org/abs/1703.10593
-
StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks. https://arxiv.org/abs/1612.03242
-
Large Scale GAN Training for High Fidelity Natural Image Synthesis. https://arxiv.org/abs/1809.11096
-
A Style-Based Generator Architecture for Generative Adversarial Networks. https://arxiv.org/abs/1812.04948
-
Progressive Growing of GANs for Improved Quality, Stability, and Variation.https://arxiv.org/abs/1710.10196
2. 文章使用的GAN
文章使用卷积神经网络(CNN)GAN。CNN GAN使用CNN模型作为鉴别器和生成器。CNN GAN的鉴别器是用于监督分类的CNN,生成器模型则为”逆“CNN架构。生成器的工作与标准卷积、滤波和最大池化等不同,而是从高维向下采样数据到分类器预测值。生成器模型由多层反卷积运算层组成,这些反卷积操作获取地位数据向量,并将数据向上采样到高维数据中,直到产生所需的输出的大小。
图2 基于逆神经网络的生成器模型结构示例
使用28×28方阵对训练数据和GAN生成的流量输出进行编码,对CNN GAN流量生成器(PACGAN)进行原型化。对于鉴别器,实现了一个简单的CNN分类器模型。它由两个2d -卷积层组成,其中4×4过滤器的步长为2,其次是一个完全连接的层,最后是一个将网络数据包矩阵分类为真实或虚假的线性层。
该生成器由六层组成(图2)。前两层是完全连接的层,接收大小为1024的噪声向量,输出大小为12544的向量。然后使用一个重塑层来形成256个7×7方阵实例。然后应用两个反褶积层对这些矩阵进行上采样,使其大小达到14×14,然后达到所需的28×28输出大小的32个实例。最后的卷积层用于生成以编码矩阵形式生成的网络数据包流量的单个实例。
鉴别器和生成器均采用L2正则化,权重衰减为2.5×10-5,漏整流线性单元(leaky rectified linear unit, ReLU)作为激活函数,Adam优化的学习率为0.001,指数衰减率为0.5 beta1,损失测量使用梯度惩罚为1.0的Wasserstein损失函数。GAN的训练通常需要9,600到28,000次迭代,具体取决于生成的网络流量的类型(和复杂性)。
3. 使用GANs生成网络流量的框架
图3 GAN流量生成器框架
将网络中的真实流量数据和随机噪声提供给GAN框架,训练GAN使GAN鉴别器能够正确的从合成流量中鉴别真实的网络流量,使GAN生成器能够尽可能地生成真实的网络流量。训练完成后使用GAN生成器生成流量发送到Internet,并进行测试。
训练数据是通过创建真实流量和使用TCPDUMP捕获并过滤相关原始流量直接创建的。网络流量编码器是用Python实现的,以便与使用TensorFlow实现的GAN无缝集成。首先对GAN生成的网络数据包流量矩阵进行解码,以提取相关的网络数据包字节字段值。这些数据包字节字段然后被打包成网络数据包,并通过网络发送出去。
除了校验和之外,所有的数据包字节字段都是由GAN直接创建的。如果校验和字段(如IP、TCP或UDP校验和)可以从其他生成的数据包字节字段值中计算出来,则不需要满足不必要的生成错误。
4. 一种在CNN GAN 中编码网络流量的方式
最初,将训练和GAN生成的网络流量数据编码为n×n像素图像。每个网络数据包字节值都被简单地映射到相应方阵中的单个像素。数据包字节值序列沿着每一行像素依次映射,如下图。
图4 数据包字节一对一映射
使用这种初始流量表示产生的流量非常差。生成的数据包字节值的准确性低于30%,并且生成的数据包都没有获得成功的响应。
出现这种情况的原因有两个,一是这种编码方式经过GAN学习生成后会产生畸变,这对于GAN图像生成是可以接受的,但对于网络数据包来说这些畸变会导致生成的数据包不满足网络协议标准。二是没有考虑到网络流量数据也可能存在类似字节(和边界)的相似簇。所以提出了一种在CNN GAN中编码网络流量的方案。
编码方案的两个步骤:
(1)将单个的数据包字节转换为顺序值的子范围表示
(2)复制转换后的值并将它们多次映射到CNN输入方阵中。
图5 编码方案
(1)第一步先将每个数据包的十六进制数字分开。
公式:
例如:字节值为0x1F的字节,首先将0x1F分解为‘1’,‘F'。使用以16为基数的十六进制,数字 ’1‘ 将由 0x10 到 0x1F 表示,‘F’由 0xF0 到 0xFF 表示。转换后的值分配给CNN矩阵时使用范围的中点,即 0x18 和 0xF8 。这是为了允许CNN GAN在误差正负7的范围内还能重建与期望值对应的值。
对于一个数据包的字符串X
有转换后的数值元组Y
在GAN生成器的输出中可以执行反向操作提取实际的数据字符串。
(2)将转换后的值多次映射到CNN输入方阵中。
对于每个转化的字节数字,其值在输入的矩阵的行和列中都重复d次。
使用这种编码方案,生成的GAN输出旨在产生重复值的相似矩阵块。
包字节一对多映射伪码
Input
在每一行和每一列上重复的次数d
大小为n的方阵M,第i行第j列的元素z_i,j
Output
重复映射的数字值方阵
1.初始化 i=0,j=0
2.for 每个转换后的字节值y_k do
3. for M中的d行d列的下一个子矩阵 do
4. 子矩阵S_d*d 中的z_i,j=y_k
5. 增加i,j到下一个子矩阵的开始
6.将M中所有未分配的元素赋值为0
5. 实验结果及分析
文章通过生成网络流量并从网络获得的响应的成功率来衡量GAN的性能,定义成功率为成功发送的数据包数除以GAN生成的数据包总数。
将数据包发送到Internet并且成功收到有效的网络响应的请况认为数据包生成成功。
表中显示使用CNN GAN生成ICMP、DNS、HTTP流量的结果和几种流量混合生成的结果。可以看出的生成单种流量类型的成功率要比混合流量类型的成功率高。HTTP类型流量的成功率较低,这说明GAN生成器对于复杂的流量数据包组合的成功率不太稳定,但也是可以接受的。ping 类型数据包的字节错误比较多,这与GAN生成的有效字节值误差较大有关。同时,流量类型组合越复杂,GAN的训练时间就越长。
6. Conclusion
文章提出并制作了一个用于在IP包级生成流量的GAN模型,介绍了一种专门用于CNN GAN的网络数据编码技术。目前这种GAN生成模型只能生成非顺序的单个网络数据包,未来将会考虑使用递归神经网络GAN生成更多网络流量类型的穿行网络数据包。