本周主要进行了K-S检验,字节编码(结合nprint和ESBNN)的改造,有一些不成熟的有意思的结论和想法。

K-S检验

论文《Efficient Cyber Attack Detection in Industrial Control Systems Using Lightweight Neural Networks and PCA》的基本思路是将sensor收集到的feature经过K-S*检验,stable feature经过DFFT基于频域提取频域特征和unstable feature一起进行模型训练。

模型结构如下图:

image-20211201223712992

因此K-S检验是必要的第一步,K-S检验是用来检验两组样本的数学分布。

参考:K-S检验的数学理解在:K-S检验数学理解

在mawilab 10w数据集中对IPv4 header:len这个属性进行K-S检验。用K-S检验测试训练集9w条和测试集合1w条。使用了python中的scipy.stats的ks_2samp函数。

下面是CDF和PDF图,左边的图片是使用了train data和test data中的良性流量集合;右边的图片是使用了train data中的良性流量集合和test data(好坏流量都有)。结论是K-S statistic明显翻倍了很多,意味着良性流量和恶性流量包在len这个属性上的分布是不一样的。

17184e27-88f8-46e8-9e4e-b93ef89d0989c95501d5-d7de-4a75-9309-9424f7f1b4fb

进一步实验验证:

换数据集:ids2017 里面的SSL_Regression 20w

train data:18w test data:2w

f8909698-8bfa-48f1-87e9-4b53a1fe19a4294604c4-6e7f-4488-af4e-86ac1dbf677f

换特征:IPv4 header:proto

image-20211201232035683

47c86f0b-ce82-4aba-8d23-ad251f58bef76e57d745-4edb-4b3a-983b-66ec3c86c7b9

但是我这样的验证,还是不能很有力的说明我的结论。接下来,我先说一下我的字节编码改造思路,在最后的思考中提出应该如何大规模的验证这个结论,并且给予应用。

改造字节编码

结合《EBSNN: Extended Byte Segment Neural Network for Network Traffic Classification》和《nprint》的思路。

EBSNN: Extended Byte Segment Neural Network for Network Traffic Classification

参考链接:关于EBSNN的拓展字节编码方式具体细节可以看Byte Segment Neural Network for Network Traffic )方便理解。

EBSNN提出了过拟合的概念,字节编码是用了前64个字节,这64个字节中会包含下图的一些属性,这些属性在EBSNN中被放弃了,看到这里我也疑惑不解,于是我进行了实验验证。

image-20211201232830690

举个例子,ESBNN是这么处理raw data的。

image-20211125002414543

于是,我在textCNN代码的基础上,放弃了Ethernrt II header和IPV4 header,python代码如下:

image-20211201233048373

结果:

image-20211201233232982

可以验证放弃某些字段并不影响F1值。

nprint的方法是:

image-20211119111347833

思考

我所思考的新的字节编码方法是:

  • 在nprint基础上,在新字节编码中放弃一些ECBNN中提到的过拟合的字节;
  • 在ESBNN基础上,添加ICMP的features;
  • 关于对抗攻击,我的想法是既然保留了物理意义,不妨就进行PSO替换的算法,模仿之前的TrafficManipulator进行实际字节的替换。可以写一个配置文件,自主选择替换哪些有物理意义的字节。
  • 关于FGPM,它其实可以理解成一种优化方法,根据投影加快单词替换速度的,进而加快对抗攻击的速度。可加可不加。
  • 在K-S检验的基础上,我们可以添加一个自动特征选择模块,依据stastic值,过滤掉某些和训练集分布相同(stastic值很小的)的特征,再进行训练。这样会提高训练效率。

image-20211202000016143

还有些没考虑到的问题:

  • 我不知道packet level 该怎么给字节编码加时间序列
  • 有没有必要添加自动特征选择模块以提高精度和训练效率