在无盘环境中共享 ssh 主机密钥是不是一个坏主意?

信息安全 网络 SSH 密钥管理 nfs ssh 主机密钥
2021-08-27 11:22:12

我正在看这群学生工作站。它们是从 NFS 引导的无盘客户端。他们还启用了 sshd。

所有这些机器共享相同的 ssh 主机密钥(rsa、dsa 等),因为它们从 NFS 引导。由于 NFS 未加密,因此无论如何都会以明文形式传输私钥。这不是一个大问题,因为机器在一个单独的 VLAN 上,理论上你只能在你是 root 的情况下嗅探这些包,这种情况不太可能发生。

除了这个明显的问题(未加密的私钥传输)之外,在这些机器之间共享主机密钥是不是一个坏主意?

3个回答

私钥是每台机器的独特力量从安全的角度来看,只有当机器彼此不等价时,为机器拥有不同的密钥才有意义。正如您所注意到的,如果攻击者获得了对一台机器的完全控制权,那么它就可以监视网络并观察所有其他机器的文件,包括它们的 SSH 私钥。它还可以模拟任何其他机器的启动过程,在 BOOTP/DHCP/任何阶段使用该机器的 MAC 地址,并获取该其他机器的所有秘密值。简而言之,劫持一台机器很容易扩展为劫持所有机器。在这种情况下,每台机器的私钥不会给你带来更多收益。

如果您想要更好的安全性,包括一些会使机器彼此不等效的隔离层,那么您将需要一些重型火炮。NFS 建立在RPC之上,并且有一个名为Secure RPC的扩展,它允许对所有数据进行加密;但是,它很旧,支持很差(例如,我不确定 Linux 是否支持它),并且维护很差(如果有的话)。一种更新且可以说更好的方法是IPsec或者,可以将 NFS 流量封装到 SSH 中,如本文档第 6.4 节所述。这引发了有趣的先有鸡还是先有蛋的问题:如果您已经需要 NFS 来获取 SSH(或 IPsec)私钥,您如何设置一些 SSH(或 IPsec)以便在其中建立 NFS 隧道?

这是一个相当笼统的观点。无盘系统是无盘的。因此,它们在关闭时彼此相同。由于无盘机器不能永久存储任何东西,它不能包含任何秘密值,这会给它一些其他机器拒绝的权力。因此,在启动过程中,所有无盘系统都可以从其他无盘系统“模拟”,如第一段所述。因此,您无法真正创建无盘机器彼此真正不同的上下文。作为推论,您不需要区分 SSH 私钥。


不过,一些注意事项:

  • 如果您可以为每台无盘机器安排一些本地存储,例如启动它的 SD 卡,那么您可以将机器特定的秘密值放在那里;然后你可以拥有每台机器的 SSH 私钥。简单地说,私钥是从 SD 卡中读取的,而不是从 NFS 中读取的,并且私钥不再在不受保护的情况下在线路上传输(它们根本停止传输,这更好)。

  • 从理论上讲,您可以将此类本地存储替换为人工存储:将其安排为让受信任的系统管理员在每次启动时主持,并输入一个长密码以解锁机器机密。我不知道现有的软件会允许这样做,但没有概念上的限制。当然,除了每次机器必须启动或重新启动时都需要系统管理员的物理存在,这可能是一个无法忍受的限制。

  • 不要太相信VLAN有几种协议(标准和专有),但大多数都不受保护:帧由交换机标记,以便它们知道是否应在特定线路上显示帧。如果攻击者可以物理访问其中一台交换机,或者连接两台交换机的电线,或者一台支持 VLAN 的机器连接到交换机,那么他将获得对 VLAN 内容的完全访问权限。

  • 这些是学生。机器在某些时候的妥协是肯定的。他们中的一个会拔掉一台机器,将他自己的笔记本电脑插上,将笔记本电脑配置为使用拔下机器的 IP 和 MAC 地址,然后读取所有文件。使用通用操作系统工具可以在不到一分钟的时间内轻松完成。这在很大程度上可以说,如果学生是攻击者,那么你注定要失败。你可以尝试通过物理屏蔽(不要让电线以任何方式接触到)和威胁(闯入者将被斩首并展示他们的尸体)来阻止他们,但这最终不会奏效。我看到成功使用的一种更好的方法是赋权:监控事物,以便您识别似乎对安全感兴趣的学生,并赋予他们正式的管理权力。他们不会侵入他们已经拥有 root 访问权限的机器;你可以让他们共同负责安全,所以他们会合作追踪入侵者。

  • 一个很常见的安全方法是不关心就让无盘站变成无神荒野,在外围过滤东西。学生很有创造力,容易测试安全性,但他们也会很快感到无聊。这种方法是否是一个悬而未决的问题,但至少它很容易实现。

是的,在没有(正确)加密的情况下在机器之间共享密钥总是一个坏主意。

极不可能有人会插入该网络并使用密钥嗅出数据,但请记住,移动设备或任何其他设备仍然容易受到恶意软件/病毒等的攻击,这可能意味着可以嗅出数据如果它的保护不够好。

你正在和学生一起工作,我自己也是学生,所以我可以向你保证,有些学生会尽最大努力破坏任何限制他们行动的安全措施,连接移动设备,甚至破坏东西,因为这就是学生所做的。所以这里也存在身体风险。

是的,这是个坏主意。

SSH 主机密钥的目的是让客户端验证它是否连接到正确的服务器。如果多个服务器共享一个主机密钥,客户端就不能这样做。

不仅仅是客户端无法分辨它连接到哪台机器上;由于密钥并不是真正的秘密,任何具有物理访问权限的人都可以连接自己的设备并假装是这些工作站之一。唯一的主机密钥不能解决这个问题,但它会迫使攻击者选择一个。(如果攻击者设备可以在启动过程中充分模拟工作站,那么不以明文方式传输密钥也不足以关闭该漏洞。)

天气这实际上是一个问题,可能取决于这些工作站的使用方式以及与网络其余部分的交互方式。无论哪种方式,这些工作站的密钥管理都应该与网络上其他 SSH 主机的密钥管理属于相同的策略。