原文标题:HTTPT: AProbe-Resistant Proxy
原文作者:Sergey Frolov, Eric Wustrow
原文链接:https://www.usenix.org/conference/foci20/presentation/frolov
视频链接:https://www.youtube.com/watch?v=d-yVARtziqM
源码地址:https://github.com/sergeyfrolov/httpt
发表会议:FOCI '20
笔记作者:孙汉林@安全学术圈
2024年3月12日,随着 Tor 浏览器的 WebTunnel 网桥的正式发布[1],其技术背后的原理也引起人们的关注。其中提到了 HTTPT 代理技术,是科罗拉多大学博尔德分校于2020年,在 FOCI '20 上发布的论文中提出的。旨在通过将流量隐藏在HTTPS服务器后面来抵抗审查机构使用越来越复杂的主动探测攻击来识别和阻止代理服务器的做法。HTTPT利用HTTPS协议的普及性,有效地融入互联网流量中,使审查机构更难检测与阻止。
主动探测攻击是一种网络审查技术,旨在识别和阻止翻墙工具(如代理服务器和VPN)。审查者首先识别出可疑的IP地址,然后向这些服务器发送特定的探测信号,例如随机数据或已知翻墙协议的握手请求,以观察服务器的响应。如果服务器按照预期的翻墙协议进行响应,审查者可以确认其为代理并将其封锁。这种攻击依赖于探测协议、响应时间分析和流量模式识别等技术,广泛应用于中国的防火长城(GFW)等网络审查机制。由此开发者设计了抗探测代理,如ScrambleSuit、obfs4和Shadowsocks,这些代理服务器要求客户端在获得响应前提供相应的密钥(一般为带外传输,例如第三方网站和邮箱)。尽管抗探测代理更难被识别,研究表明审查机构仍有方法检测这些代理,例如不响应常见协议(如HTTP或TLS)的异常行为。
此外,审查机构还可以通过重放攻击来识别抗探测代理,如重放先前可疑客户端发送的初始消息,如果目标服务器响应,表明其为代理服务器。GFW已被证实利用重放攻击和超时指纹识别来识别和阻塞Shadowsocks服务器。当客户端连接到服务器并发送特定大小的初始消息时,GFW会发送多次后续探测,包括重放客户端消息和发送超出Shadowsocks的50字节数据限制的随机数据探测。为了防止重放攻击,抗探测代理可以使用服务器随机数或挑战机制,让客户端通过将共享密钥与服务器提供的随机数据进行哈希来证实自身身份。然而,这种方法要求服务器在客户端身份验证之前发送数据,这种特性可能会被审查机构利用来识别这些代理。因此,防护措施的设计需权衡安全性和识别风险。
因TLS的安全特性,使其提供了天然的防重放攻击的方法。TLS通过在密钥协商中包含服务器随机数,确保每个连接使用唯一的加密密钥,从而抵御客户端的重放攻击。此外,TLS有多种流行的实现方案,提供了丰富的指纹,使其更难被审查机构识别和分析。以往的研究也证实了,通过模仿现有的协议(如IM和视频流)以实现规避审查是困难的,因为很多协议仅有单一的实现方式,这使翻墙工具难以完美复刻。而相比之下,本文的方法利用现有的TLS实现,并通过隧道传输,避免了模仿特定协议的复杂性。
HTTPT面临的三个主要问题:
TLS指纹:TLS服务器的指纹可能会通过其在握手过程中发送的特征(如加密套件或扩展)被识别。为避免被识别,HTTPT需要使用流行的TLS实现,并通过uTLS库或流行浏览器来模仿常见的TLS指纹。
TLS证书:为了规避审查,HTTPT服务器需要有一个真实的TLS证书。真实的证书通常由受信任的证书颁发机构(CA)签名,包含合法域名,而伪造这些证书是困难的。尽管可以使用自签名证书,但是自签名证书很可能作为审查特征之一。
TLS内容:TLS连接建立后,HTTPT服务器必须发送看似正常的响应(例如带有HTML负载的HTTP响应)以避免审查机构根据响应识别HTTPT服务器。例如,指定的HTML或空白页面。
HTTPT提出了五种应对策略:
现有服务器:将HTTPT代理部署在志愿者运营的现有HTTPS服务器上。这些服务器已经拥有有效的证书和内容,能够提供很好的掩护作用。HTTPT代理不会改变HTTPS网站的行为,使审查机构无法根据证书或内容判断该网站是否为代理服务器。
常见错误页面:HTTPT服务器可以返回常见的错误页面,如4xx或5xx的HTTP状态码。据Censys给出的数据,诸如“400 Bad Request”和“403 Forbidden”等错误响应占全部IPv4 HTTPS的一半左右。
掩码站点:HTTPT透明地代理所有流量到一个专用的“掩码站点”,即外部TLS服务器。当审查机构连接到HTTPT服务器时,其数据包被转发到掩码站点,再将掩码站点的响应返回给审查机构。这使得HTTPT代理可以模仿任何现有网站。
复制内容:HTTPT可以直接从现有任意网站复制内容,以提供与掩码站点类似的防护措施。这种方法避免了在数据包层面透明代理所带来的延迟,但可能违反版权法,并且需要提供一个合理的证书和域名。
限制访问:通过限制访问来避免发送网站内容,例如要求HTTP认证或登录页面,并全部返回错误或拒绝页面。此外,这种限制也可以在TLS层面实施,通过不正确的服务器名称指示(SNI)触发握手警报。虽然TLS 1.3提供了加密的SNI扩展,但目前尚未广泛使用。
虽然这些应对策略一定程度上规避了审查机构检测,但又面临HTTPT客户端如何认证的问题。为此这里提出两种解决方案:
带密钥URL:HTTPT客户端可以在初始HTTP请求的URL中包含共享密钥作为身份验证机制。Web服务器将所有访问该密钥的请求反向代理到HTTPT服务器。这使得未能提供正确密钥的连接不能访问HTTPT服务,取而代之的则是正常Web服务器的服务。从而使审查机构无法区分代理和正常Web服务器。
带内TLS传输:在使用TLS掩码站点时,HTTPT服务器无法直接获取客户端访问的加密URL。为此,HTTPT通过透明代理所有流量到掩码站点,让HTTPT客户端与掩码站点完成正常的TLS握手。由于HTTPT服务器无法控制掩码站点的私钥,所以无法解密或者注入数据。在TLS握手完成后,HTTPT客户端更换一个新的主密钥,该密钥是由HTTPT共享密钥与掩码站点TLS连接中的客户端和服务器的随机值组合而成[2]。HTTPT服务器也会推导出这个新的密钥,如果能够解密客户端发来的数据,就意味着该客户端为HTTPT客户端(即知道共享密钥),否则将继续把数据包转发到掩码站点。
因Shadowsocks是著名的轻量级代理协议,所以作者将HTTPT与Shadowsocks进行了比较。在测试中,Shadowsocks的“首次字节到达时间”为612毫秒,而HTTPT(TLS 1.3)为844毫秒,HTTPT(TLS 1.2)为1085毫秒。在下载100MB文件的带宽测试中,Shadowsocks的时间为24.65秒,HTTPT的时间为25.15秒(仅增加2%的开销)。虽然HTTPT在连接建立时增加了一次额外的往返时间,相比于Shadowsocks更安全,且开销在可接受范围内。
HTTPT并没有针对枚举攻击的防护,这种攻击可能使审查机构批量探测代理服务器的IP和密钥。针对这种攻击,可利用现有解决方案(如Salmon和Hyphae)进行防护。此外,HTTPT也不提供对网站指纹攻击的防护。也需结合现有其他技术一同使用。
[1] Tor Blog .Hiding in plain sight: Introducing WebTunnel. https://blog.torproject.org/introducing-webtunnel-evading-censorship-by-hiding-in-plain-sight/. March 12, 2024
[2]Frolov, Sergey, et al. "Conjure: Summoning proxies from unused address space." Proceedings of the 2019 ACM SIGSAC Conference on Computer and Communications Security. 2019.
安全学术圈招募队友-ing
有兴趣加入学术圈的请联系 secdr#qq.com