欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Webshell检测方法(二)

来源:本站整理 作者:佚名 时间:2020-02-14 TAG: 我要投稿

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向量:

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

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

其中:

|V|是词汇表中唯一单词的数目。
对于矩阵M,其可以通过随机分配或学习具有一个隐藏层的网络来获得。在此作者通过输入一个词(一个one-hot向量)并输出下一个词(一个one-hot向量)来训练网络,以学习两个共现词之间的关系。同时经过实验,这样得到的矩阵M比随机分配具有更好的性能。
经过这样转换,之前的one-hot向量序列转换为如下矩阵:

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

![]

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

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

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

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

此时:


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

对于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)

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载