原创 BeatRex的成长记录
一、技战法概述二、Webshell对抗手段2.1 落地文件型Webshell检测与对抗2.1 无文件型内存马检测与对抗2.3 Webshell免杀对抗
一、技战法概述
Webshell是黑客经常使用的一种后门,其目的是获得服务器的执行操作权限,常见的Webshell编写语言为ASP、JSP、PHP。主要用于网站管理,服务器管理,权限管理等操作。使用方法简单,只需要上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站的服务器的管理。
在日常的网络攻击以及实战攻防中,攻击者往往倾向于反序列化攻击、代码执行、命令执行、Webshell上传等攻击成本低但快速有效获取权限的方式。且随着防御手段的不断提升,对Webshell的检测也在不断深入,从文件落地型Webshell的明文到编码加密传输规避安全设备的检测,当新的绕过手段出现时,不久便会出现对其的检测手段。现在大部分Webshell利用反序列化漏洞进行无文件落地形式的攻击,即内存马。
内存马这种方式难以检测且需要较高的技术手段进行处置,因此对于Webshell攻击的对抗与检测处置,不仅需要针对文件落地型Webshell开展对抗,更需要注意无文件的内存马攻击。
二、Webshell对抗手段
2.1 落地文件型Webshell检测与对抗
在安全从业者进入行业的初始阶段,通常会针对文件上传漏洞进行学习,最早接触的Webshell即为一句话木马。一句话木马短小精悍,仅一行代码即可执行常见的服务器文件操作。
但一句话木马使用的函数为高危函数,极易被安全产品检测,因此出现了base64编码以及其他编码的传输方式,通过蚁剑等Webshell管理工具进行连接实现Webshell的操作。
但编码本质而言是可逆的,通过解码手段即可还原通信过程从而再次被检测,因此目前主流的哥斯拉、冰蝎等加密Webshell出现在常见的攻防实战中。如冰蝎的动态特征是连接shell的过程中会存在客户端与服务器交换AES密钥的环节,总体的通信流程是将将Payload通过base64进行编码,通过eval等执行系统命令的函数对编码后的Payload进行执行,通过AES加密全部的Payload,传输获得密钥,再进行加密传输。在多种编码、加密方式结合的情况下,在初期可以规避大量安全产品的检测,但随着安全研究人员的不断探索,存在文件落地的Webshell就有手段进行检测、查杀。
对于文件类型的Webshell查杀工具较多,Windows下常见的D盾、Linux下河马Webshell查杀等,主流的Webshell特征基本可以识别到。
2.2 无文件型内存马检测与对抗
内存Webshell相比于常规落地文件类型的Webshell更容易躲避传统安全监测设备的检测,通常被用来做持久化,规避检测,持续驻留目标服务器,不易清除。无文件攻击、内存Webshell、进程注入等基于内存的攻击手段也越来越受欢迎。
内存马的原理是先由客户端发起一个Web请求,中间件的各个独立的组件如Listener、Filter、Servlet等组件会在请求过程中做监听、判断、过滤等操作,内存马利用请求过程在内存中修改已有的组件或者动态注册一个新的组件,插入恶意的Shellcode达到持久化的控制服务器。
内存马分为PHP、Python、Java类型,PHP内存马也就是PHP不死马,是将不死马启动后删除本身,在内存中执行死循环,使管理员无法删除木马文件。PHP内存马的检测思路主要是检查所有PHP进程处理请求的持续时间、检测执行文件是否在文件系统真实存在。
内存马的检测首先确定是通过什么方法注入的内存马,查询Web日志是否有可疑访问,如果是filter或者listener类型,则会有大量请求路径相同但参数不同或页面不存在但是返回200的日志。其次查看是否有类似哥斯拉、冰蝎相同的URL请求,哥斯拉和冰蝎的内存马注入流量特征与普通Webshell的流量特征基本吻合。通过查找返回200的URL路径对比Web目录下是否真实存在文件,如不存在大概率为内存马。
如在Web日志中并未发现异常,可以排查是否为中间件漏洞导致代码执行注入内存马,排查中间件的error.log日志查看是否有可疑的报错,根据注入时间和方法根据业务使用的组件排查是否可能存在Java代码执行漏洞以及是否存在过Webshell,排查框架漏洞,反序列化漏洞。
2.3 Webshell免杀对抗
除了Webshell查杀工具,目前主流的主机杀毒工具对于Webshell的检测能力也在不断提升且随着人员安全意识的提升,即使未安装企业版杀毒软件,主机也存在着免费杀毒工具。因此对于落地型的Webshell,在考虑其功能的同时也需要结合免杀技术绕过杀毒软件的检测。
Webshell的免杀技术主要有基于特征的绕过,基于框架的免杀、无扩展免杀等。基于特征的绕过主要是绕过防火墙的正则表达式匹配,因此主要原理是基于各种函数的动态调用进行代码拼接,如分离免杀将一个Webshell的代码分成多个文件,通过file_get_contents()等文件读取函数将内容进行读取,最终实现WAF的绕过。但对于Webshell的免杀不能仅仅通过一种手段,往往是多种方式结合使用。通过特征的编写完成后,再结合加密等方式一方面可以绕过防护墙的拦截,另一方面也可在服务器层面绕过主机杀毒工具的检测。因此对于此类攻击的防护需要结合人工判断的方式弥补设备的短缺。