引言
iyouport于2020年7月30日报告称,中国封锁了带有ESNI扩展的TLS连接,初次封锁见于2020年7月29日。我们确认中国的防火长城(GFW)已经开始封锁ESNI这一TLS1.3和HTTPS的基础特性。本文展示了如何触发审查,并探讨了“残余审查”的延续时长。我们还展示了7种基于Geneva发现的绕过审查策略。
什么是加密服务器名称指示(ESNI)?
TLS是网络通讯的安全基础(HTTPS)。TLS提供的认证加密使得用户可以确定他们在与谁通讯,并确保通讯信息不被中间人看到或篡改。虽然TLS可以隐藏用户通讯的内容,但并不能总是隐藏与用户通讯的对象。TLS握手可以携带一个叫做加密服务器名称指示(SNI)的扩展,帮助客户端告诉服务器其想要访问的网站的域名。审查者利用这一扩展来检查并阻止用户访问特定的网站。TLS1.3引入了加密SNI(ESNI),用加密的SNI阻止中间人查看客户端要访问的特定网站。
主要结论
- GFW通过丢弃从客户端到服务器的数据包来阻止ESNI连接。
- 封锁可以从GFW内外双向触发。
- 0xffce扩展标识是触发封堵的必要条件。
- 封锁可以发生在1到65535的所有端口上。
- 一旦GFW阻断了一个连接,残留的审查会继续阻断与(原IP,目标IP,目标端口)三元组相关的所有TCP流量,持续120或180秒。
- 我们发现了6种可以部署于客户端和4种可以部署于服务端的规避策略。
我们是怎么知道的?
我们写了一个简单的Python程序,完成与指定服务器的TCP握手,然后发送带有ESNI扩展名的TLS ClientHello消息。我们通过采集客户端和服务端两边的流量进行分析,确保发送ClientHello的服务器会完成TCP握手,但不会向客户端发送任何数据包,也不会首先关闭连接。所有实验均在2020年7月30日到8月6日之间进行。
关于封锁的细节
我们发现,GFW通过丢弃数据包来阻挡,而不是注入RST。通过比较两端捕获的流量,我们发现GFW通过丢弃客户端到服务器的数据包来阻止ESNI连接。
封堵可以双向触发
从防火墙外向防火墙内发送一个ESNI握手,以及从防火墙内向外发送,都可以触发审查。
GFW对ESNI进行审查,但不封锁没有SNI扩展的ClientHello
我们确认没有ESNI和SNI扩展的TLS ClientHello不会触发封锁。换句话说,encrypted_server_name扩展的0xffce是触发封堵的必要条件。
审查残留
被阻断ESNI握手后,GFW会继续阻断与(源IP,目标IP,目标端口)的三元组相关的任何连接,持续时间约为120或180秒。
转自:Geneva研究