冰蝎(Behinder)是国内黑客圈较火的一款Webshell管理工具。在今年HW开始前,冰蝎突然进行了3.0版本的发布,新版本修改了不少旧版本的流量特征,导致大量WAF、HIDS、Webshell检测工具失效。
本文将详细揭秘冰蝎的前世今生,以及对于冰蝎相关攻击的检测思路和3.0新版本下的防护思考。
冰蝎的前世
在冰蝎这个工具出现以前,中国菜刀一直是国内的白帽子、黑帽子、各种帽子常用的Webshell管理工具。而冰蝎出现以后,很快就被大量攻击者所接受,取代了菜刀的地位。
相比于菜刀,冰蝎具有下面一些优点:
- Java开发,支持跨平台运行
- 使用加密隧道传输数据,尽可能避免流量被WAF或IDS设备所捕获
- 更新较为频繁,作者会听取社区的意见修改工具
在冰蝎逐渐流行以后,国内各大安全厂商也开始了行动,使用各种方法检测冰蝎的Webshell和流量,可谓八仙过海各显神通。
以下是常见的基于流量的检测方法:
1、通过密钥协商的过程中的一些特征来检测
老版冰蝎工具在连接Webshell的时候会存在一个密钥协商的过程,这个过程是纯明文的数据交换,冰蝎存在这样的特征:发起一共两次的密钥协商,通过比较两次密钥协商的返回包中内容的不同部分来获取其中的密钥。
在这个协商过程中,防护设备可以结合URL、请求包和返回包的内容以及头部信息来综合进行判断,这种类型检测的优势是这部分的流程是冰蝎内置的实现,攻击者不太好进行修改绕过。而劣势是在大流量的环境下很容易引起大量的误报。
2、通过Shell交互过程中的HTTP请求特征来检测
冰蝎在发送HTTP请求时存在一些特征,例如其工具中内置了17个User-Agent头,在用户没有自定义的情况下会随机选择一个发送。但是这些User-Agent头大部分是一些老版本的浏览器或设备。
这个类型检测的优势是检测方式比较简单,但是在大流量的环境下很容易引起误报,一般使用多个特征相结合的方法来改善误报的情况,并且这部分的特征通常是一些弱特征,攻击者可以通过定制请求头、使用代理等方式修改冰蝎的请求包很轻易的来绕过这类的检测。
3、通过Webshell上传时的流量特征来检测
在真实的攻击场景下,攻击者通常是通过文件上传、文件写入等方式来写入冰蝎的Webshell,所以流量设备也可以通过检测攻击场景的数据包来发现冰蝎的存在。
这部分的流量形式主要取决于Web应用,是攻击者不好控制的,而且通常都是以明文形式进行传输,所以比较易于检测。
但是这种检测方式在遇到非文件上传等漏洞时,有可能无法捕捉到Webshell的特征。
4、通过利用rasp机制来进行检测
冰蝎的java实现是利用defineClass来动态加载字节码进行执行,利用rasp的机制可以通过执行堆栈的信息来捕捉到冰蝎的最终利用,这种方式的检测优势在于不会产生误报,但是其会产生漏报,例如一些厂商通过堆栈中的恶意包名来检测,这时候只需要更换包名就可以绕过检测,并且由于rasp侵入强的特点,比较容易干扰到线上的应用。
冰蝎的今生
冰蝎赶在2020年HW前发布了3.0版本,这个版本的冰蝎改动较大,一举绕过国内大量Webshell检测引擎和流量检测引擎。按照官方的说法,这次主要的改动是:
- 去除动态密钥协商机制,采用预共享密钥,全程无明文交互,密钥格式为md5("admin")[0:16]
- 增加了插件机制,可开发安装自定义扩展插件
- UI框架由awt改为javafx,重写了大量逻辑
- 增强了内网穿透功能,在原有的基于HTTP的socks5隧道基础上,增加了单端口转发功能,可一键将内网端口映射至VPS或者本机端口
从防守方的角度看,这些改动中对防御设备影响最大的是第1点,也就是说,3.0版本的冰蝎不在有密钥协商的过程,从原理上直接绕过了大量流量检测设备(大部分设备是通过握手