学习蓝队知识,总结的几种webshell检测方法。
1. Webshell简介
顾名思义:web就是在开放的web服务器上,shell就是取得对服务器某种程度操作命令。webshell主要用于管理网站和服务器管理,由于其利用其便利性和功能性强大,被修改后的webshell也被部分人当作网站后门工具使用。
Webshell分为大马和小马,对于大马,它的体积大,包含的功能多,通常使用系统关键函数;而小马也就是常说的一句马,题积小,代码也简单。
2. webshell检测方式
webshell的检测有两种检测手段:
一种是传统检测分为静态检测,动态检测,日志分析,统计学,语言检测。另一种是新型webshell检测分为基于数据库操作审计的检测方式和建立机器学习日志分析系统。
2.1 静态检测
静态检测是指脚本文件所使用的关键词、高危函数、文件修改的时间、文件权限、文件的所有者以及其他文件的关联性等多个维度的特性进行检测,即先建立一个恶意字符串特征库(eval()、Excute()、Run()、shellExcute()、set server),同时对web文件修改时间,文件权限以及文件所有者等进行确认。通常情况下web文件不会包含上述特征或者特征异常,通过与特征库的比对检索出高危脚本文件。
•优点:可以快速检测、定位。
•缺点:容易误报,无法对加密或经过特殊处理的webshell文件进行检测。尤其是对窃密型webshell无法做到精准的检测,因为窃密型webshell通常具有和正常的web脚本具有相似的特征。
2.2 webshell特征检测
常见webshell 函数:
•系统调用的文件操作函数,例如fopen 、fwirte 、readdir等
•系统调用的命令执行函数,例如eval、system、cmd_shell等
•具备很深的隐藏性、伪装性、可长期潜伏到web的源码种
•数据库操作函数,调用系统自身的存储过程来连接数据库的操作
•衍生变种的很多,通过自设定加密函数、利用字符串反转、xor、截断重组等方法绕过检测
//进制运算
$_++; $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); @
//利用注释符
$__}[!$_](${$__}[$_]);@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]); @${
//利用base64编码
$b = base64_encode(‘whoami‘);
echo $b.‘<br />‘;
echo base64_decode($b).'<br />';//利用gzcompress压缩
$c = gzcompress('whoami');
echo $c.'<br>';
echo gzuncompress($c)."<br />";
对于这种绕过检测,可以通过grep命令查找webshell,河马,D盾之类的工具就是利用该原理,对源码进行查杀的。但是有的时候黑客在上传完webshell后门,获取想要的信息数据之后就会删除掉webshell,或者是变形的webshell后门,关键字没有搜索到的,那么通过文件搜索webshell就不适用。
find /* -type f -name "*.php" |xargs grep "eval"
find /* -type f -name “*.php” |xargs grep "base64_decode"
find /* -type f -name “*.php” |xargs grep "@$"
对搜索到的内容,手动查看是否是木马,可以在本地查看脚本文件内容,或者上传在线网站检测。
在线检测网站:
•webdir+ 在线查杀:https://scanner.baidu.com/#/pages/intro
•Web Shell Detector:https://shelldetector.com/
•河马(在线/GUI):https://www.shellpub.com/
•牧云WebShellShop:https://webshellchop.chaitin.cn/demo/ github项目地址:https://github.com/chaitin/cloudwalker
2.3 流量特征的检测
•流量行为特征的检测
基于流量的检测,是无法通过检测构成webshell危险函数的关键词来做检测的。但webshell带有常见写的系统调用、系统配置、数据库、文件的操作动作等,它的行为方式决定了它的数据流量中多带参数具有一些明显的特征,通过匹配行为的流量特征做检测,这也是基于webshell入侵后行为特征进行检测,当然也可以从系统层面webshell入侵行为进行检测。
常见的可以在data数据中检索出来攻击的命令语句,但是大部分webshell是进行混淆编码的。例如菜刀就是采用url和base64进行编码的,我们进行相应的解码就能发现它的行为特征。
这也是抓取流量进行分析的好处,因为在web访问日志中是无法读取POST的数据包内容的,那么就不能看到webshell的攻击行为。
•webshell工具的特征的检测
菜刀webshell流量特征检测:
通过wireshark抓取数据包进行分析
它是将post中action进行了base64编码让后执行了eval,那么@action是要执行的命令,将action的值解码后分析:
首先,它echo三个字符进行混淆填充,然后是通过fwirte向f写了buf内容,而f是post的z1的内容,buf则是已输入的内容以2个为分组进行了切分,再加上%再进行urldecode,相当于hex编码的解码。
再查看z1的内容:
那么验证刚才想法会在这里目录中写一个文件,文件内容就是z2。
那么数据包里面得z1等这些操作就是webshell的特征了。
2.4 系统行为特征检测
当攻击者上传了webshell后回去做什么呢,我们可以通过检测系统变化和敏感操作。收集系统上的配置信息变化,网站的文件的变化,尽可能发现webshell。类似应急中对进程、文件、配置文件、系统文件的分析。
•进程分析
我们可以使用netstat 命令,分析可疑的端口、IP、PID以及进程程序。重点关注对外监听的端口,一般是可以查出后门的。
netstat -ano(windown)
netstat -anplt(Linux)
•文件分析
查看分析查看/tmp、/init.d、/usr/bin、/usr/sbin可以的目录中是否存在可疑的文件,使用stat命令可查看文件的访问时间,修改时间的详情,如果有离事件发生接近,说明有可能篡改,再去分析。
stat目录名/文件名
还有就是查找新增文件的方式:
find ./ -mtime 0 -name "*.php" //24小时内修改的php文件
find ./ +mtime 0 -name "*.php" //24小时之前修改的php文件
查找隐藏的文件(’.‘开头的文件是具有隐藏属性的)
ls -ar |grep "^."
查看777权限的文件:
find ./ *.php -perm 777
-
系统信息分析
history//查看历史的操作命令,是否留下痕迹
cat /etc/passwd //查看是否增加了除root之外uid为0的用户
crontab /etc/cron* //查看计划任务,是否有木马程序启动计划
-
配置文件
主要就是看是否建立了ssh软连接。普通用户将pam.d下的ssh的验证模块改成su的验证模块,那么再次登录,验证uid为0,那么root就免密登录。
当然不止改后门,还有其他的后门,需要监控这些配置文件,与之前进行比较,发现被修改的问题。
2.5 Web日志行为特征的检测
我们在分析攻击事件的时候,要先了解一下系统结构,服务器类型,网络拓扑等情况。因为攻击者对网站攻击,最普通思路就是通过漏洞利用拿到后台权限,通过后台上传webshell。那么这个webshell文件就是应急的一个着手点。通过webshell的时间 ,利用攻击手段和时间,去判断分析。
比如利用grep命令找到了木马中危险的函数,然后再日志找到这个webshell,可以查看攻击者的访问ip和webshell的操作记录,从而搜索攻击者的访问日志,就可以还原整个过程了。
-
webshell的访问特征
页面是孤立的
访问次数少
少量的ip对其进行了访问(至少只有攻击者ip)
2.6 动态检测
通过webshell运行时使用的系统命令或者网络流量以及状态的异常来判断动作的威胁程度,webshell通常会被加密从而避免静态特征的检测,当webshell运行时就必须向系统发送系统命令来达到控制系统或者操作数据库的目的,通过检测系统调用来检测甚至拦截系统命令被执行,从行为模式上深度检测脚本文件的安全性。
-
优点:可用于网站集群,对新型变种脚本有一定的检测能力
-
缺点:针对特定用途的后门较难检测,实施难度较大。
原文始发于微信公众号(白帽少年):Webshell的检测
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论