shadowsocks / shadowsocks-nodejs

https://github.com/shadowsocks/shadowsocks
Other
1.25k stars 724 forks source link

SSL Support (enhancement) #19

Closed chenshaoju closed 11 years ago

chenshaoju commented 11 years ago

shadowsocks-nodejs的效率很高,但是这种简单加密被Wall嗅探出来是迟早的问题。 因此能否考虑支持Apache的反向代理(某个路径,如 https://aaa.bbb.com/ccc/ ),或者直接支持TLS(SSL)方式连接?

我对node.js所知甚少,如有错误,请包涵,谢谢。

clowwindy commented 11 years ago

正相反,用 SSL 才是。

chenshaoju commented 11 years ago

实际上利用SSL可以做到迷惑(利用社会工程学),我做过一个迷惑站点,如果你直接访问某个IP的HTTPS端口,会显示是一个商业网站,而二级目录下面却是twip、奶瓶腿之类的东西,目前两年了,一切正常。

因为Wall无法嗅探到二级目录下是什么,它只能知道用户访问了这个IP的443端口。

而shadowsocks-nodejs的行为模式是固定的,也就是说如果真要分析出来,很快就能被墙掉。

比如:目前我对shadowsocks-nodejs的分析是:TCP握手结束后,客户端立刻发送一个长度为22的散列值给服务器。 截图1

这个可能就是设定的密码的一个散列,这个散列值是随着密码而变的,也就是说每次登录的认证就是通过这个散列进行。而这个行为是固定的(TCP握手结束后必定会发送一个散列值)。

而对于传输相同的内容,所传输的加密数据段是完全一样的: 截图2

也就是说,如果要从这堆乱码里面嗅探出有用数据,是有规律可循的。

反过来再看SSL,就算墙知道某个服务器有一个SSL,在没有确切证据的情况下是不会封掉这个IP和端口的,毕竟大量的网站都基于SSL协议建立(比如github,旅行预订网站,各种邮箱的登录界面等),而shadowsocks-nodejs是非大众协议,也就是说,要封掉不会对商业或经济带来任何影响。

所以,我仍然提议考虑一下SSL……

clowwindy commented 11 years ago

没有 CA 证书的 SSL GFW 见一个存一个……用一段时间之后 IP 丢包或封死

chenshaoju commented 11 years ago

现在有免费的SSL证书申请,我用的是StartSSL,而且现在SSL证书也不贵,namecheap卖的COMODO SSL,8USD/年……(咦,有一股广告的气味

clowwindy commented 11 years ago

另外你分析的不对,shadowsocks 不验证密码,如果密码不一致,行为未定义

chenshaoju commented 11 years ago

我进行的是黑箱测试,没有阅读代码(我不懂node.js)。

我的测结果:如果密码不一致,会断开连接,因此必定有一个验证密码的过程(config文件里的password)。

clowwindy commented 11 years ago

不一定,断开连接只是地址解析失败导致。如果你坚持要用 SSL,可以去看看 Python 版的 ssl 分支。

https://github.com/clowwindy/shadowsocks/tree/ssl

chenshaoju commented 11 years ago

Node.js的效率高一些,Python什么的,我才不用呢,哼!

clowwindy commented 11 years ago

那么 dev 分支现在加了个 rc4 加密……你可以试试

lastonesky commented 11 years ago

为什么不让他自己建个分支呢,想咋改咋改……

chenshaoju commented 11 years ago

@lastonesky 我不会node.js这种高级技术……

chenshaoju commented 11 years ago

@clowwindy 我比较倾向于Apache反向代理,因为可以基于SSL进行伪装,RC4的加密可能还是会识别,关键在于特征识别和流量审查(模型)。

我换了一个方案,使用shadowsocks-nodejs搭配obfsproxy,混淆通信流量,同时保持shadowsocks-nodejs的高效率。

Screenshot

由于obfsproxy会将流量混淆,以及参杂无用数据在通信里,所以相当长一段时间将是不可发现的: Screenshot2

非常感谢clowwindy,我会做一个教程来介绍shadowsocks-nodejs的。

该issue已关闭。