前言

今天看到不少网友转帖了 Net4People 上的 这个讨论 ,与此同时*「GFW能精确识别并封禁代理协议」*的传言又再一次被传得沸沸扬扬了

关于这个传言,自从我开始翻墙起(没错)就一直都没断过,俨然成为了一个每月都能吵起来一遍的话题,同时与脸书入华,谷歌重返,索尼罪大滔天倒闭和WP崛起并列,荣登互联网第五大错觉

作为一个曾经翻墙10+年的技术爱好者,也曾经粗读过一些加密代理的协议文档和源码,我觉得是时候分享一下鄙见,让普罗大众对这个传言有一些正确的认知

翻墙协议浅谈

目前流行的翻墙协议大体上奉行这个哲学:「小隐隐于野,大隐隐于市」

小隐隐于野:加密

潜心于研究加密的代表协议就是大名鼎鼎的 Shadowsocks 了,它将两端通讯的数据流用现代的密码学方法加密,从而让审查者(网关/运营商/墙)无法识别通讯内容,外人看来就是一串没有特征的未知流量

这种方式的最大优点是绝对的链路安全,中间人无法破译和篡改数据,看着只能干瞪眼,但缺点也很明显,就是没有特征就是最大的特征,既然审查者无法审查,那么最一刀切的方法就是直接阻断,不允许未知流量通讯

大隐隐于市:伪装

为了克服加密的缺点,翻墙先驱们点亮了伪装的技能树,将加密的通讯包裹在一些被普遍使用的有特征协议上。目前在互联网上最被广泛使用的 TLS 就成为了伪装的首选,让拥有偷窥欲望的审查者得知部分信息,比如服务名(可以理解为域名)等,而”偷渡“真正要传输的内容

伪装流派的优点是,由于依附的 TLS 实在太过普遍,导致太大而无法审查,一刀切很容易误伤友军,造成的后果会造成互联网服务几乎瘫痪,远远比漏网之鱼的存在(借道翻墙)严重得多, **依附的自由 让「翻墙」顽强生存且禁而不绝**。同时,TLS 的广泛使用也让它的生态蓬勃发展,很多的网络的软硬件设施是专为处理 TLS 流量而生的,效率和兼容性比纯加密流量更高,负载均衡/主备切换/健康检测等方案都非常成熟

然而,由于在伪装的过程中主动泄漏了部分信息,这就让审查者有机可乘,从有限的信息中提取出可以「识别」可以流量的信息,也就是这次封锁行动的原理。同时,过度依赖 TLS 但忽略安全性(例如允许不受信任的证书),也容易受到信任链攻击,导致内层无加密的数据泄漏

翻墙行为识别

聊完了过墙梯,接下来就要聊聊张良计了,看看审查者的诡计会施放在什么地方

做得到的分析

四元组信息

源IP,目的IP,源端口,目的端口。一些你要联网就要被收集到的信息

TLS 协议头

由于 TLS 本身在头部会包含一些明文信息,所以采用了 TLS 加密/伪装的连接还会/主动暴露