Webshell检测方法(一) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

Webshell检测方法(一)

一叶飘零 技术 2020-02-06 10:00:00
867783
收藏

导语:最近在学习webshell检测技术,看了一些科研性的文章,所以有了这个系列的文章。

前言

本篇paper来自ICNCC 2017,论文中指出,本篇文章是第一篇将CNN应用到恶意webshell检测上的文章。其对于webshell的检测主要集中于HTTP Requests检测。

背景知识

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

2020-01-10-11-06-09.png

数据输入层/ Input layer

在HTTP Requests流量中,文本没有空格进行分割,所以想要实现在文本分类上应用比较好的技术,首先需要进行词切分。

paper中指出,诸如中国菜刀的流量中,有如下特征:其对于每个参数字符串,有很多部分被\&分割开,同时在流量中还有许多诸如:( ) {  }  /  \  @的符号,这些符号也可用于文本的分割。

2020-01-09-10-40-29.png

例如如上中国菜刀流量,可以利用特殊符号将其分割成如上文本。然后将分割后的文本进行如下操作:

对于给定的一个单词i,给其对应的一个向量:

2020-01-10-10-38-45.png

其中d为向量空间的维数。那么对于一个由n个单词组成的句子,它可以表示为如下矩阵:

2020-01-10-10-39-55.png

这样一来,长度为n的句子,可以转化为大小为n*d的矩阵。同时,每一条句子的长度都规定为n,若不足n个单词的句子的会使用零向量进行补齐。如此一来,就可以得到n*d的矩阵输入。

卷积计算层/ CONV layer

在这一个层,需要做局部关联,每个神经元看做一个滤波器filter:

2020-01-13-10-19-44.png

此处h是滑动窗口的宽度,在当前环境里就是每次h个单词。此处使用的是1D卷积,即使用宽度为h的滑动窗口对每行进行卷积:

2020-01-13-11-15-57.png

对于矩阵:

2020-01-13-10-20-49.png

我们可以得到卷积结果为:

2020-01-13-10-21-07.png

其中b是偏差,f是非线性校正函数。对于整个句子,其卷积结果是一个特征向量:

2020-01-13-10-22-11.png

这一层我们可以简单理解,从输入的单词矩阵中提取features。

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

在结束了卷积后,需要在feature map上选出最大值2020-01-13-10-34-16.png来作为和特定滤波器W对应的特征。

Max pooling的思想大致如下:

2020-01-13-13-51-33.png

对于每个2*2的窗口选出最大的数作为输出矩阵的相应元素的值,比如输入矩阵第一个2*2窗口中最大的数是6,那么输出矩阵的第一个元素就是6,如此类推。

那么利用池化层获取的结果串联起来,得到特征向量Z:

2020-01-13-10-36-05.png

再交由ReLU进行激活操作:

2020-01-13-10-37-24.png

激励函数一般采用ReLU(The Rectified Linear Unit/修正线性单元),原因是其收敛快,求梯度简单,但较脆弱。

在这一层中,我们可以简单理解成从众多的features中选出最有影响力的features,用以压缩数据和参数的量。

2020-01-13-16-38-34.png

全连接层 / FC layer

两层之间所有神经元都有权重连接,通常全连接层在卷积神经网络尾部。也就是跟传统的神经网络神经元的连接方式是一样的:

2020-01-13-13-53-43.png

在本层中,加入了Dropout来抑制过拟合问题。dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。每次做完dropout,相当于从原始的网络中找到一个更瘦的网络,如下图所示:

2020-01-13-10-47-14.png

经过softmax函数后,结果输出是一个概率分布: 每个元素都是非负的, 并且所有元素的总和都是1。

softmax log-loss函数:

2020-01-13-10-51-32.png

在本层中,我们可以理解为,在提取出众多的features后,我们需要做一个整合,对其进行权重划分,最后再进行判别。

数据实验

在实验部分,收集了如下数据集:3691个webshell,3990个正常样本。

实验中首先分析了工具word2vec的作用,word2vec生成的向量可用于度量词之间的相似性,我们从下图中可以看出,恶意操作词(webshell中常见的词)彼此非常接近,但正常的词则分散很远。

2020-01-09-10-40-14.png

同时为了验证模型的性能,其与几种经典的分类器做了对比:

* 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。

2020-01-13-11-05-05.png

同时考虑到向量空间的维度有显著的影响,可测试不同维数来评价其性能:

2020-01-13-11-10-35.png

在维度200时,实现了最佳的性能。但是由于训练时间随维度增加而增加,还要考虑到效率问题。

同时实验也证明了模型训练过程可以快速收敛:

2020-01-13-11-27-56.png

后记

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

webshell检测的工作大多基于机器学习,由于在这个领域本人也是新人,正在学习。如文中有错误,还请大佬们多多斧正!

本文为 一叶飘零 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务