通过域前置突破通讯限制
这篇文章第一次提出了域前置(Domain Fronting)技术,该技术被应用于Tor的meek和Snowflake两种可插拔传输协议中。
加利福尼亚大学伯克利分校 | 通过域前置突破通讯限制
原文标题:Blocking-resistant communication through domain fronting
原文作者:David Fifield, Chang Lan, Rod Hynes, Percy Wegmann and Vern Paxson
原文链接:https://petsymposium.org/popets/2015/popets-2015-0009.php?ref=internet.exchangepoint.tech
发表期刊:Proceedings on Privacy Enhancing Technologies, 2015
1、引言
本文首次提出了域前置(Domain Fronting)技术。在Tor的四种可插拔传输协议中,meek和Snowflake均使用了该技术。域前置通过修改HTTPS请求内部的HTTP头部信息,实现规避网络流量审查。其核心原理是在不同协议层使用不同的域名:外层(DNS请求和TLS的SNI字段)使用审查系统允许的伪装域名,而内层(加密的HTTP Host头)则携带被审查机构封禁的域名,从而绕过基于SNI的检测机制。由于许多大型内容分发网络(CDN)支持该机制,封锁域前置技术意味着需屏蔽整个CDN服务,代价极高。域前置已成功应用于Tor、Lantern、Psiphon等抗审查工具,其中最具代表性的便是Tor中的meek网桥。
2、威胁模型
域前置技术的威胁模型包含4部分:审查机构(Censor)、客户端(Client)、中间Web服务(Intermediate Web Service)及隐藏目标(Covert Destination)。域前置的目的是帮助被审查客户端通过中间Web服务与隐藏目标间接取得联系。
审查机构:审查机构是掌控国家级网络的主体,负责监控并限制网络通信,具备全面的流量分析、封锁、注入及干预能力。其主要目标是阻止客户端直接访问受限资源,限制其与隐藏目标建立连接;同时,为了维持网络的正常运行,允许访问某些合法的中间服务。
客户端:客户端是位于审查网络内部的用户设备,旨在通过绕过审查机制访问受限资源。客户端与隐藏目标协作,利用中间服务的合法通信渠道隐藏真实目的,以规避审查者的检测和封锁。
中间Web服务:中间Web服务是位于审查网络外部的第三方服务,通常为大型内容分发网络(CDN)或Web服务器。它无需主动配合客户端,仅需保持中立、不与审查机构合谋,正常处理加密请求即可。以此间接地为客户端与隐藏目标的通信提供掩护。
隐藏目标:隐藏目标指的是客户端试图连接的代理服务器,通常部署于审查网络之外,负责中转客户端对受限资源的访问请求。该服务器与客户端协同工作,利用域前置或非域前置等技术,通过中间服务提供的加密通道隐藏其真实位置和身份,从而规避审查者的识别与封锁。
3、技术原理
如上图结构所示,域前置通过在HTTPS加密通信中隐藏真实域名,规避流量检测。该技术利用合法的前置域名进行DNS请求和TLS握手,而将实际要访问的违规域名置于加密保护的HTTP Host头中。由于Host头在TLS加密通道内传输,审查机构无法窥探其内容,但前端服务器(Frontend server,接收伪装流量的第三方服务器)可根据该头将请求转发至违规域名所绑定的服务器,从而实现流量规避。
为应对无可用域名的通信环境,“无域前置”(Domainless Fronting)作为域前置技术的一种变体,专门针对缺乏前置域名支持的场景设计。其核心机制是省略DNS请求以及TLS握手阶段的SNI字段。在该模式下,通信表面上看起来像是客户端直接通过IP地址访问HTTPS服务,从而使审查机构难以基于域名特征进行识别与封锁。
域前置通过利用CDN的“源拉取”(origin pull)机制,实现绕过审查。在CDN架构中,当边缘服务器接收到一个未缓存的资源请求时,会根据HTTP请求中的Host头信息,将请求转发至对应的源服务器。尽管客户端表面上请求的是一个与实际目标无关的前置域名,审查机构只能看到对该前置域名的访问,而无法获知真正的通信目的地。边缘服务器在解密请求后,会读取其中的Host头,并将请求转发至真实的源服务器。
4、可用的第三方服务
本文中,作者列举了7种知名的第三方服务,并分别做了测评。
- Google App Engine:Google App Engine支持用户在
appspot.com
子域上托管Web应用,可利用多个Google域名进行域前置以绕过审查。通过部署轻量级的反射器,可将流量通过反射器转发至外部代理服务器。 - Amazon CloudFront:Amazon CloudFront是AWS提供的CDN服务,会自动生成
cloudfront.net
子域与源服务器进行绑定。用户可通过其他cloudfront.net
子域或DNS别名进行域前置,无需部署反射器。 - Microsoft Azure:Microsoft Azure是一个集成CDN功能的云平台,自动分配
vo.msecnd.net
子域名,支持域前置。用户可选择如ajax.aspnetcdn.com
等高封锁代价的域名作为前置域名,但只能将请求转发至Azure相关域名,因此需部署反射器以转发至外部代理。 - Fastly:Fastly是一款高性能CDN,默认要求SNI与Host头一致,否则会返回HTTP 400错误,因此不支持常规域前置。但若省略SNI字段,则可使用任意Fastly域名实现“无域前置”方式绕过审查。
- Cloudflare:Cloudflare是一家提供CDN与抗DDoS服务的厂商,与Fastly类似,其平台要求SNI与Host头匹配,因此常规域前置不可行。不过,亦可通过省略SNI字段,采用“无域前置”方式实现绕过。
- Akamai:Akamai是全球规模最大的CDN服务提供商之一,支持通过特殊的HTTPS域名
a248.e.akamai.net
或客户自定义的DNS别名实现域前置。然而,该服务在中国已经遭到DNS污染。 - Level 3:Level 3是一级网络运营商,也提供CDN服务。尽管其不直接支持域前置,但可通过
secure.footprint.net
下不同的URL路径模拟类似功能,即以路径而非Host头作为隐藏标记。该服务在中国也已遭DNS污染。
5、总结
域前置是一种抗审查通信技术,通过在不同通信层使用不同的域名来隐藏真实的访问目标,借助封锁前置域名所带来的高附带损害,显著提升审查机构的封锁成本。但是域前置并非无应对措施,审查机构可尝试通过流量分析、强迫服务提供商配合或中间人攻击等方式进行干扰。
如今许多供应商已停止使用域前置技术,这也使得meek在国内已经基本被完全封禁。