socks5 代理服务端可以实现中间人攻击吗?

2019-12-21 22:37:05 +08:00
 serge001

rt,在客户端使用 https,并且没有安装服务端签发的证书情况下,服务端理论上可以实现中间人攻击吗?

1419 次点击
所在节点    问与答
10 条回复
windyland
2019-12-21 22:38:22 +08:00
不能,socks 只能拿到加密后的数据
ZRS
2019-12-21 22:47:29 +08:00
不能
binux
2019-12-22 01:25:09 +08:00
当然可以啊,只是不能不被发现。你让客户忽略证书错误不就好了。
lihongming
2019-12-22 04:00:19 +08:00
短期不行,长期可以分两步走——

1. 诱骗用户安装你的根证书

2. 给自己签发相关域名(可以用通配符)的证书,然后作为中间人监听

这里面的关键是诱骗用户安装你的根证书。如果在国外这不容易,但在中国很简单,因为很多中国网站在用自签发证书(比如 12306 )。所以你发和它发没什么区别,反正都是不受信任的,嫌麻烦的用户自然会安装。
serge001
2019-12-22 09:46:03 +08:00
@windyland @ZRS @lihongming 但是为什么 shadowsocks 之类的就不需要客户端安装证书呢?
linhua
2019-12-22 09:51:18 +08:00
不安装证书 是 看不到 HTTPS 里面的明文的,shadowsocks 只是起到 流量转发的作用,看不到明文
lihongming
2019-12-22 10:21:22 +08:00
@serge001 @linhua 也不能说看不到 HTTPS 里面的明文,而是客户端会提示风险,中间人就被发现了。

HTTPS 的原理大概如下:

1. 浏览器有一个受信的根证书列表
2. CA 们用这些根证书签发域名证书给网站
3. 网站用域名证书的私钥把 http 传输的内容加密,并连同公钥一起传给浏览器
4. 浏览器检查公钥是否由受信任的根证书签发
5. 如果公钥确实由受信任的根证书签发,则继续检查域名与证书是否匹配
6. 如果都没问题,则用公钥解密并显示内容

以上是个精简版的步骤,其实还有有效期、吊销列表等检查,暂且不表。

如果第 4 步有问题,则浏览器会提示“此网站出具的安全证书不是由受信任的证书颁发机构颁发的”。因为很多企业的内部系统会使用自签发证书,所以用户可以选择将根证书加入受信任列表,以后就不会再提示了。

如果第 5 步有问题,则浏览器会提示“安全证书上的名称无效,或者与站点名称不匹配”。

所以,如果你想做“中间人”,就必须在第 4 步之前截获数据,然后用正版的证书解密内容,就好像你是发出请求的那个浏览器一样。然后再用盗版证书把数据加密,并连同盗版证书的公钥一起发给浏览器。如果你的盗版证书是受信任的,且域名无误的话,则用户不会看到任何警告。
aqutor
2019-12-22 10:32:45 +08:00
@lihongming #4 12306 已经没有用自签名证书了。
serge001
2019-12-22 10:39:10 +08:00
@lihongming 非常感谢回复,所以我的理解是如果客户端不信任第三方自签证书,socks5 服务端拿到的也是加密后的传输层数据,看不到明文的是吗?
lbp0200
2019-12-22 10:53:12 +08:00
你以为看不到明文就不知道你在干嘛了? too young

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/631141

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX