Shadowsocks是如何被检测和封锁的
https://gfw.report/publications/imc20/zh/
作者: Alice, Bob, Carol, Jan Beznazwy, Amir Houmansadr
Internet Measurement Conference (IMC) 2020
English version: How China Detects and Blocks Shadowsocks
最后修改日期: 2020年10月27日
论文摘要
在这项研究中,我们揭示了中国的防火长城(GFW)是如何检测并封锁Shadowsocks及其变种的。通过网络测量实验,我们发现GFW会根据每个连接中的第一个数据包的长度和熵来识别Shadowsocks流量;然后再向被怀疑是Shadowsocks的服务器分阶段地发送7种不同的主动探测,来验证其怀疑。
我们开发了一个主动探测模拟器,并用它来分析不同的主动探测对不同版本的Shadowsocks的作用,从而猜出不同种的主动探测分别利用了Shadowsocks的哪些弱点。我们还分析了GFW主动探测的指纹,并与之前关于GFW主动探测的研究所发现的指纹比较了异同。分析TCP层的旁道信息,我们还发现:来自上千个不同IP地址的主动探测,其实很有可能是受一小撮中心化结构的集中控制。
根据我们从实验中获得的理解,我们展示了一个成功缓解流量分析的方法。我们还讨论了对抗主动探测所必要的策略。我们向Shadowsocks开发者们负责任地披露了我们的发现和建议,从而已经让Shadowsocks变得更加地难以封锁。
更新
- 我们在不伤害匿名性的前提下,已于2020年10月7日将论文相关的源代码和数据集开源。这些代码和数据可以支持我们论文的所有主要结论。
- 如果您有任何的问题,评论或反馈,请使用下方的评论区,或者用这个pad。
沉默的广场 shadowsocks出过很多安全漏洞,shadowsocks出过3个大版本,每一个版本都在填漏洞。
-
shadowsocks-clowwindy:最原始的SS版本,由clowwindy用python写成(已喝茶)。因为只做了数据加密而没有做真实性校验,而被发现主动探测漏洞,攻击者甚至可以直接「解密」流量。
-
shadowsocks-OTA:用了自创的校验算法,同样被发现非常明显的主动探测漏洞。
-
shadowsocks-AEAD:就是著名的ss-libev仓库,使用了AEAD(一种同时做加密和认证的算法),基本杜绝了算法层面的问题。不过仍然被指出存在基于服务器行为的主动探测漏洞。
补充几个解释主动探测SS原理的参考资料:
-
为何 shadowsocks 要弃用一次性验证 (OTA):这篇文章指出了对ss-clowwindy和ss-OTA的攻击手法。这种方法可以短时间内探测到shadowsocks服务器,据信已由GFW使用。方法由@breakwa11提供(已喝茶)。
-
使用主动探测方法识别 Shadowsocks 服务:这篇文章指出了另一种对ss-clowwindy和ss-OTA的攻击手法,可以直接解密shadowsocks流量。(实际上并不是解密,而是让ss服务器把明文流量转发到攻击者指定的机器)
-
A possible attack to detect AEAD algorithms:一种基于服务器行为主动探测shadosocks-AEAD的方法。所以AEAD并不是完美的方法。
我不建议使用瓦房店密码学协议,如果有必要,可以用trojan、naiveproxy(TLS隧道);迷雾通、shadowsocks-obfs4,basket2(经过学术界检验)。Tor Project有一个经过严格检验的混淆协议列表:
https://trac.torproject.org/projects/tor/wiki/doc/PluggableTransports/list
-
邹韬奋虽然韬光养晦,亦当奋起而争(拜登永不为奴:h.2047.one) 简单点问,shadowsocks服务器应该用什么版本, 用什么协议?
沉默的广场 谢……谢邀?
用shadowsocks-libev仓库,选择AEAD算法,包括AES-128-GCM,chacha20-ietf-poly1305就够了。