sky's blog

Paper Summary & CNN-Webshell & Malicious Web Shell Detection with Convolution...

字数统计: 1,500阅读时长: 5 min
2020/01/09 Share

前言

本篇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的技术,同时和其他经典分类器相比,取得了最好的性能。
点击赞赏二维码,您的支持将鼓励我继续创作!
CATALOG
  1. 1. 前言
  2. 2. Background
  3. 3. 实现方法
    1. 3.1. 数据输入层/ Input layer
    2. 3.2. 卷积计算层/ CONV layer
    3. 3.3. ReLU激励层 / ReLU layer & 池化层 / Pooling layer
    4. 3.4. 全连接层 / FC layer
  4. 4. 数据实验
  5. 5. 后记