28

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

 4 years ago
source link: http://skysec.top/2020/01/09/Paper-Summary-CNN-Webshell-Malicious-Web-Shell-Detection-with-Convolutional-Neural-Network/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

本篇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
    JVNvuu6.png!web

    数据输入层/ Input layer

    在HTTP Requests流量中,文本没有空格进行分割,所以想要实现在文本分类上应用比较好的技术,首先需要进行词切分。
    paper中指出,诸如中国菜刀的流量中,有如下特征:其对于每个参数字符串,有很多部分被 \& 分割开,同时在流量中还有许多诸如: ( ) { } / \ @ 的符号,这些符号也可用于文本的分割。
    BvIzqia.png!web 例如如上中国菜刀流量,可以利用特殊符号将其分割成如上文本。然后将分割后的文本进行如下操作:
    对于给定的一个单词i,给其对应的一个向量:
    yUZfm2R.png!web 其中d为向量空间的维数。那么对于一个由n个单词组成的句子,它可以表示为如下矩阵:
    feUjIbN.png!web 这样一来,长度为n的句子,可以转化为大小为n d的矩阵。同时,每一条句子的长度都规定为n,若不足n个单词的句子的会使用零向量进行补齐。如此一来,就可以得到n d的矩阵输入。

    卷积计算层/ CONV layer

    在这一个层,需要做局部关联,每个神经元看做一个滤波器filter:
    reyUj2i.png!web 此处h是滑动窗口的宽度,在当前环境里就是每次h个单词。此处使用的是1D卷积,即使用宽度为h的滑动窗口对每行进行卷积:
    RrYVbee.png!web 对于矩阵:
    FVnyUnm.png!web 我们可以得到卷积结果为:
    eqQRJfB.png!web 其中b是偏差,f是非线性校正函数。对于整个句子,其卷积结果是一个特征向量:
    jIjMb26.png!web 这一层我们可以简单理解,从输入的单词矩阵中提取features。

    ReLU激励层 / ReLU layer & 池化层 / Pooling layer

    在结束了卷积后,需要在feature map上选出最大值 ZZZFJvE.png!web 来作为和特定滤波器W对应的特征。
    Max pooling的思想大致如下:
    vqQzYrv.png!web 对于每个2 2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2 2窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。
    那么利用池化层获取的结果串联起来,得到特征向量Z:
    YrUR7ru.png!web 再交由ReLU进行激活操作:
    bqaMJnB.png!web 激励函数一般采用ReLU(The Rectified Linear Unit/修正线性单元),原因是其收敛快,求梯度简单,但较脆弱。
    在这一层中,我们可以简单理解成从众多的features中选出最有影响力的features,用以压缩数据和参数的量。
    67b2iyF.png!web

    全连接层 / FC layer

    两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:
    fMr6v2Z.png!web 在本层中,加入了Dropout来抑制过拟合问题。dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。每次做完dropout,相当于从原始的网络中找到一个更瘦的网络,如下图所示:
    YBz6Nzy.png!web 经过softmax函数后,结果输出是一个概率分布: 每个元素都是非负的, 并且所有元素的总和都是1。
    softmax log-loss函数:
    AZZvyq6.png!web 在本层中,我们可以理解为,在提取出众多的features后,我们需要做一个整合,对其进行权重划分,最后再进行判别。

    数据实验

    在实验部分,收集了如下数据集:3691个webshell,3990个正常样本。
    实验中首先分析了工具word2vec的作用,word2vec生成的向量可用于度量词之间的相似性,我们从下图中可以看出,恶意操作词(webshell中常见的词)彼此非常接近,但正常的词则分散很远。
    MRjMFn7.png!web 同时为了验证模型的性能,其与几种经典的分类器做了对比:
  • 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。
    3QZniaj.png!web 同时考虑到向量空间的维度有显著的影响,可测试不同维数来评价其性能:
    JbEbAvr.png!web 在维度200时,实现了最佳的性能。但是由于训练时间随维度增加而增加,还要考虑到效率问题。
    同时实验也证明了模型训练过程可以快速收敛:
    yU3MFb7.png!web

    后记

    本篇paper基于word2vec和CNN提出了一种新型检测WebShell的技术,同时和其他经典分类器相比,取得了最好的性能。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK