常见的webshell的流量特征和检测思路
一、webshell概述
Webshell客户端是一种连接Webshell后门,用于攻击者与服务器之间通信的程序。
二、Webshell流量监测思路
1、特征分析:分析流量特征中的关键特征,判断是否存在webshell流量特征;
2、请求模式:分析webshell流量的请求模式,可以通过分析URL,参数和头部信息来判断是否存在webshell流量;
3、检测内容:通过分析流量中的关键字等特征,判断是否存在webshell流量特征;
4、字符集:分析流量中的字符集是否webshell流量关联;
5、加密算法:分析流量中的加密算法,判断是否存在webshell流量特征;
6、文件上传:分析流量中是否存在文件上传性质等性质,判断是否存在webshell流量特征;
7、恶意脚本:分析流量中是否存在恶意脚本,判断是否存在webshell流量特征;
三、常见国内外的几种webshell利用工具
1、菜刀
流量特征
菜刀流量特征概括:
首先请求体中传递的payload为base64编码,并且存在固定的,其次请求体中存在eval,base64等特征字符。最后传给cmd的这些流量字符中有自己的特征,1、都是系统命令;2、必须以分号结尾;3、数据包源一般是ip。
中国菜刀2011版本及2014版本各语言WebShell链接流量特征
(1)PHP类WebShell链接流量
其中特征主要在body中,将body中流量进行url解码后如下:
其中特征点有如下三部分,
第一:“eval”,eval函数用于执行传递的攻击payload,这是必不可少的;
第二:(base64_decode($_POST[z0])),(base64_decode($_POST[z0]))将攻击payload进行Base64解码,因为菜刀默认是将攻击载荷使用Base64编码,以避免被检测;
第三:&z0=QGluaV9zZXQ...,该部分是传递攻击payload,此参数z0对应$_POST[z0]接收到的数据,该参数值是使用Base64编码的,所以可以利用base64解码可以看到攻击明文。
注:
1.有少数时候eval方法会被assert方法替代。
2.$_POST也会被$_GET、$_REQUEST替代。
3.z0是菜刀默认的参数,这个地方也有可能被修改为其他参数名。
(2)JSP类WebShell链接流量:
该流量是WebShell链接流量的第一段链接流量,其中特征主要在i=A&z0=GB2312,菜刀链接JSP木马时,第一个参数定义操作,其中参数值为A-Q,如i=A,第二个参数指定编码,其参数值为编码,如z0=GB2312,有时候z0后面还会接着又z1=参数用来加入攻击载荷。
注:其中参数名i、z0、z1这种参数名是会变的,但是其参数值以及这种形式是不会变得,最主要就是第一个参数值在A-Q,这种是不变的。
(3)ASP类WebShell链接流量:
其中body流量进行URL解码后
其中特征点有如下三部分,
第一:“Execute”,Execute函数用于执行传递的攻击payload,这是必不可少的,这个等同于php类中eval函数;
第二:OnError ResumeNext,这部分是大部分ASP客户端中必有的流量,能保证不管前面出任何错,继续执行以下代码。
第三:Response.Write和Response.End是必有的,是来完善整个操作的。
这种流量主要识别这几部分特征,在正常流量中基本没有。
注:OnError Resume Next这个特征在大部分流量中存在,极少数情况没有。
中国菜刀2016版本各语言WebShell链接流量特征:
PHP类WebShell链接流量:
其中特征主要在body中,将body中部分如下:
这个版本中流量最大的改变就是将特征进行打断混淆,这也给我们识别特征提供一种思路。
其中特征点有如下三部分,
第一:“"Ba"."SE6"."4_dEc"."OdE”,这部分是将base64解码打断使用.来连接。
第二:@ev"."al,这部分也是将@eval这部分进行打断连接,可以识别这段代码即可。
第三:QGluaV9zZXQoImRpc3BsYXlf...,该部分是传递攻击payload,payload依旧使用Base64编码的,所以可以利用base64解码可以看到攻击明文来识别。
注:有少数时候eval方法会被assert方法替代。
JSP类WebShell链接流量:
该版本JSPwebshell流量与之前版本一样,
所以分析如上:该流量是WebShell链接流量的第一段链接流量,其中特征主要在i=A&z0=GB2312,菜刀链接JSP木马时,第一个参数定义操作,其中参数值为A-Q,如i=A,第二个参数指定编码,其参数值为编码,如z0=GB2312,有时候z0后面还会接着又z1=、z2=参数用来加入攻击载荷。
注:其中参数名i、z0、z1这种参数名是会变的,但是其参数值以及这种形式是不会变得,最主要就是第一个参数值在A-Q,这种是不变的。
ASP类WebShell链接流量:
其中body流量为:
2016版本流量这链接流量最大的变化在于body中部分字符被unicode编码替换混淆,所以这种特征需要提取出一种形式来,匹配这个混淆特征,比如“字符+%u0000+字符+%u0000”这种形式来判断该流量。
或者直接将这部分代码直接进行unicode解码,可以获取到如2011或2014版本的asp所示的流量。可以根据上一段特征来进行判断。
这种流量主要识别这几部分特征,在正常流量中基本没有。
2、蚁剑
蚁剑流量特征概述:
可以对流量进行加密、混淆。但是有些关键代码没有被加密,如:PHP中的ini_set;ASP中的OnError,response等,流量特征:使用bse64加密的payload,数据包存在以下base加密的eval命令执行,数据包的payload内容存在几个分段内容,分别都使用base加密,解密后可以看到相关的路径,命令等;
(1)蚁剑PHP类WebShell链接流量
其中body流量进行URL解码后为:
其中流量最中明显的特征为@ini_set("display_errors","0");这段代码基本是所有WebShell客户端链接PHP类WebShell都有的一种代码,但是有的客户端会将这段编码或者加密,而蚁剑是明文,所以较好发现。
(2)蚁剑ASP类WebShell链接流量
其中body流量进行URL解码后为:
我们可以看出蚁剑针对ASP类的WebShell流量与菜刀的流量很像,其中特征也是相同,如OnError ResumeNext、Response.End、Response.Write,其中execute在蚁剑中被打断混淆了,变成了拼接形式Ex"&cHr(101)&"cute,同时该流量中也使用了eval参数,可以被认为明显特征。
三、冰蝎
冰蝎流量特征概述:
是一款动态二进制加密网站管理客户端。主要用于配合服务端shell的动态二进制加密通信,适用于WAF拦截回显等场景,客户端的流量无法检测。
(1)冰蝎3.0
随着冰蝎的不断更新,功能越来越完善,到3.0已经具备了红队需要的各种功能,特别是反弹shell的msf和cs上线,以及自定义代码执行,灵活性很强。基本做到开箱即用且功能齐全,唯一的问题是,工具流行之后,webshell本体容易被查杀,需要做webshell本体的免杀。
由于冰蝎把类动态加载这个关键技术摆在台面上,在一段时间的研究后,Java内存马已经有了很多可用的思路,比如新增filter,只从内存操作,不依赖落地文件,就能访问到内存中的Webshell,这就解决了webshell本体免杀问题。 这种情况下冰蝎更新v3.0 beta7版本,增加了Java内存马功能,并且使用了更高级的Java Agent技术,通过hook Java进程中原本正常的类,实现内存马功能,并在beta8增加了内存马防查杀机制。
至此,冰蝎成为了一个完美的开箱即用的工具,本体内存马免杀,流量免杀,功能齐全,兼容性好,在连续几年的攻防演练中,成为最热门的工具。
(2)冰蝎4.0
在去年的攻防演练中,冰蝎更新了4.0版本,增加了webshell生成功能,可以完全自定义流量加密方法,对流量加密的灵活性又大大增加。
因此,目前在webshell工具领域,冰蝎独占鳌头。在去年的攻防演练中统计到的webshell有效攻击中,有80%都是使用的冰蝎或冰蝎变种,足以证明冰蝎的强大功能。
四、哥斯拉
哥斯拉流量特征概述:
哥斯拉:是基于流量、HTTP全加密的webshell工具;哥斯拉全部类型的shell 能绕过市面所有静态查杀;哥斯拉流量加密能绕过市面全部流量waf。