TLS-in-TLS 检测与规避
简介
本文介绍 TLS-in-TLS(嵌套 TLS 隧道)的检测原理,以及 XTLS(特别是 XTLS Vision)如何通过分流技术消除这一特征。
本文回答
- 什么是 TLS-in-TLS 特征
- 审查方如何检测 TLS-in-TLS
- XTLS 如何通过识别内部 TLS 流量来消除嵌套特征
- XTLS Vision 流控模式的具体机制
本文在项目中的位置
本文属于背景知识层。理解 TLS-in-TLS 检测是理解 XTLS 和 Vision 流控设计动机的前置条件。
适合读者
所有想理解为什么"用 TLS 隧道传输 TLS 流量"不安全,以及 XTLS 如何解决这个问题的读者。
前置知识
TLS 记录层结构,TLS 握手流程,TCP 流的基本概念。
文章理解难度
较难。需要理解 TLS 协议的二进制结构和分流(splicing)技术的原理。
重点
- 双层 TLS 带来的可检测特征
- XTLS 的分流(splicing)核心思想
- XTLS Vision 是怎么识别 TLS 流量的
- REALITY 与 XTLS 的关系
上级文档和相关文档
主要证据
USENIX Security 论文关于 TLS 流量检测的部分,XTLS Vision 源码,nthLink 反审查白皮书。
TLS-in-TLS 是什么
当代理工具使用 TLS 作为传输层时(即客户端到代理服务端之间的通道使用 TLS 加密),而代理正在传输的流量本身也是 TLS 流量(如访问 HTTPS 网站),就会形成 TLS-in-TLS 嵌套。
这种嵌套在代理服务常见于:
- Trojan:代理流量伪装为 HTTPS,外层是到代理的 TLS,内层是到目标的 TLS
- VLESS + TLS:使用标准 TLS 作为传输安全的 VLESS
- VMess + TLS:VMess 跑在 WebSocket + TLS 上
TLS-in-TLS 的可检测特征
1. 数据包大小异常
TLS 记录层的每个记录有固定的最大长度(通常 16KB)。当 TLS 流量被封装在另一个 TLS 隧道中时:
- 外层 TLS 记录需要承载内层 TLS 记录 + 外层代理协议的头部
- 这导致外层 TLS 记录的数据部分比正常 TLS 流量偏大
正常 HTTPS 流量的 TLS 记录大小分布是已知的(由 HTTP 请求/响应的典型大小决定)。嵌套导致了偏离这个分布的可检测异常。
2. 时序特征异常
双 TLS 嵌套的握手过程具有特定的时序模式:
- 外层 TLS 握手 → 代理认证 → 内层 TLS 握手 → 应用数据
- 这个模式下,在连接建立后很快会出现第二组 TLS 握手消息
审查方可以通过分析连接建立后数据包的时间间隔来识别这种模式。
3. TLS 握手消息计数异常
正常 TLS 连接中,ClientHello 和 ServerHello 在连接的初始阶段各只出现一次。TLS-in-TLS 中,在第一组握手完成后,很快会在加密流量中检测到第二组握手的特征——即使数据是加密的,消息的数量和时序可以被观测到。
4. 加密数据内部的 TLS 结构
2022 年 10 月,据社区报告,GFW 出现了一轮大规模阻断,影响了 Trojan-go、VLESS+TLS+WebSocket 等多种 TLS 隧道协议。这被认为是 GFW 部署了针对 TLS-in-TLS 的检测。
虽然 GFW 无法解开 TLS 加密,但通过分析数据流的包大小序列和时序模式,可以推断出内部是否包含 TLS 流量。
2023 年 5 月,Xray 创建者 RPRX 发布的 Trojan-Killer POC 进一步证明了 TLS-in-TLS 检测不需要解密——只需分析 TLS 握手后首个应用数据包的大小分布即可精确定位代理服务端。
应对 TLS-in-TLS 的 XTLS Splice 分流技术和 Vision 填充策略详见 XTLS 流控机制。REALITY 与 XTLS 的协作关系见 REALITY 协议详解。
外部参考资料
资料:XTLS Vision 协议说明 类型:官方文档 链接:https://github.com/XTLS/Xray-core/discussions/1295 可信度:A
资料:nthLink 反审查白皮书 类型:技术报告 链接:https://www.opentech.fund/wp-content/uploads/2023/11/nthLink_whitepaper_are_shadowshocks_and_trojan-go_still_relevant.pdf 可信度:B,社区分析
读者自检
读完本文后应能回答:
- TLS-in-TLS 有哪些可检测特征
- XTLS 分流的技术原理
- Vision 相比基础 XTLS 的改进
- REALITY 和 XTLS 的协作方式
下一步阅读
- XTLS 流控机制详解:深入源码层面的分析
- 代理和 VPN 协议:理解不同代理协议的设计