凯发k8国际

      新闻动态

      News information

      冰蝎4.0特征分析及流量检测思路

      <<返回

      2022年09月27日 10:05

      01.
      冰蝎4.0介绍


      冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端。老牌Webshell管理神器——中国菜刀的攻击流量特征明显,容易被各类安全设备检测,实际场景中越来越少使用,加密 Webshell 正变得日趋流行。


      由于通信流量被加密,传统的 WAF、IDS 设备难以检测,给威狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。


      1、新版本

      修复问题:
      1.修复了在zimbra环境下的兼容性问题;
      2.修复了在exchange环境下的兼容性问题;
      3.修复了Linux环境下打开文件失败的问题;
      4.修复了命令执行中输入反斜杠导致后续无法输入新命令的问题;
      5.修复了列目录时目录跳动的问题;
      6.修复JDK18+执行命令乱码的问题;
      7.修复内网穿透模块的几个影响隧道稳定性的几个问题;
      8.修复了代码编辑框的复制粘贴问题;
      9.其他一些优化。


      新增功能:

      1.新增支持多线程超大文件上传、下载;
      2.新增文件打包压缩;
      3.新增数据库连接配置可保存;
      4.取消硬编码通信协议,传输协议完全自定义,并支持即时在线校验测试。
      5.新增平行世界模块,可对目标内网资产进行管理;
      6.新增主机扫描、端口扫描、服务识别模块;
      7.新增支持Java9~java15+版本Agent内存马一键注入;
      8.新增支持Java Agent无文件落地注入内存马;
      9.新增多层网络子Shell穿透模块,实现多层”蝎中蝎”;
      10.新增离线模式,自动缓存数据,如shell丢失,可离线查看已缓存内容;
      11.开放插件开发模块,可开发自定义插件,内置多款插件;
      12.支持二进制服务端,服务端不再依赖web。


      2、工具通信原理

      冰蝎的通信过程可以分为两个阶段:密钥协商和加密传输

      第一阶段-密钥协商

      1.攻击者顺利获得 GET 或者 POST 方法,形如 http://127.0.0.1/shell.aspx?pass=645的请求服务器密钥;

      2.服务器使用随机数 MD5 的高16位作为密钥,存储到会话的 $_SESSION 变量中,并返回密钥给攻击者。

      第二阶段-加密传输

      1)客户端把待执行命令作为输入,利用 AES 算法或 XOR 运算进行加密,并发送至服务端;

      2)服务端接受密文后进行 AES 或 XOR 运算解密,执行相应的命令;

      3)执行结果顺利获得AES加密后返回给攻击者。

      1.png

      02.
      特征检测


      1、Accept字段

      流量特征

      Accept: application/json, text/javascript, */*; q=0.01

      2.jpg


      检测思路

      浏览器可接受任何文件,但最倾向application/json和 text/javascript

      规则

      file_data的作用和http_server_body差不多,都是使content匹配response body中的内容,唯一不同的是使用了file_data关键字的规则,其在file_data之后的content都会受到它的影响。file_data之后的content都必须在response body里匹配。。


      2、Content-Type

      流量特征

      Content-type: Application/x-www-form-urlencoded


      检测思路

      可以把这个字段作为一个弱特征,辅助其他特征来检测


      3、User-agent 字段

      流量特征

      冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用。

      3.jpg


      4.jpg


      5.jpg


      检测思路

      在较短较简单的content字段后加上fast_pattern关键字则会优先匹配这个content。避免浪费太长时间在匹配user-agent上。


      snort编写可以用content:“User-Agent”;content:“浏览器版本”。来匹配相应的十个浏览器。


      4、端口

      流量特征

      冰蝎与webshell建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右,每连接一次,每建立一次新的连接,端口就依次增加。

      检测思路

      可以对符合该范围内的端口告警。


      5、PHP webshell 中存在固定代码

      流量特征

      $post=Decrypt(file_get_contents("php://input"));

      eval($post);

      检测思路

      content字段中,将eval($post)作为流量特征纳入。


      6、长连接

      流量特征

      冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection。

      Connection: Keep-Alive

      6.jpg


      测思路

      可以作为辅助的流量特征。


      7、固定的请求头和响应头

      流量特征

      请求字节头:

      dFAXQV1LORcHRQtLRlwMAhwFTAg/M


      7.jpg


      响应字节头:

      TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd


      8.jpg


      解密报文:

      9.jpg


      顺利获得webshell脚本,逆向分析揭秘算法:

      10.jpg


      11.png

      得到报文内容:


      12.png


      将报文base64解密得到:


      13.png


      14.png


      可以获取到目录信息


      8、连接密码

      流量特征:

      默认时,所有冰蝎4.0 webshell都有“e45e329feb5d925b” 一串密钥。该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond


      9、webshell特征

      JSP webshell代码特征

      15.png


      PHP webshell代码特征

      16.png


      10、请求和响应

      17.png

      18.jpg


      冰蝎连接时不用输入密码,根据对冰蝎的使用分析,冰蝎4.0可以在初始时自定义连接密码。


      19.jpg


      要设置自定义密码,需要在本地和远程加解密函数中都保存$key。


      这样的话,如果对方更换密码,初始字符串经过密钥加密,那么它的请求头和响应头都会发生变化,这就需要针对webshell中的$key动态改变解密函数才能到解密后固定的请求头和响应头


      另外,每次发起连接时都会发出两次http请求,默认连接密钥下,所有响应头都相同,第二次请求头比较特殊,初次之外,所有的请求头都相同。


      第一次请求解密

      dFAXQV1LORcHRQtLRlwMAhwFTAg/M

      @error_reporting(0);\r

      20.jpg


      第二次请求解密

      OT8AQUBWFDoQUBRWQEELC1MdVRoJNGwDF1sHTVtaDEVZVAxdGh0RDQNBAU9X

      error_reporting(0);\r

      21.jpg


      03.
      必要的安全防护设备


      1、网络出口位置部署凯发k8国际防火墙,并及时更新特征库;

      2、部署凯发k8国际神探产品,及时发现未知威胁。


      参考文章:

      http://cloud.tencent.com/developer/article/1621021