Webshell检测方法(二) - 嘶吼 RoarTalk – 回归最本质的信息安全,互联网安全新媒体,4hou.com

Webshell检测方法(二)

一叶飘零 技术 2020-02-14 09:34:32
收藏

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

Webshell检测方法(一)

前言

本篇paper来自ICMLC 2018,与前一篇文章《CNN-Webshell & Malicious Web Shell Detection with Convolutional Neural Network》出自同一学校,应该是之前工作的改进版。其对于webshell的检测也是主要集中于HTTP Requests检测。

背景知识

与2017年的paper《CNN-Webshell: Malicious Web Shell Detection with Convolutional Neural Network》不同,该工作改良了之前对HTTP Requests流量文本分割的方式。

根据之前的工作,通过符号\&进行分割后,每一个单词可以变为一个one-hot向量,对于一个长为L的序列,其可以得到一组one-hot向量:

2020-01-13-19-17-32.png

但这样是非常浪费时间的,不仅因为其是高维向量,并且忽略了单词与单词之间的关系。受到word embedding的启发,作者将one-hot向量转换成一个低维连续向量:

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

其可以通过one-hot向量左乘权重矩阵来实现:

2020-01-13-19-21-35.png

其中:

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

|V|是词汇表中唯一单词的数目。

对于矩阵M,其可以通过随机分配或学习具有一个隐藏层的网络来获得。在此作者通过输入一个词(一个one-hot向量)并输出下一个词(一个one-hot向量)来训练网络,以学习两个共现词之间的关系。同时经过实验,这样得到的矩阵M比随机分配具有更好的性能。

经过这样转换,之前的one-hot向量序列转换为如下矩阵:

2020-01-13-19-25-07.png

研究方法

众所周知,CNN可以通过卷积层和池化层,提取较为重要的features,而LSTM可以存储长期依赖关系,那么很自然的想到,可以将二者融合,用来处理webshell检测的问题。

2020-01-13-16-49-26.png![]2020-01-13-16-49-41.png

首先通过CNN的卷积,我们可以得到如下结果:

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

其中b是偏差,φ是非线性校正函数,n个滤波器为:

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

但是由于卷积层和池化层产生的结果是一个向量,并不能直接和LSTM进行结合,所以为了解决这个问题,作者将全局最大池替换为局部最大池,那么在t位置时,局部最大池的结果为:

2020-01-13-16-51-06.png

故此我们可以得到一组新的向量:

2020-01-13-16-52-18.png

此时:

2020-01-13-16-52-26.png

2020-01-13-16-52-32.png

那么此时,即可将gt序列输入LSTM,完成组合分类:

2020-01-13-16-44-43.png

对于CNN+LSTM的算法,输入单词维数为40,每个序列固定长度为56个单词。对于CNN,其具有100个宽度为5的滤波器和一个大小为5的本地最大池层,然后使用rate为0.9的dropout层来抑制过拟合。并将输出输入LSTM,而对于LSTM,其隐变量维度为100,其最后的输出同样连接到rate为0.9的dropout层。

数据实验

实验中使用的数据集为CSIC2010。在实验中,测试集中有超过36000个正常请求和25000个异常请求。异常请求包含大量的web攻击,如SQL注入、信息收集、文件泄漏、CRLF注入、XSS和参数篡改等。

同样的,实验中也将提出的算法与传统方法进行了比较,比较对象如下:

* Multinomial Naive Bayes (NB)

* Linear Support Vector Machine (Linear SVM)

* Neural Network (NN)

* k-Nearest Neighbour (kNN)

* Decision Tree (DT)

结果如下:

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

可以发现CNN+LSTM的算法取得了最好的性能。同时由于卷积网络中滤波器的数目和滑动窗口的宽度是关键参数,因此实验测试了不同数量的滤波器和滤波器宽度。结果如下:

2020-01-13-16-22-30.png

可以发现,对于滤波器数量,性能在100个时表现最好,而对于滤波器宽度,性能在5时达到高值,而后缓慢增长。

同时考虑到LSTM的关键参数是隐变量维度,所以实验对于不同维数也做了相应的测试,结果如下:

2020-01-13-16-25-04.png

可以发现维数在20~300这个区间内,LSTM的性能一直在提升,但是考虑到时间消耗会随维数上升而上升,所以需要权衡二者之前的关系,达到最佳性价比。

并且实验还测试了不同局部最大池大小对CNN+LSTM的性能影响,结果如下:

2020-01-13-16-28-56.png

可以发现,当本地最大池大小设置为3时,会取得最佳性能。

除此之外,针对于小规模的CSIC2010数据集,过拟合问题也是关注的一个点,实验使用dropout方法进行抑制拟合,并对其进行评估,结果如下:

2020-01-13-16-30-07.png

可以发现LSTM对于dropout rate有较大的变化,而CNN和CNN+LSTM方法更加具有鲁棒性,其在rate大于0.3后,性能缓慢增长。

最后,对于前文所提到的矩阵M的获取也是一个关键因素,实验使用了随机分配和机器学习两种方式进行比对测试,结果如下:

2020-01-13-16-32-40.png

不难发现经过机器学习后的模型拥有更好的性能。

后记

该工作将CNN和LSTM进行了结合,用于webshell检测,获得了不错的效果,同时分析了不同的因素对模型性能的影响,对后人工作具有一定的指导意义。

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

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

扫码支持

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

发表评论