我正在开发一个运行FreeBSD和SSH的embedded式设备。
如你所知,sshd喜欢在第一次启动时随机生成一组服务器密钥。 问题是,我们将运送一个只读的SD卡文件系统(不可协商)的产品。
我看到他们的两个选项是:
在所有设备上发送相同的服务器密钥是否是一个主要的安全问题? 这些项目不会直接在互联网上。 偶尔会有同一个人在同一个networking上拥有多个设备。
大多数情况下,设备不会连接到互联网。
使用SSHlogin不是正常操作的一部分。 这主要是为了程序员和技术人员的方便。 客户不会使用SSHlogin设备。
在多个硬件设备上使用相同服务器密钥的后果是什么?
PS可以有人请创build一个物联网标签?
编辑 :我正在谈论在所有服务器(设备)上安装相同的主机私钥。 至于用户公钥/私钥,目前还没有计划使用基于密钥的login – 这将是密码login。 再次,所有服务器(设备)上的密码相同。
我知道这可能是一个坏主意。 我想知道为什么这是一个坏主意,尽pipe如此,我可以理解的权衡。
您可以将其存储在NVRAM中,而不是将特定于主机的数据(如ssh主机密钥)存储在SD卡或其他只读介质上,而这正是embedded式系统所使用的。 您需要在启动时执行一些自定义脚本来存储和检索密钥,但是每个设备的脚本将完全相同。
将相同的密钥对与所有设备一起发送的影响与连接到它们的客户端的安全性直接相关,因为这意味着(从SSH客户端)无法唯一地识别可能连接到的设备。 如果您的密钥对被泄露,可能会被用于MITM攻击。
另一方面,在每次启动时重新生成密钥,也会触发客户端的警报。
供参考,从man ssh(1)
:
ssh
自动维护和检查一个数据库,它包含了曾经使用过的所有主机的标识。 主机密钥存储在用户主目录中的~/.ssh/known_hosts
中。 此外,文件/etc/ssh/ssh_known_hosts
会自动检查已知主机。 任何新的主机都会自动添加到用户的文件中。 如果主机的身份标识发生了变化,ssh
对此进行警告并禁用密码身份validation,以防止服务器欺骗或中间人攻击,否则可能会被用于规避encryption。StrictHostKeyChecking
选项可用于控制login到主机密钥未知或已更改的计算机。
听起来就像在第一个选项中,SSH密钥将在SD卡上可用。 所以任何用户都可以把卡片拿出来读出来。 所以基本上你的私钥已经(大部分)公开了。
这将允许中间人攻击,如下所示:
但是,您不应该首先使用root密码,而是使用ssh密钥进行身份validation。 那么, 如果只从局域网login,共享服务器密钥的影响是相当小的。
SSH还提供了前向保密性,所以攻击者必须能够设置一个虚假的服务器来从密钥中受益; 被动嗅探stream量不会解密。
我惊恐地读到这个! 我在同一个集群中使用相同的ssh主机密钥完成了多台机器的工作,我从来不敢这样做。 在任何情况下都不允许具有不同pipe理员组的机器共享ssh主机密钥。 当你因为缺乏安全感而被张贴的时候,那就是疯狂和尖叫的恐怖。
看哪,我告诉你事实,谁妥协一个设备妥协所有的人。 一旦得到一个,期望不好的人随意跳到另一个,安全回滚,好像是薄纸。
由于您提到最终用户/客户没有使用SSH访问,因此您可能需要在默认情况下closuresSSH访问,并且仅在设备进入“debugging”模式时才暂时启用它。
然后,您可以使用相同的密钥运送所有设备,假设您已经保护了“debugging”模式,因此试图破解设备的用户不能远程触发它。
或者当设备进入“debugging”模式时产生一个新的密钥 – 所以您不必浪费引导时间在每次设备启动时生成密钥。
以下是一个基于您拥有的约束的示例攻击场景:
例如,如果你的设备是Raspberry Pi的话。 如果我从一个SD卡上拔出SD卡,我可以将SD卡插在自己的电脑中,findsshd键并将其复制到我想要的任何地方。 也许我抓住我自己的覆盆子pi和一个USB以太网卡。 现在我可以坚持在一个目标设备之间,无论他们去哪里和监视ssh连接。 当我看到目标设备正在尝试build立ssh连接时,我这样做:
(target) <---> (my evil sshd <--> decrypted traffic <--> ssh) <---> (real server) | V log file
哦,那是什么? 你的密码是“我喜欢猫”? 男孩,这是你送给你妻子的一封有趣的电子邮件。 我敢打赌,如果她读到你发给你隔壁邻居的妻子的电子邮件,会更有趣。
可能性是无止境的 。 目标永远不会知道,因为sshd密钥与真实服务器上的密钥相同。 根据正在接收设备的设备的物理安全性,这可能是非常微不足道的。 不要这样做。
相反,做你已经build议,但解决它 。 在写图片之前,运行如下所示:
ssh-keygen -f some-new-server cp some-new-server /path/to/the/mounted/image/sshd/key cp some-new-server.pub /path/to/the/mounted/image/sshd/key.pub
现在每个服务器都有一个新的密钥。 因为你真的不想分发钥匙的副本。 我的意思是说, 至less跟你家的钥匙拍下照片一样糟糕,并把你的家庭地址上传到互联网上。