Webshell安全检测篇(1)-基于流量的检测方式

一、 概述

笔者一直在关注Webshell的安全分析,最近就这段时间的心得体会和大家做个分享。

Webshell一般有三种检测方式:

  1. 基于流量模式
  2. 基于agent模式(实质是直接分析webshell文件)
  3. 基于日志分析模式

Webshell的分类笔者总结如下:

前段时间由于工作的需要完成了一个Webshell检测系统,根据当时的需求写了一篇关于使用基于Agent模型和基于日志分析模型来检测服务器上的文件是否是Webshell的文章,原文可以参见:

http://www.sec-un.org/ideas-like-article-espionage-webshell-method.html

二、 基于流量的webshell检测思考

在研究了上述两种模型的检测之后就考虑一直考虑在网络流量上实现Webshell分析和检测。毕竟要实现Agent模型和日志分析模型需要的成本太大不仅要考虑兼容性问题还需要考虑性能及安全性的问题,而如果采用流量型检测的话成本和部署难度会减小很多。

要实现通过网络流量检测Webshell首先就需要对流量进行“可视化”还原,“可视化”的方法可以借鉴目前市场上一些成熟的框架来实现这里就不再多解释我们主要讨论在Webshell被上传到服务器上及Webshell被访问这两个过程中网络流量中的payload特征来实现Webshell检测。

三、 上传过程中的Payload

我们知道正常的网站在有需要的情况下通常会允许上传一些“无害”的文件但是不会允许上传以脚本文件形式存在的文件例如:PHP、ASP、JSP等,而Webshell就是以这种脚本文件的形式存在并且被服务器解析的。在上传过程中虽然不会出现一些攻击payload。但是要向服务器上传文件所以也会产生一些和上传相关的Payload。下面我们讨论一下常见的两种上传的Webshell的形式即上传“大马”和“小马”。

3.1 直接上传Webshell

这种方式通过POST直接上传一个Webshell文件或者经过简单的变形然后上传到服务器上形式如:

2009-02-10 06:32:58 W3SVC77065997 8.8.8.8 POST /lesson_manage/upload/40/ASP.asp – 80 – 118.122.124.103 Mozilla/4.0+compatible;+MSIE+6.0; 200 0 0

从上面这条日志中能够发现如下关键特:POST upload ASP.asp 200 通过这几个关键特征的就能够确定ASP.php是一个疑似Webshell文件。

3.2 上传一句话Webshell

在不能直接上传Webshell的情况下入侵者通常会上传一个“小马”以协助完成上传“大马”或者上传一句话Webshell并配合一个客户端实现控制服务器,这里我们也不讨论如何上传“小马”以及一句话Webshell。我们只讨论如何利用“小马”来上传“大马”。

这种方式的特殊点在于不是文件在流量中传送而是一个参数在流量中传送,所以方式既可能是GET也可能是POST,我们来看下面一个真实的例子:

在上述截图中我们不难发现有很多关键特征和方法。

四、 访问过程中的Payload

由于Webshell是被制作用来控制服务器或者窃取机密信息的要实现这些能力攻击者就必须向Webshell发送一些控制指令从而操作Webshell,在控制指令中通常包含特征明显的攻击payload。我们来观察一下如下几种payload:

上图中显然是Webshell正在试图连接网站的数据库,并且攻击者使用的是POST的方式向Webshell提交连接参数。

我们再看一个由“菜刀”远程控制“菜刀马”并向菜刀马发出的指令:

从上图中看出“菜刀”使用了base64的方式加密了发送给“菜刀马”的指令,通过分析我们能看住其中的两个关键参数z1和z2:

我们轻松的就能解密它使用的base64密文,解密出的结果为:

显然通过解密之后特征就尤为明显了,通过检测和提取这种具有攻击倾向的payload之后可以被用来进行Webshell的深度分析。基于上述思路而形成的流量分析引擎可以被嵌入到现有的网关型设备或云上并实现Webshell的深度分析。

一个系统或工具好不好用,用户具有最大的话语权,如何深入用户内心,去做一款好的webshell检测工具或系统,笔者就一些认知思考,请见后续

相关文章《Webshell安全检测篇(2)-深入用户的内心

[via@守望者实验室]