Skip to content

关于 v4.23.2 前固定 TLS 密码套件潜在的特征识别风险 #2518

@nicholascw

Description

@nicholascw

出于该改动可能有部分兼容和安全等影响,开此新置顶 issue 用作通知。原 issue 虽然已经解决,但可能近期仍有部分讨论故移动至 v2ray/discussion

TL;DR: 正在使用 TLS 和 WebSocket 功能的用户且担心使用环境中有潜在的指纹识别风险的,应当升级 TLS 客户端侧到 v4.23.2 或更高版本。

“漏洞”到底“漏”了什么?

客户端代码中使用了一个固定的 TLS 密码套件列表进行握手,这个固定列表可能在 V2Ray 客户端发送 TLS 握手包时被防火墙用作识别 V2Ray 客户端的特征。

“漏洞”存在多长时间?

v2ray-core 项目在 2018 年中的版本(v3.23.1)中引入了 TLS 底层配置的功能,此后这个列表便一直存在于代码中。2019 年的版本(v4.18.1)中因为加入 TLS 1.3 的支持,列表增加了一些项目。

目前处理方法?

Golang 标准库的 crypto/tls 也在活跃的维护当中,已经有完善了密码套件的选择机制,标准库会根据运行的硬件平台性能选择适当的密码套件顺序。

新版本(v4.23.2+)去掉列表,设为空值(nil),由 Golang 底层处理。

后续改进?

进一步避免指纹被侦测的另外一个思路是把 TLS 配置成跟常见浏览器一致(注:浏览器不同版本的 TLS 指纹都有所区别)。目前有项目 (如 tlsfingerprint.io) 在关注这个问题。

对 V2Ray 项目而言,这属于功能性加强,会在后续版本中引入由 uTLS 库提供的伪装指纹功能。

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions