如果与VPN结合使用ssh无密码公钥认证可以吗?

信息安全 验证 密钥管理 SSH
2021-08-17 08:00:53

与同事讨论使用 ssh 进行公钥认证的优缺点。
我基本上想知道所有可能的优点和缺点是什么,特别是在无密码私钥方面。

在我们的环境中,外部世界无法访问 ssh。这意味着您必须先通过 VPN 进入,然后才能通过 ssh 访问任何内容。出于争论的目的,假设此 VPN 使用相同的帐户后端,因此用于 VPN 的密码与您通过 ssh 连接时的帐户密码相同。

一个论点是无密码的 ssh 密钥没有用。它们是不安全的,如果受到攻击,攻击者就会访问我们所有的系统。

我的论点是,进一步的安全措施使这一论点变得毫无意义。因为您必须首先通过 VPN 连接,所以拥有私钥不会让您进入前门。

这个论点有效吗?还有其他支持或反对的论据吗?

4个回答

这是一个典型的纵深防御问题。如果我已经有了 Y 和 Z,为什么还需要 X?

常见的答案是您的安全性通常与其最薄弱的环节一样好。在您的情况下,您唯一的安全机制似乎是您的 VPN。这是你最强和最薄弱的环节。在您看来,这是足够的保护,不需要额外的保护。

也许你是对的。它可能已经足够好了。在家里,我的门上只有一把锁。我知道两把锁会更坚固,但安装另一把锁的成本/麻烦,以及必须使用两把钥匙对我来说不值得。反正我也没什么值得偷的。但是,如果我的锁或您的 VPN 被盗用,那么我们就几乎没有或没有保护。VPN 安全性可能在多种情况下受到损害,其中一些情况就像某人不小心做出愚蠢的配置更改而导致您的 VPN 处于打开状态一样微不足道。此外,即使 VPN 是 100% 防水的,员工也可能认为将无线路由器插入您的网络是一个好主意,这样他们就可以更轻松地使用他们的 iPhone,从而有机会在没有 VPN 的情况下进入您的网络。这当然取决于您的组织,设置等等。基本原理是一样的。

您必须考虑保护您的数据成本/价值的优势/劣势。然后加上添加和管理另一层保护的“剩余成本”,看看它对你是否值得。安装另一个 VPN 网关 - 所以你有两个 VPN - 可能成本高且效率低。然而,将密码添加到您的 ssh 私钥可能既简单又便宜,值得一试。

攻击者获取私钥文件的方式主要有两种:

  • 通过破坏客户端计算机,在这种情况下,攻击者通常也可以获得密码。
  • 通过破坏客户端计算机的备份,或窃取该计算机。

如果您将私钥身份验证与密码身份验证进行比较,则只有第二种情况是相关的。在第二种情况下,私钥文件上的强密码确实是安全所必需的。

您可以通过从备份中排除私钥文件来降低风险,但听起来您对客户端计算机几乎没有控制权,并且总是有可能被盗。您还可以通过一种快速停用密钥的方法来降低风险。如果除了 SSH 密钥之外,渗透您的网络还需要 VPN 连接,这会增加在造成任何损害之前停用密钥的时间窗口。

请注意,密码也不是灵丹妙药。SSH 客户端往往使密码验证难以自动化,但足够恼火的用户无论如何都会将密码写入纯文本文件中,甚至可能在某个脚本或配置文件中公开它。使用私钥文件的优点是机密信息集中在一个文件中,用户不会倾向于复制。

另一个对私钥有利的考虑因素是,从社会的角度来看,它们往往更容易撤销。告诉用户他们必须更改密码永远不会受到赞赏,而且您无法确保他们不会从 更改Password123Password456. (除非您强制输入密码,在这种情况下,您知道他们已经将密码写在某处。)

此外,如果 VPN 与 SSH 具有相同的密码,那么对于大多数意图而言,SSH 不会执行任何额外的身份验证。因此,带有密钥身份验证的 SSH 在这种情况下代表了额外的安全层(无论密钥是否受到良好保护),而具有相同密码的 SSH 则不然。如果另一种方法是让密码让你通过后门和前门,那么让后门受到不同机制的保护是一个加分项。

您的问题围绕着私钥的存储而不是 ssh 身份验证机制。

所以,对于答案:

  1. 是的,ssh 私钥/公钥机制和协议似乎是安全的。
  2. 是的,私钥应该通过复杂的密码进行加密(如果存储在客户端机器上尤其重要)。
  3. 这并不能阻止所有的攻击,只是一些。
  4. 因此需要分层防御。
  5. 相对于安全架构中可能被忽略的其他问题,这不是一个特别重要的问题(不,我不在你做的同一个地方工作,只是推断)。

首先,SSH 密钥绝对优于 ssh 密码:

  • 您无法合理地暴力猜测 SSH 密钥。使用密码,您可以通过猜测“changeme”或“12345”或“nicole”来获得幸运命中。另一方面,密钥由 2048 个伪随机位组成。甚至不值得尝试。

  • SSH 密钥使用非对称加密来防止泄露任何秘密如果您使用密码验证连接到恶意 SSH 服务器,您将向他们披露您的用户名和密码,他们可能会使用这些信息进行各种攻击。对使用基于密钥的身份验证的人进行攻击要困难得多。我什至不确定这是否可能;有这方面的例子吗?)

  • SSH 密钥访问可以基于每个用户而不是每个帐户来撤销或扩展。

  • SSH 密钥可用于在每个用户的基础上实施额外的安全性或限制,而不是通过密码提供的功能。

  • 您可以使用相同的密钥访问多个服务器,而不会显着降低安全性。

  • SSH 密钥允许你做一些非常酷的事情,比如代理转发,这绝对是有史以来最酷的事情(不要对我抱怨敌对服务器的安全隐患;这太棒了。La-la-la-la不听)。

关于加密或未加密的客户端密钥;这是个人品味和政策的问题。如果您的私钥泄漏的可能性为零,那么未加密就可以了。但实际上,对于密钥 代理没有理由不对其进行加密,并且欢迎增加安全性。

最后,这可能在这里很突出,基于密钥的身份验证的 SSH比大多数 VPN 系统安全,特别是因为流行的 VPN 通常使用基于密码的身份验证,并且没有针对中间人攻击的内置保护。注意:一些 VPN 使用基于密钥的双向身份验证。这些至少与 SSH 一样安全。

因此,您可能在 VPN 内部使用了比构建 VPN 本身更好的安全性这一事实具有微妙的讽刺意味。而基于封闭 VPN 安全性的基于密钥的身份验证的防御更是如此。

注意:
以上大部分内容都是围绕将 ssh 密钥用于交互式会话而不是用于计划备份等自动化系统的想法。但无论如何与其他技术的比较仍然存在。与密钥安全相关的不干预(无密码)系统的任何安全性降低同样适用于在系统上存储您的 VPN 密码或密钥,就像存储未加密的 SSH 密钥一样。存储凭证从来都不是安全的,但由于非对称技术和对基于网络的攻击的抵抗力,存储的 SSH 密钥总是比存储的密码更安全。