目测本周的更新又双叒叕要黄了,如果不发一些什么东西,你们又该猜测喝茶的事情了,所以还是随便写点吧。
分析一个软件是否安全的过程称为“Threat modeling”,它的过程可能相当得繁琐。简而言之,如果一个软件没有任何的输入输出,我们姑且认为它是安全的,当然这样的软件也没有什么用。于是我们分析一下软件的输入输出有怎样的风险,即可以判断它有怎样的安全性问题。
接下去我们将会对 VMess/V2Ray 中网络相关的输入输出进行一些简单的分析,并同时拿 Shadowsocks 做一下对比。
密钥破解
VMess 使用的加密方式(AES-GCM、AES-CFB、CHACHA20)暂时都没有已知的破解方法。这里的不能破解指的是,即使同时拿到了加密前和加密后的文本,也无法得到密钥。再多的文本也没用。
前向安全性
前向安全性(Forward Secrecy)指的是,假设某一天通讯的密钥破解了,而之前的某些通讯数据被截获,被截获的数据无法通过密钥解开。能做到一点的协议被称为具有前向安全性。
目前只有 TLS(和其它基于 TLS 的协议)实现了前向安全性,VMess 和 Shadowsocks 都不具有这一特性。VMess 不添加这个特性的原因是:
- V2Ray 已支持套用 TLS;
- 实现前向安全性就必须增加额外的密钥交换环节,会增加延时;
- 并不是所有人都关心这一特性;
中间人
中间人(MITM)攻击指的是,在 A 和 B 通信时,有一个 C 站在 A 和 B 当中,和 A 说我是 B,和 B 说我是 A,然后尝试截获并破解通信的内容。通常来说,MITM 对于 VMess 或 Shadowsocks 这类预设密码的协议无效,只对 TLS 这类需要密钥交换的协议有效。TLS 使用了证书链的方式避免了 MITM 攻击。
重放攻击
重放攻击是指当 A 和 B 的通讯被 C 截获后,C 使用截获到的内容对 A 或 B 进行攻击。重放攻击的常见做法是对服务器的 DDoS。
Shadowsocks 服务器软件中,目前只有 ss-libev 可以抵御重放攻击,其它的版本似乎都不支持这一功能。VMess 从 2.19 开始可以抵御重放攻击。
CCA / CPA
选择密文/明文攻击,是指精心构造出一些特殊的内容,然后对服务器实施的攻击。
Breakwa11 最早提出的 Shadowsocks 服务器的判定方式,就是 CCA 的一种。
通常来说,CCA / CPA 结合重放攻击,可以达到比较好的效果。重放攻击的好处是不需要自己构造数据。VMess 和 Shadowsocks 的通讯内容全程加密,在不知道密钥的情况下,构造出一个合理的数据包几乎不可能。但是通过重放攻击的方式,拦截再修改数据包,难度就小多了。
模式识别
模式识别指的是使用人工或自动的方法,通过分析大量的正常通信数据,得出某个协议的某种模式。举个简单的例子,TLS 1.2 的数据包,第二和第三个字符都是数值 3。如果一个服务器的固定端口的通信数据,总是符合这一特征,那么我们便可认为它在使用 TLS 通讯。
模式识别是一个把双刃剑,如果一个协议被识别成了它自己,那它就很有可能被封锁;如果一个协议被识别成了其它的协议,那它就可以混水摸鱼了。
目前 VMess 和 Shadowsocks 均没有已知的可被利用的模式。
哟!不错的技术分享,是要做一个系列吗?
感谢分享, 期待 后续.
涨知识了,非常感谢。。。
您好,试用了v2ray,很不错,但是不管从我的测试还是广大用户的反馈来看,貌似不太稳定,特别是有个断流的现象一直存在,挺影响正常使用的,麻烦您受累帮忙看看。不知道如何联系作者,只能在这冒昧打扰了。断流请参考下面:
https://github.com/v2ray/v2ray-core/issues/1151
写的很好!