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

admin 2022年6月27日09:15:02评论22 views字数 2393阅读7分58秒阅读模式


一、 概述

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

webshell一般有三种检测方式:

  • 基于流量模式

  • 基于agent模式(实质是直接分析webshell文件)

  • 基于日志分析模式

Webshell的分类笔者总结如下:

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

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

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


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




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

在研究了上述两种模型的检测之后就考虑能否在网络流量上实现Webshell分析和检测。毕竟要实现Agent模型和日志分析模型需要的成本太大不仅要考虑兼容性问题还需要考虑性能及安全性的问题,而如果采用流量(网关)型检测的话成本和部署难度会减小很多,所以有了此文基于流量(网关型)的Webshell检测方法。
要实现通过网络流量检测Webshell首先就需要对流量进行“可视化”,“可视化”的方法有很多可以借鉴目前市场上一些成熟的框架来实现这里就不再多述。我们主要讨论在Webshell被上传到服务器及Webshell在访问过程中网络流量中产生的payload来实现Webshell检测。



三、 上传过程中的Payload

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


3.1、上传“大马”

这种方式通过POST直接上传一个Webshell文件或者经过简单的变形然后上传到服务器上,如下面的一个例子:
2009-02-10 06:32:58 W3SVC77065997 XXXX.XXXX.XXXX.XXXX POST /lesson_manage/upload/40/ASP.asp – 80 – XXXX.XXXX.XXXX.XXXX Mozilla/4.0+compatible;+MSIE+6.0; 200 0 0
从上面这条访问记录中能够发现如下关键特:POST upload ASP.asp 200 通过这几个关键特征的就能够分析出ASP.php可能是一个疑似Webshell。

3.2、上传“小马”

在不能直接上传“大马”Webshell的情况下黑客通常会上传一个“小马”以协助完成上传“大马”或者上传一句话Webshell并配合一个客户端实现控制服务器,这里我们也不讨论如何上传“小马”以及一句话Webshell。我们只讨论如何利用“小马”来上传“大马”。
这种方式的特殊点在于不是一个完整的文件在网络中中传输而是一个存在于HTTP协议中的一个参数在网络中传输,传输参数的方式既可能是GET也可能是POST,我们来看下面一个真实的例子:

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

在上图中我们不难发现这显然是使用一句话木马客户端通过POST的形式正在上传一个Webshell的脚本代码,并且将内容写入一句话木马相同目录下的一个body.asp的文件当中,从而实现上传“大马”。在截取到的流量数据中可以发现,如:act= body.asp value=Execute 等payload,通过在检测这些payload就可以在上传的过程中分析Webshell及其行为。



四、访问过程中的Payload

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


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

上图中显然是Webshell正在试图连接网站的数据库,并且攻击者使用的是POST的方式向Webshell提交连接参数,其中可以发现的payload有:action=sqladmin dbhost=localhost
dbport=3306 dbuser=root dbpass=1qaz2wsx connect=connect 等。

我们再看一个由著名一句话Webshell管理工具“菜刀”远程控制“菜刀马”并发出的指令的流量数据:Webshell安全检测篇(1)-基于流量的检测方式

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

z1=Y21k&

z2=Y2QgL2QgIkQ6XHd3d1xxaHJkd3dcIiZ3aG9hbWkmZWNobyBbU10mY2QmZWNobyBbRV0%3D

通过解密加密的内容可以得到解密的payload

z1=cmd

z2=cd /d “D:wwwqhrdww”&whoami&echo [S]&cd&echo [E]7

解密之后的payload就尤为明显了,从中我们可以找到 cd /d cmd whoami echo [S] &cd &echo [E]7 等payload.

经过一定的payload积累和规则的定制再经过和其它检测过程相结合可以形成一套基于流量分析Webshell分析引擎,并且可以该引擎可以很方便的嵌入到现有的网关型设备或云上实现Webshell的深度分析。

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

《Webshell安全检测篇(2)–深入用户的内心》。








原文始发于微信公众号(守望者实验室):Webshell安全检测篇(1)-基于流量的检测方式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月27日09:15:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Webshell安全检测篇(1)-基于流量的检测方式https://cn-sec.com/archives/1104746.html

发表评论

匿名网友 填写信息