前言
本篇paper来自ICNCC 2017,论文中指出,本篇文章是第一篇将CNN应用到恶意webshell检测上的文章。其对于webshell的检测主要集中于HTTP Requests检测。
Background
Webshell对网络服务会产生巨大的恶意作用,攻击者将Webshell上传至受害者服务器,达到持久化控制的目的。而本篇paper旨在检测恶意webshell,防止攻击者利用webshell进行二次攻击。
作者将检测放在HTTP Requests中,主要对用户的GET请求和POST请求进行检测分析。考虑到CNN在文本分类上已经有重大突破,工具word2vec在text分类上已经有比较好的效果,同时HTTP Requests流量和文本内容很相似,可以尝试将文本分类上比较成熟的方法应用于webshell检测。
但比较不同的是,HTTP Requests内容不同于普通的文本,它包含了许多的特殊符号,因此不能简单将word2vec迁移至HTTP Requests流量检测。
实现方法
因此可设计如下CNN-webshell模型,并从4个层面进行分析:
- 数据输入层/ Input layer
- 卷积计算层/ CONV layer
- ReLU激励层 / ReLU layer & 池化层 / Pooling layer
- 全连接层 / FC layer
数据输入层/ Input layer
在HTTP Requests流量中,文本没有空格进行分割,所以想要实现在文本分类上应用比较好的技术,首先需要进行词切分。
paper中指出,诸如中国菜刀的流量中,有如下特征:其对于每个参数字符串,有很多部分被\&
分割开,同时在流量中还有许多诸如:( ) { } / \ @
的符号,这些符号也可用于文本的分割。
例如如上中国菜刀流量,可以利用特殊符号将其分割成如上文本。然后将分割后的文本进行如下操作:
对于给定的一个单词i,给其对应的一个向量:
其中d为向量空间的维数。那么对于一个由n个单词组成的句子,它可以表示为如下矩阵:
这样一来,长度为n的句子,可以转化为大小为nd的矩阵。同时,每一条句子的长度都规定为n,若不足n个单词的句子的会使用零向量进行补齐。如此一来,就可以得到nd的矩阵输入。卷积计算层/ CONV layer
在这一个层,需要做局部关联,每个神经元看做一个滤波器filter:
此处h是滑动窗口的宽度,在当前环境里就是每次h个单词。此处使用的是1D卷积,即使用宽度为h的滑动窗口对每行进行卷积:
对于矩阵:
我们可以得到卷积结果为:
其中b是偏差,f是非线性校正函数。对于整个句子,其卷积结果是一个特征向量:
这一层我们可以简单理解,从输入的单词矩阵中提取features。ReLU激励层 / ReLU layer & 池化层 / Pooling layer
在结束了卷积后,需要在feature map上选出最大值来作为和特定滤波器W对应的特征。
Max pooling的思想大致如下:
对于每个22的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个22窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。
那么利用池化层获取的结果串联起来,得到特征向量Z:
再交由ReLU进行激活操作:
激励函数一般采用ReLU(The Rectified Linear Unit/修正线性单元),原因是其收敛快,求梯度简单,但较脆弱。
在这一层中,我们可以简单理解成从众多的features中选出最有影响力的features,用以压缩数据和参数的量。全连接层 / FC layer
两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:
在本层中,加入了Dropout来抑制过拟合问题。dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。每次做完dropout,相当于从原始的网络中找到一个更瘦的网络,如下图所示:
经过softmax函数后,结果输出是一个概率分布: 每个元素都是非负的, 并且所有元素的总和都是1。
softmax log-loss函数:
在本层中,我们可以理解为,在提取出众多的features后,我们需要做一个整合,对其进行权重划分,最后再进行判别。数据实验
在实验部分,收集了如下数据集:3691个webshell,3990个正常样本。
实验中首先分析了工具word2vec的作用,word2vec生成的向量可用于度量词之间的相似性,我们从下图中可以看出,恶意操作词(webshell中常见的词)彼此非常接近,但正常的词则分散很远。
同时为了验证模型的性能,其与几种经典的分类器做了对比: - Naive Bayes (NB)
- k-Near Neighbour (kNN)
- Decision Tree (DT)
- Support Vector Machine (SVM)
- traditional Neural Network (NN) using the TF-IDF feature representation
所有的分类器都使用相同的feature。
同时考虑到向量空间的维度有显著的影响,可测试不同维数来评价其性能:
在维度200时,实现了最佳的性能。但是由于训练时间随维度增加而增加,还要考虑到效率问题。
同时实验也证明了模型训练过程可以快速收敛:后记
本篇paper基于word2vec和CNN提出了一种新型检测WebShell的技术,同时和其他经典分类器相比,取得了最好的性能。