查看: 5737|回复: 0

从流量加密到内存攻击:冰蝎Webshell的狂飙式发展

[复制链接]
匿名
匿名  发表于 2023-3-16 21:29:15 |阅读模式

赛博空间,攻防之战,此起彼伏矛与盾的对决,攻与守的碰撞在这里,我们一起来看道德黑客使用了哪些杀手锏正义蓝军如何见招拆招
qw3.jpg

冰蝎是一个Webshell工具,在每年的攻防演练中,都是攻击队武器库中必不可少的一个大杀器。而且,随着攻防双方激战不断升级加剧,冰蝎每年都会在攻防演练开始后进行版本更新,每次更新都让防守方手忙脚乱。在2022年的攻防演练开始后,冰蝎更新了4.0版本,随后蓝队红队、甲方乙方都马上开始研究,重视程度不言而喻。本文就来分析一下冰蝎横空出世的背景,以及如何在几年时间内经历狂飙式发展到和webshell几乎等价的,以及冰蝎带来的颠覆性变化。
Webshell

1. 冰蝎横空出世

Webshell作为一种web渗透常用的方法可谓家喻户晓。随着攻防对抗不断升级,攻击方在使用webshell过程中,也遇到了一些挑战:

挑战1:jsp webshell灵活性很差


Java是最流行的业务开发语言,其与php/asp/aspx最明显的区别是,后三种语言都有一个eval函数,可以把任意字符串作为代码执行,同时也有能执行系统命令的函数,比如php的system();而java只能使用Runtime.exec()执行系统命,无法把字符串作为代码执行。换言之,想要执行java代码,只能重新传一个新的webshell,比如在上传了一个一句话木马后,攻击者想挂载一个web代理,就只能重新再传一个代理的webshell。

qw4.jpg

挑战2:急需全自动的流量对抗机制  


随着流量对抗越来越深入,WAF越来越普及,不做流量加密,Webshell几乎没有使用的机会。举例而言,一般的一句话webshell连接流量如下:

qw5.jpg

虽然部分流量做了base64编码,但仍有非常多的特征可以被检测到。若要不被检测到,则需要流量中只有纯粹的二进制字符串,且每次都不同。

在这种背景下,冰蝎1.0横空出世。

Wehbshell

2. 冰蝎解决了“两大难题”

解决流量加密问题  

冰蝎是典型的C/S架构,需要配套使用,冰蝎的webshell是服务端,jar包是客户端,这也是流量对抗的必然结果。自动化流量加解密,用来解决挑战2,其工作流程如下图所示。
qw6.jpg

冰蝎使用起来和传统的一句话webshell、中国菜刀的方式没什么区别,但冰蝎自动封装了流量加密。冰蝎在第一次请求时会协商密钥,后面所有的流量不管是请求还是响应,都是加密后的纯二进制字符串。但第一次协商密钥的请求还是带有一定特征,因此,冰蝎3.0时去掉了预协商机制,使用预共享密钥,即把密钥写死在webshell中,在客户端连接时手动输入,实现了全流量加密。

qw7.jpg

解决Jsp Webshell不灵活问题  

流量加密本身并不难,很多自己开发的工具也实现了类似效果,但冰蝎创造的一句话webshell颠覆了Java攻防,直接把Java攻防技术推进到下一个时代。

Java中没有提供把字符串当做代码执行的接口,但代码总归是要执行的,Java的代码执行都是基于JVM虚拟机和Class文件,简化步骤如下:

1. JVM收到执行请求,将Class文件的字节码加载到内存

2. 对字节码进行解析,得到一个java.lang.Class对象

3. 通过java.lang.Class对象,调用里面的方法

冰蝎的作者提出,不能直接把字符串格式的代码发过去执行,那可以发class字节码,让服务端去解析,然后执行。笔者认为这里有三个关键思路:

* 服务端动态加载Class执行

* 巧妙调用equal()方法传入上下文的requset和response

* 客户端动态修改Class文件中的属性值

在原作者的文章中都有详细分析 https://xz.aliyun.com/t/2744

qw8.jpg

综合下来,这种方法变相实现了Java任意代码执行,也把类动态加载这个关键技术摆在台面上。同时由于.Net架构和Java很相似,同样的思路在asp/aspx上也能实现。例如,下面的asp Webshell源码也可以实现类似效果:

qw9.jpg

冰蝎1.0发布后,原来Runtime.exec()的Jsp一句话webshell被扔到了垃圾桶,无论是使用冰蝎,还是修改冰蝎,或者手写新客户端,Jsp和Asp的Webshell都脱离不开冰蝎的基本模式,冰蝎开始替代一句话木马成为Webshell技术最常讨论的话题。

Webshell

3. 冰蝎3.0:内存攻防时代

随着冰蝎的不断更新,功能越来越完善,到3.0已经具备了红队需要的各种功能,特别是反弹shell的msf和cs上线,以及自定义代码执行,灵活性很强。基本做到开箱即用且功能齐全,唯一的问题是,工具流行之后,webshell本体容易被查杀,需要做webshell本体的免杀。

qw10.jpg

由于冰蝎把类动态加载这个关键技术摆在台面上,在一段时间的研究后,Java内存马已经有了很多可用的思路,比如新增filter,只从内存操作,不依赖落地文件,就能访问到内存中的Webshell,这就解决了webshell本体免杀问题。

这种情况下冰蝎更新v3.0 beta7版本,增加了Java内存马功能,并且使用了更高级的Java Agent技术,通过hook Java进程中原本正常的类,实现内存马功能,并在beta8增加了内存马防查杀机制。

qw11.jpg

至此,冰蝎成为了一个完美的开箱即用的工具,本体内存马免杀,流量免杀,功能齐全,兼容性好,在连续几年的攻防演练中,成为最热门的工具。

Webshell

4. 冰蝎4.0:流量加密再上新高度

在去年的攻防演练中,冰蝎更新了4.0版本,增加了webshell生成功能,可以完全自定义流量加密方法,对流量加密的灵活性又大大增加。

qw12.jpg

因此,目前在webshell工具领域,冰蝎独占鳌头。在去年的攻防演练中统计到的webshell有效攻击中,有80%都是使用的冰蝎或冰蝎变种,足以证明冰蝎的强大功能。

Webshell

5. 冰蝎的检测

冰蝎虽然强大,但也只是一个工具。在实战应用,总是需要一个入口,无论是先上传webshell再注入内存马,还是直接用漏洞注入内存马,总是有一些痕迹。在检测冰蝎时,主要有两个思路:

1. 对于先上传webshell的攻击,按照传统的webshell落盘检测即可。攻防对抗的关键主要在于文件落盘时间短,能否抓到对应文件。

2. 对于内存马的检测,这是目前攻防对抗的主战场。常用的检测机制是java agent,目前也已经有了很多使java agent无效的对抗方案。

目前青藤万相的webshell和内存后门功能已在上面这两方面覆盖了对冰蝎4.0的检测。

检测思路1:利用传统的字符串匹配与文件相似度检测,针对执行函数和类加载函数进行字符串匹配。

qw13.jpg

检测思路2:青藤雷火·AI Webshell检测系统,将动态检测方法和AI推理相结合,把复杂的变形和混淆回归成等价最简形式,也就是使用函数执行外部输入的代码,或者加载外部输入的字节码,还原后用AI推理的方式给出结果。

qw14.jpg

关于作者:

yps233:青藤73lab实验室成员,主要研究webshell和内存webshell攻防对抗。

-完-





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

旗下站点

邮箱系统

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

GMT+8, 2024-4-26 21:30 , Processed in 0.028357 second(s), 13 queries , Gzip On, MemCache On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部