简介
攻击者在入侵企业网站时,通常要通过各种方式获取webshell从而获得企业网站的控制权,然后方便进行之后的入侵行为。常见攻击方式有:直接上传获取webshell、SQL注入、远程文件包含(RFI)、FTP,甚至使用跨站点脚本(XSS)作为攻击的一部分,甚至一些比较老旧的方法利用后台数据库备份及恢复获取webshell、数据库压缩等。通用功能包括但不限于shell命令执行、代码执行、数据库枚举和文件管理。
webshell分类
webshell从协议上来看,最开始基于 TCP、UDP 的 Shell,到后来基于ICMP 的 Shell和基于DNS 的shell 。从依托工具上看,有 nc 反弹、telnet 反弹、SSH 端口转发等手段,极度猥琐的甚至还有利用 awk 的反弹 Shell。从语言上看,各种流行的语言都能用来写后门,从bash 到 3P(Perl Python PHP)再到 Ruby 和 Java。
webshell功能
1)站长工具:被站长常常用于网站管理,服务器管理等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。
2)持续远程访问:入侵者可以利用从而达到长期控制网站服务器的目的,若攻击者自行修复了漏洞,以确保没有其他人会利用该漏洞,攻击者可以低调的随时控制服务器。一些流行的webshell使用密码验证和其他技术来确保只有上传webshell的攻击者才能访问它。(webshell密码爆破工具表示不服)
3)权限提升:在服务器没有配置错误的情况下,webshell将在web服务器的用户权限下运行,该用户权限是有限的。通过使用webshell,攻击者可以尝试通过利用系统上的本地漏洞来执行权限提升,常见的有查找敏感配置文件、通过内核漏洞提权、利用低权限用户目录下可被Root权限用户调用的脚本提权、任务计划等(从入门到放弃)
4)极强的隐蔽性:有些恶意网页脚本可以嵌套在正常网页中运行,且不容易被查杀。webshell还可以穿越服务器防火墙,由于与被控制的服务器或远程主机交互的数据都是通过80端口传递,因此不会被防火墙拦截,在没有记录流量的情况下,webshell使用post包发送,也不会被记录在系统日志中,只会在web日志中记录一些数据提交的记录。
websehll检测方式
webshell检测主要可以从websehll的特征,流量,webshell的操作等方法进行检测。
1.基于webshell特征检测
常见webshell特征:
1)存在系统调用的命令函数,如eval,system,cmd_shell,assert等
2)存在系统调用的文件操作函数,如fopen,fwrite,readdir等
3)存在数据库操作函数,调用系统自身的存储过程来连接数据库操作。
4)具备很深的自身隐藏性,可伪装性,可长期潜伏到web源码中
5)衍生变种多,可通过自定义加解密函数,利用xor,字符串反转,压缩,截断重组等方式来绕过检测。例如通过base64编码,进制运算
以上对于webshell本身的行为分析,它带有对于系统调用,系统配置,数据库,文件的操作动作,可以通过关键词匹配文件找出webshell;再如一些压缩后的数据,有可能一些WAF并不会检测到内容存在危险。变性后的数据,WAF也检测不出存在的危险,但是脚本文件带有这些特殊的函数,本身就是危险文件。
这些检测可以通过grep去查找webshell,D盾之类的webshell查杀工具也是利用这种原理,对源码进行查杀。但是遇到一些变形过的webshell后门,关键字搜索不到,这种方式就不适用了
例子:
1)查找存在eval函数的php文件。
find /var/www/* -type f -name "*.php" |xargs grep "eval"
2)如果木马做了免杀处理,可以查看是否使用加密函数:
find /var/www/* -type f -name "*.php" |xargs grep "base64_decode"
3)查看是否做了拼接处理
find /var/www/* -type f -name "*.php" |xargs grep "@$"
2.基于webshell流量特征检测
1)基于流量行为特征的webshell检测
webshell带有常见写的系统调用、系统配置、数据库、文件的操作动作等,它的行为方式决定了它的数据流量中多带参数具有一些明显的特征,通过匹配行为的流量特征做检测,这也是基于webshell入侵后行为特征进行检测,当然也可以从系统层面webshell入侵行为进行检测。
例如:ifconfig system whoami inetstat eval
常见的可以从data数据中去检索攻击者常用的命令和payload等,当然大部分的webshell不会这么直接,可能会经过编码,如最经典的webshell中国菜刀采用的是先url编码再base64编码,对应的采取解码的方式去发现敏感的行为特征。这也是抓取流量的好处,因为在web访问日志中,是无法抓取POST方式的包,也就没法分析webshell入侵后的行为,而流量很好的做到了这一点。
2)经过webshell工具特征的检测
分析常见的webshell工具,然后抓包看其流量特征。
最常见的中国菜刀流量特征为:通过wireshark等抓包工具进行分析,可以发现编码通信内容通过cookie头传输,其中有三个cm、cn和cp变量,这是webacoo webshell管理工具的特征。
3.基于webshell系统行为特征的检测
这个思路和基于webshell的流量行为特征进行检测的想法大概一致,攻击者上传webshell总会做些什么,那么可以去监测系统的变化以及敏感的操作,尽可能的去收集服务器的信息,通过和之前的配置以及文件的变化对比监测系统达到尽可能发现webshell的成果。
1)文件分析
查看/tmp,/init.d,/usr/bin,/usr/sbin等敏感目录有无可疑的文件,针对可疑的文件可使用stat进行创建修改时间,访问时间的详细查看,若修改时间距离事件日期接近,有线性关联,说明可能被篡改或者其他。
例如;
查找24小时内被修改的PHP文件:
find ./ -mtime 0 -name "*.php"
根据时间去反推变更的文件:
ls -al /tmp |grep "feb 27"
查找777权限以及隐藏文件:
find / *.jsp -perm 4777
2)进程分析(可以做)webshell执行命令的进程是一个实时的,其它时间就是一个合法的TCP连接,只能实时监控进程的状态。
使用netstat 网络连接命令,分析可疑端口、可疑IP、可疑PID及程序进程(top可以实时动态的查看系统的整体运行情况,主要分析cpu和内存多的进程,是一个不错的综合了多方面信息监测系统性能和运行信息的实用工具),最好可以去区分对外的监听端口和对内的监听端口,一般可以有效的查找出后门。
通过以下命令查找隐藏进程:
ps -ef | awk '{print}' | sort -n | uniq >1ls /proc | sort -n |uniq >2 diff 1 2
3)系统信息分析:
history (cat /root/.bash_history)
//查看分析history (cat /root/.bash_history),曾经的命令操作痕迹,以便进一步排查溯源
/etc/passwd
//查看有无新增的恶意用户或者除root之外uid为0的用户
crontab /etc/cron*
//查看当前的任务计划有哪些,是否有后门木马程序启动相关信息
$PATH
//分析有无敏感可疑信息
......
4)配置文件
如最普通的将pam.d下的ssh的验证模块改成su的验证模块,那么再次登录,验证uid为0,那么root就免密登录,而一般情况下,不仔细也是无法观察出的,还有更多的后门,再入php.ini后门,所以需要去监控一些培训文件,与之前的配置文件比较,以便于发现问题所在。
4.基于web日志webshell行为特征的检测
webshell的访问特征(如果你非要告诉我攻击者把webshell插入了其他的动态页面中2333):
1)少量的IP对其发起访问
2)总的访问次数少
3)该页面属于孤立页面
那么接下来就可以使用awk、uniq、sort或者脚本对url每天的总访问数量、url独立访问的页面等进行统计分析。
awk -F " " '{print $1}' log |sort| uniq -c |sort -nr |more
cat access.log | cut-f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10 //查看页面访问排名前十的IP
cat access.log | cut-f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10 //查看页面访问排名前十的URL
在日志提权的时候尽可能的去除掉一些静态的页面和错误请求信息,常见的可以通过grep -v去排除,排除项有:
1)去除静态path(例如jpeg,jpg,gif,png,bmp,css,js,xls,xlsx,doc,xml,wav,tar.gz,zip,swf,mp3,ico,pidf,torrent) ;
2)去除白名单path (例如主页index.php,index.asp,index.aspx,index.ashx,index.html);
3)去除非webshell后缀的path (例如asp,aspx,php,jsp,py,cgi,pl,java,sh,war,cfm,phtml);
4)去除扫描器造成的path(按扫描器IP信誉库(云扫描器IP信誉库与时效性扫描器IP信誉库)与扫描器行为(可以简单的按ip host聚类,将单位时间内请求数超过M,独立路径数超过N的请求视为扫描器)来去除);
5)去除响应码非200的path。
5.动态检测
上面介绍了静态检测,通过对指定脚本的关键词、高危函数、文件修改时间、权限等以及和其他文件的关联性等多个纬度的特征进行检测。速度快,且能快速定位;动态特征检测通过Webshell运行时使用的系统命令或者网络流量及状态的异常来判断动作的威胁程度,Webshell通常会被加密从而避免静态 特征的检测,当Webshell运行时就必须向系统发送系统命令来达到控制系统或者操作数据库的目的,通过检测系统调用来监测甚至拦截系统命令被执行,从行为模式上深度检测脚本文件的安全性。
这种首先就需要能够获取系统执行命令的进程链,然后在根据配置的规则进行检测,例如在进程链中执行了nc反弹
6.统计学
在日志分析中,基于webshell特征去发现webshell也范属于统计学。NeoPiS 国外流行的一个基于统计学的webshell后门检测工具,它使用五种计学方法在脚本文件中搜索潜在的被混淆或被编码的恶意代码。
NeoPi使用以下五种检测方法:
1)信息熵(Entropy):通过使用ASCII码表来衡量文件的不确定性;
2)最长单词(LongestWord):最长的字符串也许潜在的被编码或被混淆;
3)重合指数(Indexof Coincidence):低重合指数预示文件代码潜在的被加密或被混效过;
4)特征(Signature):在文件中搜索已知的恶意代码字符串片段;
5)压缩(Compression):对比文件的压缩比。