多台设备拥有相同的 SSH 服务器密钥有多糟糕?

多台设备拥有相同的 SSH 服务器密钥有多糟糕?

我正在研究运行 FreeBSD 和 SSH 的嵌入式设备。

如您所知,sshd 喜欢在首次启动时随机生成一组服务器密钥。问题是我们将使用只读 SD 卡文件系统(不可协商)来运送产品。

我认为有两个选择:

  • 在所有设备上发送相同的 sshd 服务器密钥
  • 安装内存文件系统并在每次启动时生成服务器密钥(慢......)

在所有设备上发送相同的服务器密钥是否会带来重大安全问题?这些项目不会直接出现在互联网上。偶尔会有多个设备归同一个人所有,并位于同一个网络上。

大多数时候,设备不会连接到互联网。

使用 SSH 登录不是正常操作的一部分。这主要是为了方便程序员和技术人员。客户不会使用 SSH 登录设备。

在多个硬件设备上使用相同的服务器密钥会产生什么后果?

PS 有人可以创建物联网标签吗?

编辑:我指的是在所有服务器(设备)上安装相同的主机私钥。至于用户公钥/私钥,目前没有计划使用基于密钥的登录 - 它将是密码登录。同样,所有服务器(设备)上的密码相同。

我知道这可能是个坏主意。但我想知道为什么这是一个坏主意,这样我才能理解其中的利弊。

答案1

您无需将特定于主机的数据(例如 ssh 主机密钥)存储在 SD 卡或其他只读介质上,而是可以将其存储在 NVRAM 中,这是嵌入式系统上的用途。您需要编写一些自定义脚本来在启动时存储和检索密钥,但这些脚本对于每个设备都是完全相同的。

答案2

在所有设备上都使用相同的密钥对,其影响与连接到这些设备的客户端的安全性直接相关,因为这意味着无法(从 SSH 客户端)唯一地识别它可能连接到的设备。如果您的密钥对被泄露,则可能会被用于 MITM 攻击。

另一方面,每次启动时重新生成密钥也会在客户端上触发警报。

供参考,来自man ssh(1)

ssh自动维护和检查包含所有曾经使用过的主机标识的数据库。主机密钥存储在~/.ssh/known_hosts用户的主目录中。此外,还会自动检查文件中是否存在/etc/ssh/ssh_known_hosts已知主机。任何新主机都会自动添加到用户的文件中。如果主机标识发生变化,则会ssh发出警告并禁用密码验证,以防止服务器欺骗或中间人攻击,否则这些攻击可能会被用来绕过加密。该StrictHostKeyChecking选项可用于控制登录到主机密钥未知或已更改的计算机。

答案3

听起来,在第一个选项中,SSH 密钥将保存在 SD 卡上。因此,任何用户都可以拿起卡并读取它们。因此,基本上您的私钥(大部分)已经公开。

这将允许中间人攻击,如下所示:

  1. 用户使用从您的设备获取的私钥设置 SSH 服务器,并将该 IP 地址提供给您的技术人员。
  2. 您的技术人员通过 SSH 连接输入 root 密码。
  3. 用户现在知道对所有设备有效的 root 密码。

但是,你首先不应该使用 root 密码,而是使用 ssh 密钥进行身份验证。这样,共享服务器密钥的影响就很小了如果您只能从 LAN 登录。

SSH 还提供前向保密性,因此攻击者必须能够设置虚假服务器才能从密钥中获益;被动嗅探流量将无法解密。

答案4

由于您提到最终用户/客户不使用 SSH 访问,您可能希望默认关闭 SSH 访问,并且仅在设备进入“调试”模式时暂时启用它。

然后,您可以使用相同的密钥运送所有设备,假设您已经保护了“调试”模式,因此它不会被试图破解设备的人远程触发。

或者,当设备进入“调试”模式时,您会生成一个新密钥 - 这样您就不必在每次设备启动时浪费启动时间来生成密钥。

相关内容