我正在开发运行 FreeBSD 和 SSH 的嵌入式设备。
如您所知,sshd 喜欢在首次启动时随机生成一组服务器密钥。问题是我们将交付带有只读 sd 卡文件系统(不可协商)的产品。
我看到的两个选择是:
- 在所有设备上发送相同的 sshd 服务器密钥
- 挂载内存文件系统并在每次启动时生成服务器密钥(慢...)
在所有设备上发送相同的服务器密钥是否是一个主要的安全问题?这些项目不会直接在互联网上。有时,同一个人在同一网络上拥有多个设备。
大多数情况下,设备不会连接到互联网。
使用 SSH 登录不是正常操作的一部分。它主要是为了方便程序员和技术人员。客户将不会使用 SSH 登录设备。
在多个硬件设备上使用相同的服务器密钥有什么后果?
PS有人可以创建一个物联网标签吗?
编辑:我说的是在所有服务器(设备)上安装相同的主机私钥。至于用户公钥/私钥,目前没有计划使用基于密钥的登录——它将是密码登录。同样,所有服务器(设备)上的密码相同。
我知道这可能是个坏主意。我想知道为什么这正是一个坏主意,所以我可以理解权衡。
您可以将其存储在 NVRAM 中,而不是将特定于主机的数据(例如 ssh 主机密钥)存储在嵌入式系统上。您需要编写一些自定义脚本来在启动时存储和检索密钥,但每个设备的脚本都是完全相同的。
为所有设备提供相同的密钥对的影响与连接到它们的客户端的安全性直接相关,因为这意味着无法(从 SSH 客户端)唯一地识别它可能连接到的设备。如果您的密钥对被泄露,它可能会被用于 MITM 攻击。
另一方面,在每次启动时重新生成密钥,也会在客户端上触发警报。
供参考,来自
man ssh(1)
:听起来在第一个选项中,SSH 密钥将在 SD 卡上可用。因此,任何用户都可以拿走卡片并读出它们。所以基本上你的私钥已经(大部分)公开了。
这将允许中间人攻击,如下所示:
但是,您首先不应该使用 root 密码,而是使用 ssh 密钥进行身份验证。如果您只从 LAN 登录,那么共享服务器密钥的影响就会非常小。
SSH 还提供前向保密,因此攻击者必须能够设置虚假服务器才能从密钥中受益;被动地嗅探流量将不允许解密它。
我惊恐地读到这里!我在同一个集群中使用相同的 ssh 主机密钥完成了多台机器,我永远不敢这样做。在任何情况下都不要允许具有不同管理员集的机器共享 ssh 主机密钥。当您因缺乏安全感而被张贴时,这种方式会带来疯狂和尖叫的恐惧。
看哪,我告诉你实话,妥协一个设备的人会妥协所有设备。一旦得到一个,预计坏人会随意从一个跳到另一个,安全性就像薄纸一样卷回。
由于您提到最终用户/客户不使用 SSH 访问,您可能希望默认关闭 SSH 访问,并且仅在设备进入“调试”模式时临时启用它。
然后,您可以使用相同的密钥运送所有设备,假设您已保护“调试”模式,因此无法被试图破解设备的人远程触发。
或者您在设备进入“调试”模式时生成了一个新密钥 - 因此您不必在每次启动设备时浪费启动时间生成密钥。
以下是基于您拥有的约束的示例攻击场景:
如果您的设备是,例如 Raspberry Pi。如果我走过去从其中拔出 SD 卡,我可以将 SD 卡插入我自己的计算机,找到 sshd 密钥并将其复制到我想要的任何地方。也许我拿了自己的树莓派和 USB 以太网卡。现在我可以将它放在目标设备和他们要去的任何地方之间并监控 ssh 连接。当我看到目标设备正在尝试建立 ssh 连接时,我会这样做:
哦,那是什么?你的密码是“我喜欢猫”?男孩,这是您发送给您妻子的一封有趣的电子邮件。我敢打赌,如果她阅读了您发送给隔壁邻居妻子的这封电子邮件,那会更有趣。
可能性是无穷无尽的。而且目标永远不会知道,因为 sshd 密钥与在真实服务器上找到的密钥相同。根据接收设备的设施的物理安全性,这可能非常微不足道。不要这样做。
相反,做你已经提出的,但修复它。在你写你的图像之前运行这样的东西:
现在每台服务器都有一个新密钥。因为您真的,真的不想分发密钥的副本。老实说,这至少和拍下你家钥匙的照片并把它们和你的家庭住址一起上传到互联网一样糟糕。