远程用户使用 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)?
答案1
您看到的消息是另一个问题。它要求您确认所连接的主机确实是您期望的主机。从服务器,您可以通过运行获取指纹ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub
。然后,当您第一次远程连接时,您可以确保指纹匹配。
主机密钥(此处展示的实际操作)解决了中间人攻击 — 也许 DNS 已被破坏,您连接到的是竞争对手的机器而不是您自己的机器。该机器收集您的凭据并透明地将您的连接转发到真正的服务器,在您不知情的情况下窃取您的信息。确保主机密钥匹配可以防止这种情况发生,除非攻击者实际上窃取了您服务器的公钥。
但问题仍然存在——您如何知道哪个密钥是正确的?第一次连接后,公钥将存储在您的~/.ssh/known_hosts
文件中,因此后续连接没有问题。但第一次,您要么需要某种带外方式来获取指纹,要么遵循“TOFU”模型:首次使用时信任。
但这一切都与密码和密钥无关,只是密钥和密码都可能通过这种攻击被盗——从某种意义上说,这是你所要求的漏洞。
密码比密钥更糟糕的原因至少有三个:
- 它们可以被暴力破解。用户选择的典型 8 个字符密码大约有 30 位猜测熵。ssh 公钥/私钥对为 1024 位或更大。暴力破解 ssh 密钥实际上是不可能的,但自动密码猜测一直在发生。
- 他们可能很笨。即使有限制,用户也会经常选择糟糕的密码,而且他们倾向于在多个地方使用更难的密码。这显然使攻击变得更容易。
- 密码可能被远程窃取。使用 SSH 时,密码是在线加密的,但在受感染的系统上,用记录所有密码的服务器替换 ssh 服务器是很常见的。使用密钥,私钥会保留在本地系统上,永远不会被发送,因此如果不实际危及客户端计算机,它就无法被窃取。
此外,ssh 密钥与类似的东西一起使用时也提供了便利ssh-agent
——您可以轻松地进行连接,而无需每次重新进行身份验证,同时仍保持合理的安全性。
要求同时使用这两种方法并没有什么好处,因为有足够权限窃取私钥的人也可以很容易地窃取用户的密码。如果您需要更高的安全性,请考虑使用双因素身份验证系统,例如 RSA SecurID 或维基。
答案2
你真正想问的是“一个因素是否比另一个因素更好”,这个主题是多因素身份验证,你最好研究一下这个主题。
通常,“因素”是您知道的东西(密码)、您拥有的东西(ssh 文件或密钥刷卡)或您本身的东西(指纹)。
就其本身而言,两者并无优劣之分,它们都是互补的。如果您只想要泄露密码,那么丢失包含密钥文件的 CD 就和泄露密码一样糟糕。对于安全环境,双因素身份验证很常见。