为什么明明是TLS,你的冰蝎流量还是被检测到了
字数 1395 2025-09-01 11:26:03

冰蝎HTTPS流量特征分析与JA3指纹绕过技术详解

一、TLS加密流量检测的必要性

1. 外到内流量检测(攻击者上传WebShell)

  • 现实挑战
    • 客户侧难以配合安装代理证书
    • HTTPS证书管理混乱
    • 不同安全产品厂家的兼容性问题
  • 检测困境:当服务器被植入冰蝎、哥斯拉等WebShell时,如何在不解密TLS流量的情况下检测恶意通信

2. 内到外流量检测(终端中毒C2连接)

  • 典型场景:终端用户被钓鱼攻击后,恶意程序通过TLS与外部C2服务器通信
  • 检测难点:当代理解密不可行时,如何识别此类恶意TLS连接

二、常见TLS流量检测方式

1. JA3指纹检测

  • 检测原理:基于TLS握手阶段ClientHello中的特征字段
    • TLS版本
    • 支持的Cipher Suites
    • 支持的Extensions
    • 椭圆曲线(Elliptic Curves)
    • EC Point Formats

2. TLS证书特征检测

  • 常见检测点
    • 相同的自签名信息
    • 不合理的有效期
    • 异常的公钥长度
  • 典型工具:常用于检测Cobalt Strike、Sliver等C2工具

3. 流量元数据特征检测

  • 检测维度
    • 可疑域名(极长子域名、随机字符串)
    • TLS连接频率异常
    • IP归属异常

4. 机器学习与图模型检测

  • 技术现状
    • 学术研究较多(关键词"Encrypted Malicious Traffic")
    • 工业界实际应用较少
    • 国内落地平台不多

5. 其他检测方式

  • 可识别的明文片段
  • TLS通信结构异常

三、冰蝎流量特征分析

1. 可修改的特征空间

  • 已支持自定义

    • UA头(冰蝎4已支持)
    • Header
    • POST数据发送/接收方式(通过自定义通信协议调整)
  • 主要操作空间

    • Accept头部
    • JA3指纹
    • TLS证书

2. 技术实现限制

  • HTTPS请求通过okhttp发起(源码位于net.rebeyond.behinder.utils
  • okhttp和Java其他HTTPS请求类底层使用SSLSocketFactorySSLContext
  • JA3指纹基本由JDK决定

四、绕过JA3指纹的方案

方案一:使用第三方类库

  • 实现方式
    • 使用不依赖SSLSocketFactory/SSLContext的第三方库
    • JNI方式调用C/C++实现的OpenSSL
    • 使用native socket实现TLS握手

方案二:自实现TLS握手

  • 技术要点
    • 修改JNI,自行构建TLS协议栈
    • 从TLS ClientHello开始构建各字段
    • 完全控制字段内容以构造任意JA3指纹

方案三:中间人代理修改JA3

  • 实施步骤
    1. 使用Burp Suite作为中间人代理
    2. 搭配burp插件burp-awesome-tls修改TLS握手参数
    3. 修改默认CA证书内容以避免特征识别

其他适用方案

  • 部分Cobalt Strike的JA3指纹绕过方式也可用于冰蝎

五、总结与建议

  1. 冰蝎HTTPS流量具有明确的TLS特征,但相比Cobalt Strike研究较少
  2. 通过理解JA3组成结构并控制TLS握手逻辑,可实现有效指纹混淆
  3. 建议结合多种方案进行综合绕过,如同时修改JA3指纹和证书特征
  4. 对于高级场景,可考虑自实现TLS协议栈以获得最大控制权

参考资料

  1. FreeBuf相关文章
  2. 知乎专栏文章
  3. 腾讯云开发者社区
  4. 博客园技术文章
冰蝎HTTPS流量特征分析与JA3指纹绕过技术详解 一、TLS加密流量检测的必要性 1. 外到内流量检测(攻击者上传WebShell) 现实挑战 : 客户侧难以配合安装代理证书 HTTPS证书管理混乱 不同安全产品厂家的兼容性问题 检测困境 :当服务器被植入冰蝎、哥斯拉等WebShell时,如何在不解密TLS流量的情况下检测恶意通信 2. 内到外流量检测(终端中毒C2连接) 典型场景 :终端用户被钓鱼攻击后,恶意程序通过TLS与外部C2服务器通信 检测难点 :当代理解密不可行时,如何识别此类恶意TLS连接 二、常见TLS流量检测方式 1. JA3指纹检测 检测原理 :基于TLS握手阶段ClientHello中的特征字段 TLS版本 支持的Cipher Suites 支持的Extensions 椭圆曲线(Elliptic Curves) EC Point Formats 2. TLS证书特征检测 常见检测点 : 相同的自签名信息 不合理的有效期 异常的公钥长度 典型工具 :常用于检测Cobalt Strike、Sliver等C2工具 3. 流量元数据特征检测 检测维度 : 可疑域名(极长子域名、随机字符串) TLS连接频率异常 IP归属异常 4. 机器学习与图模型检测 技术现状 : 学术研究较多(关键词"Encrypted Malicious Traffic") 工业界实际应用较少 国内落地平台不多 5. 其他检测方式 可识别的明文片段 TLS通信结构异常 三、冰蝎流量特征分析 1. 可修改的特征空间 已支持自定义 : UA头(冰蝎4已支持) Header POST数据发送/接收方式(通过自定义通信协议调整) 主要操作空间 : Accept头部 JA3指纹 TLS证书 2. 技术实现限制 HTTPS请求通过okhttp发起(源码位于 net.rebeyond.behinder.utils ) okhttp和Java其他HTTPS请求类底层使用 SSLSocketFactory 或 SSLContext JA3指纹基本由JDK决定 四、绕过JA3指纹的方案 方案一:使用第三方类库 实现方式 : 使用不依赖 SSLSocketFactory / SSLContext 的第三方库 JNI方式调用C/C++实现的OpenSSL 使用native socket实现TLS握手 方案二:自实现TLS握手 技术要点 : 修改JNI,自行构建TLS协议栈 从TLS ClientHello开始构建各字段 完全控制字段内容以构造任意JA3指纹 方案三:中间人代理修改JA3 实施步骤 : 使用Burp Suite作为中间人代理 搭配burp插件 burp-awesome-tls 修改TLS握手参数 修改默认CA证书内容以避免特征识别 其他适用方案 部分Cobalt Strike的JA3指纹绕过方式也可用于冰蝎 五、总结与建议 冰蝎HTTPS流量具有明确的TLS特征,但相比Cobalt Strike研究较少 通过理解JA3组成结构并控制TLS握手逻辑,可实现有效指纹混淆 建议结合多种方案进行综合绕过,如同时修改JA3指纹和证书特征 对于高级场景,可考虑自实现TLS协议栈以获得最大控制权 参考资料 FreeBuf相关文章 知乎专栏文章 腾讯云开发者社区 博客园技术文章