首页 > 代码库 > Webshell的检测

Webshell的检测

原文地址:http://www.freebuf.com/articles/others-articles/71604.html
(原文主要是针对窃密型Webshell的检测来讨论的,开篇部分先介绍了传统的检测Webshell的方法,之后找出传统方法的不足,提出针对窃密webshell的新方法,这篇文章主要把精力放在其对传统方法的介绍上)
目前针对Webshell的特征检测一般是通过特征比对及文件属性异常的静态检测和基于访问情况、行为模式特征的动态检测方式进行查杀。

一、传统及现有的检测方法
1.静态检测

静态特征检测是指对脚本文件中所使用的关键词、高危函数、文件修改的时间、文件权限、文件的所有者以及和其它文件的关联性等多个维度的特征进行检测,即先建立一个恶意字符串特征库,例如:"组专用大马|提权|木马|PHP\s?反弹提权cmd执行","WScript.Shell、Shell.Application、Eval()、Excute()、Set Server、Run()、Exec()、ShellExcute()",同时对WEB文件修改时间、文件权限以及文件所有者等进行确认。通常情况下WEB文件不会包含上述特征或者特征异常,通过与特征库的比对检索出高危脚本文件。
该检测方法的优点:可快速检测,快速定位;
缺点:容易误报,无法对加密或者经过特殊处理的Webshell文件进行检测。尤其是针对窃密型Webshell无法做到准确的检测,因为窃密型Webshell通常具有和正常的WEB脚本文件具有相似的特征。

2.动态检测
动态特征检测通过Webshell运行时使用的系统命令或者网络流量及状态的异常来判断动作的威胁程度,Webshell通常会被加密从而避免静态特征的检测,当Webshell运行时就必须向系统发送系统命令来达到控制系统或者操作数据库的目的,通过检测系统调用来监测甚至拦截系统命令被执行,从行为模式上深度检测脚本的安全性。
优点:可用于网站集群,对新型变种脚本有一定的检测能力
缺点:针对特定用途的后门较难检测,实施难度较大

3.日志分析
使用Webshell一般不会在系统日志中留下记录,但是会在网站的web日志中留下Webshell页面的访问数据和数据提交记录。日志分析检测技术通过大量的日志文件建立请求模型从而检测出异常文件,称之为:HTTP异常请求模型检测。例如:一个平时是GET的请求突然有了POST请求并且返回代码为200、某个页面的访问者IP、访问时间具有规律性等。
优点:采用了一定数据分析的方式,网站的访问量达到一定量级时这种检测方法的结果具有较大参考价值。
缺点:存在一定误报,对于大量的访问日志,检测工具的处理能力和效率会比较低。

4.统计学
在Webshell后门检测中被使用较为广泛的一种方法是统计学方法,NeoPi是国外流行的一个基于统计学的Webshell后门检测工具,它使用五种统计学方法在脚本文件中搜索潜在的被混淆或被编码的恶意代码。
NeoPi使用以下五种检测方法:
*信息熵(Entropy):通过使用ASCII码表来衡量文件的不确定性;
*最长单词(LongestWord):最长的字符串也许潜在的被编码或被混淆;
*重合指数(Indexof Coincidence):低重合指数预示文件代码潜在的被加密或被混效过;
*特征(Signature):在文件中搜索已知的恶意代码字符串片段;
*压缩(Compression):对比文件的压缩比。
采用这种检测方法也存在明显的弱点,NeoPi的检测重心在于识别混淆代码,它常常在识别模糊代码或者混淆编排的木马方面表现良好。未经模糊处理的代码对于NeoPi的检测机制较为透明。如果代码整合于系统中的其它脚本之上,这种“正常”的文件极可能无法被NeoPi识别出来。

二、传统检测方法的缺陷
现有技术是针对普通的脚本后门、以控制服务器为目的、通常包含较为明显的静态特征或行为模式,不能对窃密型后门进行有效检测。
由于业务系统更新频繁,WEB脚本文件相关的属性经常发生变化所以偏重于文件属性检测的方法往往会产生更多的误报。
基于动态行为检测的方法往往技术难度较大,难以实现,而且对系统造成的性能影响较大,甚至可能对系统稳定性造成影响。
基于日志的检测方法,一方面,由于业务功能较多且复杂,部分功能可能很少会被用到,其日志访问可能会命中某些检测规则从而造成更多的误报,另一方面,大量的日志记录处理起来会对服务器性能产生负担、而且由于日志量巨大检测过程消耗时间长,检测速度较慢。而窃密型Webshell后门往往会模拟正常的数据库操作、不具有较为明显静态特殊属性、被访问的次数比较少,无法形成较为明显的访问特征,通过日志分析也很难发现。

Webshell的检测