Waf常用的webshell检测方式

日志检测

使用Webshell一般不会在系统日志中留下记录,但是会在网站的web日志中留下Webshell页面的访问数据和数据提交记录。日志分析检测技术通过大量的日志文件建立请求模型从而检测出异常文件,称之为:HTTP异常请求模型检测。它的优点为当网站上的访问量级达到一致值时,这种检测方法具有比较大参考性价值。它的缺点则是存在一定误报率,对于大量的日志文件,检测工具的处理能力和效率都会变的比较低。

文件内容检测(静态检测)

静态检测是指对脚本文件中所使用的关键词、高危函数、文件修改的时间、文件权限、文件的所有者以及和其它文件的关联性等多个维度的特征进行检测,即先建立一个恶意字符串特征库。对已知的webshell查找准确率高,但缺点是漏报率、误报率高,无法查找0day型webshell,而且容易被绕过。

Webshell特征检测

使用正则表达式制定相应的规则是很常见的一种静态检测方法,通过对webshell文件进行总结,提取出常见的特征码、特征值、威胁函数形成正则,再进行扫描整个文件,通过关键词匹配脚本文件找出webshell。

比较常见的特征:

比如系统调用的命令执行函数

eval\system\cmd_shell\assert

统计特征检测

经常会出现一些变形混淆webshell,正则一般检测不出来,但是这类脚本都明显与正常脚本不同,通过统计文本熵、字符串长度、特殊符号个数、重合指数、压缩比等来制定相应的规则以预防混淆的webshell。

文件名检测

有的文件名一看便知道是webshell,也是根据一些常见的webshell文件名进行总结然后再进行过滤。

比如

backdoor.php、webshell.php

文件行为检测(动态检测)

动态特征检测是通过Webshell运行时使用的系统命令或者网络流量及状态的异常来判断动作的威胁程度,Webshell通常会被加密从而避开静态特征的检测,当Webshell运行时就需要向系统发送系统命令来达到控制系统或者其他的目的。通过检测系统调用来监测甚至拦截系统命令被执行,从行为模式上深度检测脚本文件的安全性。

流量行为特征检测

webshell带有常见的系统调用、系统配置、数据库、文件操作动作等,它的行为方式决定了它的数据流量中的参数具有一些明显的特征。

比如

ipconfig/ifconfig/syste/whoami/net stat/eval/database/systeminfo

攻击者在上传完webshell后肯定会执行些命令等,那么便可以去检测系统的变化以及敏感的操作,通过和之前的配置以及文件的变化对比监测系统达到发现webshell的目的。

Webshell管理工具特征检测

常见的Webshell工具如:菜刀、冰蝎、蚁剑等,通过对这些工具特征的检测来检测出木马。

比如

eval函数/assert函数
base64_decode($_POST[z0])将攻击payload进行Base64解码,因为菜刀默认是将攻击载荷使用Base64编码,以避免被检测;
z0=QGluaV9zZXQ...该部分是传递攻击payload,此参数z0对应$_POST[z0]接收到的数据,该参数值是使用Base64编码的,所以可以利用base64解码可以看到攻击明文

不同的版本对应的流量也不太相同,需要具体去分析。