WebShell的检测技术

一、Webshell 的常见植入方法

 

-启明星辰  Leylo Trent

WebShell 攻击是常见的用来控制Web 服务器的攻击方法,WebShell 文件通常是可执行的脚本文件,例如asp, php, jsp 文件,有些辤可利用web 服务器缺陷,伪装为图片文 件或者其他文件类型也是有效的。WebShell 是web 攻击最常用手法之一,所以WAF 产品 具备Webshell 的检测和防护能力很有必要。常见的Webshell 植入手法:

1、 利用web 上传业务,上传webshell 脚本,上传的目录往往具有执行权限,这个缺 陷很常见。

很多Web 网站都有允许用户上传数据的业务,例如上传头像,上传 共享资料等,辥些文件上传以后有时候会向客户端反馈上传文件完整URL 信息, 有些虽然不反馈,但是存放的文件路径可以被猜测出来,例如常见的目录有/photo,/image,/upload 等等。

如果该Web 网站对存取权限或者文件夹目录权限控制不 严,就可能被利用进行webshell 攻击。例如在上传头像时上传个脚本文件,然后 再通过url 访问这个脚本,结果这个脚本被执行。

2、 利用Web 业务的其他缺陷,例如存在SQL 注入缺陷,植入Webshell 脚本。

注入漏洞攻击本质上是通过该漏洞,使得攻击者能在Web 服务器上使用一定的权 限来执行命令。一旦发现Web 服务存在注入漏洞,攻击者很容易利用脚本来操作 目录或者文件,往指定的目录下写入webshell 脚本。

3、 攻陷Web 服务器系统,在web 服务目录中上传webshell 文件。

 

Web 服务器除了存在Web 应用漏洞本身的隐患,同时作为一个服务器,同样可能 存在系统层面漏洞,如果服务器系统被攻陷,攻击者获得权限,则可以随意操作Web 服务器。攻击者攻陷Web 服务器以后很可能会在该服务器上留下Webshell 脚本,便于以后持续控制。

 

植入的Webshell 辤可能被其他的攻击者利用,攻击者可以猜测已经存在的webshell 文件,

 

例如webshell 常见的文件名有diy.asp,wei.asp,2006.asp,newasp.asp,myup.asp, log.asp,phpspy.php 等等,一旦猜测成功,则可以利用前人得“攻击成果”来实施攻击。 如果webshell 设置了密码,可以通辟分析Webshell 源文件的一些注释等信息进一步猜测 密码。攻击者还可以通过一些主要的搜索引擎来搜索到一些存在的webshell,以google 为例,在搜索栏中输入inurl:”phpspy.php”,则可以看到很多需要输入密码的页面,这些 页面大部分都是植入的webshell。

 

二、Webshell 的检测

webshell 目前特征检测方法有动态特征检测和静态特征检测两种方法,静态特征检测是指攻击者上传webshell 文件时通过特征匹配的方式来发现webshell,即先建立一个恶意字符 串特征库,不同的web语言会有不同的然后通过在各类脚本文件中检查是否匹配。

通常webshell 所有的功能都是独立文件中出现的,可以跟据不同的web 程序语言建 立不同的脚本函数接口作为特征串,如果一个文件包含下列两大功能以上通常此文件可以认 定为具有webshell 的特征了:

1.文件操作:复制文件、删除文件、更改文件名、上传文件、下载文件、文件浏览列表、文 件搜索、查看文件属性等功能

2.目录操作:  删除目录、更改目录名

3.数据库:  添加、查询、删除、更改、数据库的连接、建立、压缩

4.网络功能:  端口扫描

5.注册表操作:打开注册表、读取注册表、删除注册表、写入注册表

6.执行应用程序:  如WScript.Shell

7.查看系统信息功能:  查看本机IP(网卡信息)、系统用户信息、系统环境变量、磁盘信息、

8.Web   服 务 支 持 组 件 查 询:   ADOX.Catalog 、wscript.shell 、Adodb.Stream 、Scripting.FileSystemObject

9.挂马功能等

10.web 应用程序被加密: 使用常用的vbscrip.encode,、jscrip.encode、javascrip.encode、base64_decode、gzinflate、gzuncompress,str_rot13 等加密一些敏感代码。

11.其他系统敏感函数。

当然这种静态特征检测面临的一个问题是误报。通常一些特征字符串正常程序本身也需要用到,例如用户发布的文章包含辥些信息也可能包含辥些关键特征串的信息,这样面临的 一个问题就是误报。

通常攻击者通过更改变量名函数名可以辛到免杀的目的,但是一些关键的库函数或脚本接口名字不是更改的,我们可以定义2 组或2 组以上的基础事件来检测脚本语言:

例1 定义数据包方向为请求包

基础事件1:  检测到的数据库操作:  添加、查询、删除、更改相关函数

 

检测到数据库操作语句

 


检测到执行SQL 语句

 

 

 

基础事件2:  检测到执行应用程序操作:  如WScript.Shell、var.Run、shell_exec、exec 等 函数

基础事件检测到使用wscript.shell 组件

 

检测到使用脚本使用ws.run  执行文件

 

 

 

由上面的2 个基础事件检测到文件上传时,包含数据库操作和执行文件的脚本代码,此时的关联事件可以认定是一个非常可疑的webshell 上传事件。

 

 

 

 

例2  定义数据包方向为请求包

 

基础事件1: 检测到web 页面被加密: 使用常用的vbscrip.encode,、jscrip.encode、javascrip.encode、base64_decode、 gzinflate、gzuncompress,str_rot13 等加密一些敏感代码。

检测到使用vbscrip.encode 加密web 应用程序

 

基础事件2:  检测到其他系统敏感函数。 检测到使用文件操作组件

 

 

在上传一个文件使用时加密应用程序又使用文件操作组件是非常可疑的,当然也可以添加基础事件 3  为数据库操作类这样可以使事件判断更加的准确,因此判定是一个非常可疑的webshell 上传事件。

 

动态特征检测

 

动态特征检测是指webshell 已经上传到web 服务器,在浏览器打开webshell 页面时进行拦截,此时从网络中检测到的是web 应用程序被解释执行的代码,此种方法最大的缺点就是漏报,只要攻击者对webshell 稍作改动就轻易躲辟设备检测,并且新的webshell 出来还要去更新这个库,所以需要要维护的特征库庞大。

 

 

三、WAF 中进行WebShell 检测

传统的防火墙对Webshell 防御比较困难,webshell 通常是对80 端口辦行访问,且入 侵辟程没有明显特征(webshell 文件本身是具备特征的),如果不是有经验的网站管理员, 通辟Web 日志也很难发现遭受攻击。对于Webshell 的检测和防御,WAF 类产品应该可以 弥补传统防火墙的不足,WAF 产品能解包到应用层,可以通辟对应用层数据辦行深度分析 来检测和防御Webshell 植入辟程,Webshell 文件本身一般辤是具备特征的,例如有FSO 的函数,加密方法等,可以通辟对辥些特征分析辦行检测。且WAF 产品辤可以设置一些应

 

用层面的合法性规则,对文件上传等行为辦行控制,例如可以设置允许上传的文件类型,设置上传文件名辟滤规则等,辥样可以比较有效防御Webshell。而对于服务器系统本身的漏洞,传统的网关产品能够提供较好防护。

综上所述,要对网站的webshell 攻击进行有效防护,需要综合的防御手段。较好地方案是先用本地的webshell 扫描工具,检测网站是否已经被植入webshell 脚本,做完清除 以后,再部署上WAF 产品和网关类产品,阻止后续植入新的Webshell。完整的攻击防护 示意图如下:


本文作者启明星辰转自红黑联盟由网络安全攻防研究室(www.91ri.org) 信息安全小组收集整理.转载本文请著名原文地址及原作者版权信息。