如果您像大多数人一样,对此的答案是……“什么?为什么?”
当ssh在1990年代被引入时,它的吸引力很简单。密码太短,太容易猜到,太容易被仿冒,太经常被错误地存储,太能MITM了,太过暴力了。同样,它的主要竞争者是rsh的经典“不认证”,但是我们不谈论它。
与此相比,ssh公钥身份验证是一个梦想。生成密钥对,永远不要与任何人共享私钥,并且如果攻击者窃取了您的authorized_keys文件,那么这是在开玩笑,因为他们对您的公钥所做的所有事情就是授权您闯入他们的服务器。吸盘!
非常好如此巨大的优势可能会让您感到奇怪:为什么在我们吸取了这一重要教训25年之后,为什么互联网上所有最安全的网站仍在使用密码身份验证?好吧,有一些很好的理由,有一些不太好的理由。 Web浏览器中的TLS客户端证书已经尝试了很多次,但失败了很多次。这是另一天的故事。
今天我的故事是关于ssh的,即使公钥虽然比简单的密码要好得多,但仍然不是一个完美的解决方案。
危险是凭证盗窃,这是说“有人偷走了您的私钥”的一种奇特的方式。早在1990年代,这个问题就远远不在我们的考虑范围之内。 Windows 98甚至没有单独的管理员帐户的概念,不用管应用程序沙箱的想法,也不用暗示有人可能有意将恶意软件加载到您的计算机上并为勒索软件加密所有文件。那时,有些人认为ActiveX控件(本质上是从网站加载.exe文件)可能是个好主意。实际上,只要有一个“您确定吗?”,也许甚至是一个好主意。对话框。
想一想,有什么工作原理吗?多么活着的时间。
无论如何,公钥认证在当时是一个令人惊讶的高级保护级别。使用ssh键的普通人不必担心攻击,因为目标容易得多:运行速度快于Bear解决方案。
但是,时间已经过去,攻击者一直都在变得越来越先进,并且某些限制开始显现出来。
这是去年某人告诉我的一个故事:一家公司有一名员工因不良行为被解雇。几个月后,他们所有的生产服务器都被淘汰了。他们没有足够的法证来确定事件的发生方式,因此他们聘请了一名顾问来帮助他们重新组装它,并在下次进行更多的日志记录。一个月后,又发生了!一切都消失了。
但是这次他们有日志。日志显示的是,他们的一名员工将ssh塞入了所有服务器,并砸碎了所有东西。但是,该员工是从其他国家/地区登录的,而该国家/地区显然不是该员工的。而且似乎不愿意为隐藏其登录信息而烦恼的员工也不会为使用伪造IP而烦恼。发生了什么?
发生的事情是,这名流氓员工在被解雇之前的几个月,一直等到每个人都去吃午饭,从一台PC到另一台PC走来走去,并从没有锁定的任何人那里收集ssh私钥。 (请注意,如果您正在考虑使用屏幕锁定策略来解决此问题:这虽然不错,但防御能力还不够。请确保至少也要在所有计算机上启用全盘加密,并且然后被解雇了一段时间之后,他使用了同事的ssh密钥登录并销毁了所有内容。
当他们在第一次破坏之后重建服务器群集时,他们非常小心,从头开始构建所有服务器,避免了安装后门的任何可能性……然后立即像以前一样放入同一套ssh公钥中。因为ssh密钥是安全的,对吗?如果我们对安全性一无所知,那就是。甚至是名字!
而且它们是安全的,直到被盗为止。但是静态ssh密钥的问题在于,如果密钥被盗,就无法检测到。许多人避免旋转其公钥超过10年。可能有人在9年前偷了您的私钥,只是在等待合适的时机罢工。
旋转钥匙是解决此问题的简单方法。就像强制更改密码(现在已不再流行)一样,旋转ssh密钥“最终”可以防止密钥被盗,这比根本没有保护要好得多。当然,它也具有密码轮换的一些缺点:值得注意的是,如果您在多台计算机上拥有ssh私钥,则必须记住将其复制到所有这些位置。而且,如果您在多台计算机上都拥有ssh公钥-这就是重点-现在您必须正确删除旧的公钥并添加新的公钥。这是很多繁琐且容易出错的工作,这就是为什么人们不喜欢这样做的原因。
一种更强大的方法是使用某种可以对短期ssh密钥进行签名的硬件令牌,并教会所有服务器如何处理这些令牌。很好,但是很难部署(需要自定义ssh设置)。部署可能是可修复的-说服上游ssh以更简单的方式进行。但是您仍然遇到令人讨厌的硬件令牌的问题,然后将其插入USB(连接器类型太多,并且大多数情况下在手机上不起作用)或Bluetooth(可能97%的时间都可以工作),这根本就不行足以用于您的紧急生产登录凭据)。
一种更简单的方法是设置ssh跳转主机,在其中可以将ssh幻想包含到单个服务器中(即使您仅使用普通的ssh密钥,也只需将它们旋转到那个位置)。这种方法效果很好,但是会增加延迟(跳转主机并不总是位于您要跳转到的服务器附近;或者,如果您在每个区域中都有一个跳转主机,那么现在您必须维护一堆跳转主机),当然,意味着您必须通过ssh进行所有操作;您无法直接路由流量。
顺便说一下,所有这些凭证盗窃问题不仅适用于ssh:WireGuard和OpenVPN私钥可以以相同的方式被盗,除非您定期轮换使用它们,否则这是一种责任。
我们采用自己的基础结构(以TLS证书基础结构为模型,尤其是让我们加密)为基础的方法是,使用单独的私钥对每个设备和个人的组合进行身份验证;这样,如果凭证被盗,我们总是从哪里知道。每个设备可以根据需要随意旋转特定于设备的密钥,因为私钥仅位于一个位置,并且公钥都从我们的协调服务器迅速分发到需要它们的其他所有设备。由于这种高度一致的密钥轮换(使用ssh密钥或密码很难做到这一点),我们始终能够确切地知道何时停用了某个特定的密钥对,因此我们始终可以检测到该密钥对是否会意外地再次出现:它必须意味着凭证被盗,这意味着可能会触发取证的违规行为。毕竟,我们将ssh密钥隐藏在此网络层密钥旋转的后面,这意味着未旋转的ssh密钥大多数情况下是无害的。只有拥有未窃取凭据的授权人员甚至可以尝试利用被窃取的ssh密钥。
无论如何,回到我们原来的问题:我应该多久旋转一次ssh密钥?比以往任何时候都更多!尽可能多地。并确保您在使用完旧键后将其退役。