观成科技:冰蝎内存马加密流量分析
一、概述
冰蝎(Behinder)是一款采用加密通信机制的Webshell管理工具,因其动态密钥协商、强加密传输、多种协议支持等特性,被广泛用于红蓝对抗与APT攻击活动中。在近些年的攻防对抗场景中,冰蝎内存马越来越受攻击方青睐,与传统的冰蝎Webshell使用场景不同——攻击者将 JSP/PHP 后门文件上传至服务器 Web 目录——冰蝎内存马(Memory Shell)通过中间件漏洞(如反序列化、表达式注入)直接将恶意Agent注入到 Java 虚拟机的运行时内存中,以Servlet、Filter或 Listener的形式注册在 Web 容器内部。由于内存马不在磁盘上留下任何文件,传统基于文件哈希和文件扫描的终端检测手段很难发现,给安全防护带来严峻挑战。
在网络流量层面,攻击者通过冰蝎内存马能够执行系统命令、管理文件、建立隧道等操作,且所有控制流量均经过 TLS 加密传输,给传统基于DPI的流量检测技术带来挑战。我们通过分析冰蝎内存马的通信架构——特别是TCP连接复用策略与加密记录传输模式——在加密流量侧信道层面尝试找到可被系统性识别的行为特征,从而形成基于通信行为的冰蝎内存马TLS流量检测能力。
1、冰蝎内存马通信流程
图1 冰蝎内存马通信流程与行为检测
冰蝎内存马的一次完整命令控制周期包含以下几个阶段:
(1)阶段一:内存注入
攻击者利用目标 Web 容器的漏洞(如Fastjson反序列化、Log4j JNDI 注入、Spring EL 表达式注入等)将冰蝎Agent注入到 JVM 运行时中。该 Agent 注册为 Servlet、Filter 或 Listener,持续监听加密的 HTTP POST 请求。Agent 仅存活于内存空间中,不在磁盘上产生任何文件。
(2)阶段二:密钥协商
冰蝎客户端(Behinder.jar)向目标发送首次HTTP POST请求。请求体中包含经 AES 加密的密钥协商载荷。服务端 Agent 解密后获取会话 AES 密钥,并返回加密的响应确认。每个独立 TCP 连接会生成独立的 AES 密钥对(128位或256位),确保前向安全性。
(3)阶段三:命令加密投递
攻击者在冰蝎客户端界面上选择操作类型(命令执行、文件管理、虚拟终端等),客户端将操作指令序列化为JSON格式,经AES加密和base64编码后封装为 HTTP POST 请求体,再通过 TLS 协议加密发送至服务端。
(4)阶段四:服务端解密执行
服务端内存马Agent接收到HTTP请求后,从TLS解密后的 HTTP 载荷中提取base64数据,完成 base64 解码和 AES 解密,还原出操作指令明文。Agent根据指令类型调用 Runtime.exec() 执行系统命令,或通过Java IO API进行文件操作,将执行结果加密后封装为HTTP响应返回给客户端。
(5)阶段五:结果解密展示
冰蝎客户端从 HTTP 响应中提取加密数据,完成解密后展示给攻击者,完成一次完整的命令控制循环。
二、加密流量分析
冰蝎内存马的加密流量特征与有文件落地的常规冰蝎流量特征极其相似,分析可以从加密连接复用策略、TLS 记录传输模式、多流时序特征以及TLS指纹信息四个维度切入,实现对内存马加密流量侧信道特征的系统性提取。
1、连接复用策略特征
在高维流量分析视角下,TCP 会话层的连接复用策略是区分冰蝎内存马与传统 Webshell通信模式最显著的维度。也是冰蝎内存马与有文件落地的传统冰蝎Webshell之间最显著的流量特征差异。直接反映了客户端连接池的管理策略。
通过分析几组冰蝎有文件落地的流量样本与冰蝎内存马流量样本的 TCP 会话结构,我们发现冰蝎内存马在连接复用策略上呈现出高度规律性:
图2 内存马连接特征
内存马连接模式:
流1: 请求→响应(十几条TLS记录)
流2:请求→响应(十几条TLS记录)
流3:请求→响应
图3 有文件落地连接特征
有文件落地连接模式:
流1:请求①→响应①→请求②→响应②→…→请求N→响应N(几十到上百条TLS记录)
流2:请求①→响应①→请求②→响应②→…→请求M→响应M
统计数据显示:
内存马:每个 TCP 流承载十几条 TLS Application Data 记录,对应一次完整的请求-响应交换;
有文件落地:每个 TCP 流承载几十到上百条 TLS Application Data 记录,在同一连接内复用了多次操作。
这一差异的根本原因在于:冰蝎内存马的 HTTP 连接在完成一次请求-响应后即通过 Connection: close 断开,每次操作都建立新的 TCP 连接;而传统冰蝎 Webshell 的客户端实现中,HTTP 连接默认启用 Keep-Alive 机制,在同一连接内复用多个操作。
2、TLS 记录大小分布特征
冰蝎所有操作载荷均遵循固定的加密封装流程:操作指令明文 → JSON 序列化 → AES-GCM 加密 → Base64 编码 → HTTP POST 传输 → TLS Record 分片。由于分组加密后的密文长度与明文长度存在关联,加上 TLS Record 层的固定协议开销,冰蝎的TLS Application Data在记录大小维度上呈现出稳定的分布模式。
图4 Tls Application Data大小分布规律
通过统计六个样本的 TLS 记录大小分布,我们观察到以下特征模式:
记录大小 | 内存马出现频率 | 有文件落地出现频率 | 说明 |
数千字节 | 高 | 高 | 冰蝎最大化 TLS Record 块,加密载荷主体 |
几百字节 | 高 | 低 | 上行小确认包,密钥协商/指令确认 |
几十字节 | 高 | 中 | TLS Record 层边界确认包 |
数百到上千字节 | 低 | 中 | 小命令(命令执行返回少量数据)/分块传输场景 |
内存马场景下每条流均包含数千字节的大块(对应加密后的请求体或响应体)和若干几百/几十字节的小确认包,形成了可被量化的记录大小指纹。
特别值得关注的是,内存马每个流的请求-响应周期中,大块必然出现 有限次——分别对应 AES 加密载荷的若干TLS分片。这种确定性数量关系构成了与正常Web流量(大分块出现频率和次数不可预测)的核心区别。
3、多流时序特征
内存马的人机交互特性在 TCP 流的时间轴上留下了独特的时序指纹,可以引入多个量化指标来描述这些特征。通过对样本的流启动时间进行排序分析,可以发现:
图5 内存马Tcp流时序统计图
流间无重叠:后一条 TCP 流的首包时间晚于前一条流的尾包时间,流与流之间无并发。
操作间隔规律:相邻流之间的启动时间间隔体现攻击者阅读命令输出、输入下一条指令的操作节奏。
流内稳定性:同一会话内TLS 记录数维持稳定。
与之形成对比的是自动化脚本或正常业务流量的流间时序:自动化脚本通常以固定间隔机械化发起请求,而正常业务流量中的并发请求则会产生流的时序重叠。
4、TLS 指纹特征
冰蝎客户端的TLS协议栈实现存在稳定的配置指纹,可通过提取TLS限定域指纹对其建立TLS连接的过程进行描述。
图6 冰蝎TLS握手包
三、产品检测
图7 产品检测告警
观成瞰云(ENS)-加密威胁智能检测系统能够基于上述加密流量侧行为特征对冰蝎内存马通信行为进行有效检出。系统通过采集引擎实时捕获和解析 TLS 加密会话,利用多维特征结合算法实现高精度行为判定。
四、总结
冰蝎内存马作为无文件攻击的重要载体,虽然规避了传统的文件扫描和WebShell检测手段,但其通信架构的本质在加密流量侧信道层面留下了可供系统性识别的行为指纹。观成科技安全研究团队将持续跟踪冰蝎工具版本的迭代,及时更新和优化相应的检测策略,保持对该威胁活动的即时防护能力。
