21

Paper Summary & Evaluating CNN and LSTM for Web Attack Detection

 4 years ago
source link: http://skysec.top/2020/01/13/Paper-Summary-Evaluating-CNN-and-LSTM-for-Web-Attack-Detection/
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来自ICMLC 2018,与前一篇文章《CNN-Webshell & Malicious Web Shell Detection with Convolutional Neural Network》出自同一学校,应该是之前工作的改进版。其对于webshell的检测也是主要集中于HTTP Requests检测。

Background

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

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

UZRvy2e.png!web

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

rUZNjyI.png!web

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

EzmiqmN.png!web

其中:

63UbAj7.png!web

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

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

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

N3AJrmm.png!web

研究方法

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

f2UvaeE.png!web7Jv6neV.png!web

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

YJnURrq.png!web

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

RVjMBbn.png!web

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

yquY3iJ.png!web

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

VBJf6b6.png!web

此时:

A7Jf6ju.png!webeQFRz2n.png!web

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

nqEvaeb.png!web

对于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)
    结果如下:
    U3mYve3.png!web 可以发现CNN+LSTM的算法取得了最好的性能。同时由于卷积网络中滤波器的数目和滑动窗口的宽度是关键参数,因此实验测试了不同数量的滤波器和滤波器宽度。结果如下:
    uQ36Rb6.png!web 可以发现,对于滤波器数量,性能在100个时表现最好,而对于滤波器宽度,性能在5时达到高值,而后缓慢增长。
    同时考虑到LSTM的关键参数是隐藏变量的维数,所以实验对于不同维数也做了相应的测试,结果如下:
    EjiAjiJ.png!web 可以发现维数在20~300这个区间内,LSTM的性能一直在提升,但是考虑到时间消耗会随维数上升而上升,所以需要权衡二者之前的关系,达到最佳性价比。
    并且实验还测试了不同局部最大池大小对CNN+LSTM的性能影响,结果如下:
    22amYbq.png!web 可以发现,当本地最大池大小设置为3时,会取得最佳性能。
    除此之外,针对于小规模的CSIC2010数据集,过拟合问题也是关注的一个点,实验使用dropout方法进行抑制拟合,并对其进行评估,结果如下:
    ZBZfQvm.png!web 可以发现LSTM对于dropout rate有较大的变化,而CNN和CNN+LSTM方法更加具有鲁棒性,其在rate大于0.3后,性能缓慢增长。
    最后,对于前文所提到的矩阵M的获取也是一个关键因素,实验使用了随机分配和机器学习两种方式进行比对测试,结果如下:
    fqMbEvB.png!web 不难发现经过机器学习后的模型拥有更好的性能。

后记

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK