为什么明明是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请求类底层使用
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协议栈以获得最大控制权