SSH Key Exchange 比密码认证更安全吗?

srm*_*ark 9 security ssh authentication

远程用户使用 SSH 通过互联网连接到我们总部的多项服务。SSH 密码与他们的 LAN A/D 帐户同步。

让用户使用 CD 或一张纸之类的东西将 SSH 密钥的副本带回家是否比让用户输入密码更安全?或者我应该两者都需要?

我的问题可能可以重新表述如下:SSH 的密码认证协议是否存在漏洞?

正是这条消息让我怀疑:

The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:.
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)

mat*_*tdm 22

您看到的消息是一个单独的问题。它要求您确认您连接的主机确实是您期望的主机。从服务器,您可以通过运行来获取指纹ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub。然后,当您第一次远程连接时,您可以确保指纹匹配。

在这里看到的主机密钥解决了中间人攻击的问题——也许 DNS 已经被破坏,你正在连接到竞争对手的机器而不是你自己的机器。那台机器会收集您的凭据并透明地将您的连接转发到真实服务器,在您不知情的情况下窃取您的信息。确保主机密钥匹配可以防止这种情况发生,除非攻击者实际上已经窃取了您服务器的公钥。

不过,一个问题仍然存在——你怎么知道哪个键是正确的?第一次连接后,公钥存储在您的~/.ssh/known_hosts文件中,因此后续连接没问题。但是第一次,您要么需要某种带外获取指纹的方法,要么遵循“TOFU”模型:首次使用信任。

但这一切都与密码与密钥没有任何关系,只是密钥和密码都可能通过这种攻击被盗——从某种意义上说,这是您要求的漏洞。

密码比密钥差的原因(至少)有以下三个:

  1. 他们可以被强制使用。一个典型的用户选择的 8 个字符的密码有大约 30 位的猜测熵。ssh 公钥/私钥对是 1024 位或更大。暴力破解 ssh 密钥实际上是不可能的,但自动密码猜测一直在发生。
  2. 他们可能很笨。用户经常选择可怕的密码,即使有限制,而且他们倾向于在多个地方使用更难的密码。这显然使攻击更容易。
  3. 密码可以远程窃取。当您使用 SSH 时,密码在线路上被加密,但在受感染系统上用记录所有密码的服务器替换 ssh 服务器是很常见的。有了密钥,私钥就留在本地系统上,根本不会被发送,因此如果不实际危及客户端机器,它就不会被盗。

此外,ssh 密钥在与诸如此类的东西一起使用时提供了便利ssh-agent- 您无需每次都重新进行身份验证即可获得轻松的连接操作,同时仍保持合理的安全程度。

要求两者都没有明显的优势,因为有足够权限窃取私钥的人也可以很容易地窃取用户的密码。如果您需要比这更高的安全性,请考虑研究两因素身份验证系统,例如 RSA SecurID 或WiKID