来源: https://habr.com/ru/articles/1041486/
伪造 TLS 已经无法解决问题——我正在研究“协议签名分析”的技术含义,为什么流量统计信息会显示代理,以及这场竞争的极限在哪里。
2026年5月下旬,RuNet(俄罗斯网络)爆发了大规模MTProto代理服务器宕机的事件。用户用来绕过Telegram限速的代理服务几乎同时对所有运营商失效。“杜罗夫代码”网络记录了前所未有的投诉数量。技术频道充斥着诸如“RKN(俄罗斯网络)加大了封锁力度,导致无法绕过”之类的标题。
我想从工程学的角度,而不是从新闻的角度来分析这件事: “DPI 已经学会分析协议签名”这句话背后的技术原理是什么?为什么多年来一直有效的 Fake-TLS 机制突然停止工作?即使有效载荷已加密,代理还会泄露哪些基本的流量属性?
首先让我明确一下本文的类型。本文是对协议检测理论的 分析——该领域融合了网络分析、统计学和深度包检测(DPI)技术。本文并非绕过封锁的指南:这里不会提供任何“让你的协议为你所用”的具体方法;这方面有专门的资源。本文的目标是理解检测的技术结构,因为它本身就是一个有趣的工程挑战,而且理解其机制对于任何从事网络工作的人员都大有裨益。
简要介绍:什么是 MTProto 和 Fake-TLS?
要想进行实质性的对话,需要一个基础。
MTProto 是 Telegram 的专有传输协议。它的设计不仅是为了加密,也是为了在流量过滤环境下运行。Telegram 内置了代理机制 MTProxy,它直接在客户端运行,无需额外的软件。
MTProxy 近年来最关键的特性是Fake-TLS (也称为 FakeTLS 或填充 TLS)。其理念是将连接伪装成普通的 HTTPS 连接。当您访问任何 HTTPS 网站时,客户端和服务器之间会进行 TLS 握手——交换 ClientHello 和 ServerHello 消息以及密钥。Fake-TLS 会封装 MTProto 流量,使初始连接看起来像是与合法域名建立的合法 TLS 1.3 握手。
对于只检测连接起始阶段的深度包检测(DPI)来说,它看起来就像一次普通的网站访问。因此,多年来,伪造TLS的MTProxy轻松绕过了各种过滤器——系统无法将其与常规网页浏览区分开来,除非彻底破坏HTTPS协议。
它奏效了。在某种程度上。
第一阶段:TLS握手检测(之前发生了什么)
第一层检测手段于2026年初启用,即分析TLS握手本身。这里有一个需要理解的微妙之处。
伪造的 TLS 协议模仿 TLS,但并不完美。真正的浏览器 TLS 协议栈(例如 Chrome 中的 BoringSSL 和 Firefox 中的 NSS)会生成一个 ClientHello 消息,其中包含一组特定字段,且顺序也必须符合特定要求:密码套件列表、扩展、椭圆曲线、点格式、ALPN 和签名算法。这个“指纹”被称为JA3 (及其后续版本 JA4)——它是 ClientHello 参数的哈希值,用于识别客户端库。
MTProxy 的 Fake-TLS 实现与真实浏览器存在差异**。** 虽然差异不大,但可以测量出来。在某些情况下,扩展程序的顺序不同;在另一些情况下,真实 Chrome 浏览器中存在的某个扩展程序缺失;还有一些情况下,密码套件集与当前浏览器版本不匹配。
DPI 可以比对常用浏览器的 JA3/JA4 指纹:这里有一个 ClientHello 请求,声称来自 Chrome,但它的 JA3 哈希值与任何真正的 Chrome 版本都不匹配。如果可疑,请将其标记出来。
2026年3月至4月间,情况正是如此。TSPU收到了更新后的规则,可以检测TLS指纹不匹配的情况。代理开发者随即调整了指纹以适应当时的浏览器——一场经典的意志与力量的较量。
但握手检测存在一个根本性的局限性:指纹可以被伪造 。如果您知道最新版本 Chrome 使用的确切 JA3 信息,就可以生成一个完全相同的 ClientHello 消息。这需要一定的工程技术投入,但从根本上来说并不现实。因此,监管机构已经转向更高层次的检测方法,大大增加了伪造的难度。
步骤二:协议特征的统计分析
从技术角度来看,事情到这里就变得非常有趣了。这项于2026年5月底提到的新进展,不仅涉及分析握手过程,还涉及分析整个连接过程中的流量行为 。
关键在于:即使初始连接被完美地伪装成TLS,后续的数据交换仍然遵循另一种协议 ——MTProto的逻辑。而每种协议都有其统计不变性,如果不破坏协议本身,就很难将其隐藏起来。
具体分析的是什么?
包装尺寸及其分布
真实的 HTTPS 流量在加载网页时具有典型的模式:开始时会出现一个较大的流量峰值(HTML、CSS、JS 和图像都包含在接近 MTU 的大型 TLS 记录中发送),随后是一段平静期,然后随着交互的进行,请求量逐渐减小。Web 会话数据包大小的分布呈现出锯齿状,具有明显的阶段性特征。
MTProto 在即时通讯模式下的行为有所不同。它以小消息流的形式传输数据,包括文本、拨号状态、ping 和送达确认等。数据包大小分布也不同:许多大小相近的小数据包,形成平滑的数据流,避免了网页浏览中常见的突发性数据包。即使经过 TLS 加密,这种模式在统计学上也与实际的网站浏览存在显著差异。
DPI 可以构建连接中数据包大小的直方图,并将其与参考配置文件进行比较。Web 会话和 MTProxy 会话产生的直方图有所不同。
时间安排和交通方向
第二个信号是时间结构。网页加载是不对称的:客户端发送的请求量很小,而服务器响应的数据量很大。网页浏览的上传/下载比例严重偏向下载。
即时通讯的流量更加对称:你发送和接收的消息大小相当。此外,它还有一个典型的“长连接”模式——连接会保持打开状态数小时,并定期发送保持连接请求。而网络连接则不然——它们持续时间很短,打开后就会关闭。
Ping 值的规律性是一个重要的指标。如果在“TLS 连接”中每隔 N 秒发送一个固定大小的数据包,这很类似于即时通讯软件的 keep-alive 机制,而不是网络连接。
熵和有效载荷结构
第三层是对加密流的熵分析。这很微妙:TLS 和 MTProto 都会加密数据,因此在两种情况下,有效载荷都表现为高熵的“噪声”。然而,TLS 记录在加密过程中的结构存在一些细微差别:它们的长度、头部和分片模式。MTProto over Fake-TLS 在传输 HTTP/2 流量时生成的记录与真正的 TLS 协议栈生成的记录不同。
IP行为相关性
最后,新闻中直接提到的一个特征是:连接到单个 IP 地址的关联性 。其逻辑如下:一个公共 MTProxy 服务于众多用户,所有用户都连接到同一个 IP 地址。如果 Fake-TLS 为所有用户模拟相同的浏览器版本(因为代理服务器使用相同的指纹),那么 DPI 就会看到一个奇怪的现象:数十甚至数百个客户端连接到同一个 IP 地址,所有客户端都使用相同的 TLS 指纹,但浏览器版本却相同,而且往往是过时的版本。
现实世界中不会发生这种情况。用户会使用不同的浏览器、不同的版本和不同的操作系统连接到同一个网站——这是浏览器指纹的自然差异。当一百个客户端都发送了完全相同的 ClientHello 消息(例如“六个月前的 Chrome 版本”)时,这显然是一个统计异常,直接指向代理服务器。
为什么这种方式有效,而且比握手更难造假?
这是关键的工程要点,也是我开始这项分析的原因。
伪造静态指纹 (JA3握手)相对简单:复制真实浏览器的设置并生成一个相同的ClientHello消息。配置完成后,在浏览器更新之前,这种方法一直有效。
伪造动态协议统计信息 从根本上来说更加困难,因为这些统计信息是由 MTProto 的运行逻辑生成的。为了确保数据包大小和时间特性与 Web 协议完全一致,您必须:
- 在真实流量之上生成虚假的“类似网络”的流量会带来巨大的开销,严重影响性能,而且仍然不是理想的解决方案;
- 正如新闻报道的那样,重写数据打包方法本身,使其在统计上与真正的基于 TLS 的 HTTP/2 协议相匹配,本质上就等同于“重构协议”。因此,最初新闻中“无法避免,Telegram 必须重构其协议”这句话并非哗众取宠。其中确实包含一些事实:仅仅进行表面修饰不足以避免统计检测;协议在模式层面生成流量的方式需要改变。
虽然“不可能”有些夸张,但并非不可能。只不过,这需要比仅仅修改一个哈希值更深层次的变革。这又是一场竞赛,只不过级别更高了。
背景:为什么这是更大竞赛的一部分
需要注意的是,MTProxy 检测只是其中一个方面。根据已发表的资料,从 2025 年 12 月到 2026 年 5 月,深度包检测 (DPI) 系统学会了通过特征码识别其他绕过协议,例如 WireGuard、OpenVPN、VLESS、SOCKS5 和 L2TP。其原理相同:每个协议都有一个统计特征码,只要拥有足够的计算能力,就可以提取出来。
绕过工具的应对策略也遵循一条清晰的路径:混淆,因为混淆不具有稳定的特征。像 AmneziaWG(一种混淆的 WireGuard)这样的协议会在流量中添加随机噪声,随机化数据包大小和时间,从而使连接没有稳定的统计特征。这是一种直接对抗统计检测的措施:如果每次连接的特征都不同,就很难建立基准进行比较。
这是一个经典的抗审查动态:检测器寻找不变的规则,绕过工具消除这些规则,然后检测器寻找新的规则。学术界对此已有详尽的描述,例如关于协议检测和混淆的论文——Tor 团队对可插拔传输的研究以及中国防火墙对 Shadowsocks 的检测。
硬件限制
还有一点需要考虑,那就是检测成本,否则情况就不完整。
TLS握手分析成本很低:它检查连接的前几个数据包,计算哈希值,并将其与数据库进行比较。这可以对所有流量实时进行。
统计行为分析成本更高 。要构建数据包大小直方图和时间分布图,需要监控连接随时间的变化,积累连接状态并计算统计数据。这需要为每个连接和计算分配内存。当并发连接达到数百万时,硬件负载将呈指数级增长。
2026年4月,发生了一起具有代表性的事件:当尝试向TSPU加载大量过滤规则时(据文献报道,数量约为4万条,而通常情况下为1万至1.5万条),系统绕过了一些节点——也就是说,开始未经过滤地放行流量,包括之前被屏蔽的资源。这直接源于深度分析需要消耗大量资源,而设备的整体吞吐量是有限的。
这就产生了一个有趣的悖论,专家们也注意到了这一点:启用代理的用户越多,过滤系统的负载就越大,而其在其他所有方面的性能却越差。基于统计的检测会加剧这种影响,因为它比简单的握手验证成本更高。
原始新闻报道中哪些是事实,哪些是夸大其词?
由于原因涉及一条具体的新闻,我将从技术角度分析其措辞。
“DPI不仅分析握手数据,还分析协议特征——数据包大小、指纹” ——从技术上讲是正确的。从握手分析转向行为统计分析是这种新方法的精髓所在。
“如果不同客户端使用相同旧版本浏览器连接到同一个IP地址,则表明存在代理”的说法 正确且合乎逻辑。这是基于IP地址的行为关联,是一种有效且计算成本低廉的指标。
“现在完全无法避免”这种说法 有些夸张。更准确地说,“仅仅通过修改指纹外观是无法避免的”。统计检测可以通过随机混淆来规避,而这类方法确实存在(例如AmneziaWG)。这场竞赛才刚刚开始,远未结束。
“Telegram需要彻底重新设计其协议” 这句话部分正确。要让Fake-TLS再次难以区分,需要改变的并非指纹,而是流量的生成方式——这远不止是哈希替换那么简单。但“彻底重新设计”的说法未免有些夸张。
这是一则典型的科技新闻报道:基本事实是正确的,但结论被夸大到“一切都完了”的地步。
我们能从中吸取到什么有用的经验?
除了 Telegram 这个具体案例之外,还有几点想法。
有效载荷加密并不会隐藏流量元数据。 这是一项基本原则。即使内容完全加密,数据包大小、传输时间、方向和连接持续时间仍然可见。流量分析本身就是一门强大的技术,它可以在任何加密方式之上发挥作用。这不仅适用于规避审查,例如,还可以用于在 Tor 网络中基于传输时间和加密即时通讯工具中数据包大小泄露的信息进行去匿名化。
静态指纹易于伪造,但动态行为则难以伪造。 这是所有检测系统的基本原则。一次即可复制的签名保护力度较弱。由系统逻辑自身生成的行为不变性则是一种更为可靠的指标。这适用于反欺诈、机器人检测和设备指纹识别。
任何检测都需要付出代价。 分析越深入,计算成本就越高。这就造成了一个根本性的限制:系统可能会因数据量过大而过载。因此,防御和攻击始终都与计算经济学有关,而不仅仅是算法。
针对特征码的混淆旨在消除不变性。 避免被统计方法检测到的最佳方法是消除稳定的统计特征。例如,随机化大小、时间,添加噪声。这是一种反制技术,可以对抗任何寻找稳定模式的检测器。
恢复
2026年5月MTProxy事件的改变,标志着检测方式从“连接开始时的状态”转向了“连接随时间推移的行为”。从技术角度来看,这是一个合乎逻辑的转变:握手分析很容易被指纹伪造所绕过,因此监管机构转而采用更难伪造的统计分析。
这并非“Telegram的末日”或“无法绕过”——这只是检测与协议混淆之间长期博弈的新一轮。统计检测反过来又可以通过流量随机化来规避,而这方面的工具早已存在。与此同时,整个系统也达到了计算能力的极限——深度流量分析——这是一个客观存在的限制。
纯粹从工程角度来看,这是一个融合了网络分析、统计学和检测理论的引人入胜的问题。理解其机制的意义远不止于网络拦截——同样的原理也适用于流量分析、反欺诈、机器人检测和加密信道分析。