pencils-seeing-0o SSH代理如果不验证服务器公钥,一旦连接到不安全的网络,攻击者通过mitm可以以当前用户的权限在服务器上做任何事情,包括添加新的公钥,会导致服务器被入侵,威胁到服务器上的全部数据,服务器也能被攻击者拿去做其他任何事。 这远比被代理的流量泄露要严重。 即使单独创建一个只有网络权限的用户,也有着流量泄露的风险。 之前也提过这个问题,为什么既不回复也不修复呢?想知道官方团队是出于什么样的考虑。 @SurgeTeam
SurgeTeam pencils-seeing-0o 我们会在后续版本中加入服务端指纹绑定功能。 SSH 的中间人攻击的危险远没有你说的那么可怕,特别是用作跳板代理时,最多只能获取到转发的流量,是不可能用于入侵真实服务器的。
SurgeTeam 具体来说,SSH 协议在握手时采用非对称加密,客户端不会发出自己的私钥,即使遭受中间人攻击,攻击者只能自己充当服务器与客户端通讯,而无法夹在客户端与真实服务器间进行攻击,因为解密流量需要客户端私钥方可完成。
pencils-seeing-0o 最近仔细研究了一下SSH的握手过程,发现即使使用密钥登录仍然可能导致服务器被入侵。 具体来说,客户端不发出用于认证的私钥不代表中间人不能截获客户端发出的由私钥生成的用于向服务器认证身份的消息。只要截获这条消息就可以假装客户端在服务器上添加自己的公钥,从而达到在日后登录服务器的能力。
SurgeTeam pencils-seeing-0o 新的版本中已加入指纹指定功能。 公钥验证流程中,需要将服务端的握手信息作为 challenge 进行签名,在进行 MITM 时无法使用真正的服务器的服务器密钥对进行握手,所以这里截获的签名结果无法通过真正的服务器校验。