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


21

我正在运行FreeBSD和SSH的嵌入式设备上工作。

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

我看到的两个选择是:

  • 在所有设备上运送相同的sshd服务器密钥
  • 挂载内存文件系统,并在每次引导时生成服务器密钥(缓慢...)

在所有设备上运送相同的服务器密钥是否是主要的安全问题?这些项目将不会直接在互联网上。有时,同一个人和同一网络上将拥有多个设备。

大多数情况下,设备不会连接到互联网。

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

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

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

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

我知道这可能是个坏主意。我想知道为什么这确实是个坏主意,所以我可以理解这种权衡。


如果您指的是主机密钥,则拥有多个设备的用户可能会收到警告,具体取决于他们的ssh客户端配置。更大的担忧将围绕实际的ssh身份验证密钥。希望您没有安装任何私钥,希望您的公钥仅限于特定的源网络,并希望您的技术人员拥有的私钥具有强大的密码短语,并希望这些密钥不会被错误地检查到存储库中。由于这些原因,物联网的名称真的很不好。不说你愿意,只是说这是一个大问题。
亚伦

我的意思是要在所有服务器上安装相同的主机私钥。
NXT

2
在所有设备上使用相同的用户名/密码是一个非常糟糕的主意。与用于公钥认证的私钥相比,这些方法更容易被暴力破解。即使不应该将这些设备直接连接到互联网,还是有人会这么做。如果“未直接连接”是指NAT,则表示它们已足够连接...
Tero Kilkanen

7
共享SSH密钥意味着可以访问一台设备上的私钥的人可以模拟所有这些设备。
user253751 '16

3
尽管这是一个有趣的问题,但我没有看到与系统管理有关的任何内容,因此对于Server Fault来说是不合时宜的。您要询问的是为您要运送的嵌入式设备设计调试/诊断界面,而不是与sysadmins相关的界面。该问题可以迁移到信息安全
200_success '16

Answers:


27

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


12

将同一个密钥对与所有设备一起交付所产生的影响与连接到它们的客户端的安全性直接相关,因为这意味着(从SSH客户端)无法唯一标识其可能连接的设备。如果您的密钥对泄漏,则可以将其用于MITM攻击。

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

供参考man ssh(1)

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


2
我不明白为什么它们不能只生成一次(在每个设备上,第一次启动时),而后又不能再次生成(除非将它们删除)?
djsmiley2k-CoW

完全可行。但是OP声明他/她希望:“安装内存文件系统并在每次引导时生成服务器密钥”。所以我的回答是这样假设的。
dawud

啊,是的,我第一次念它的时候就想念它了。
djsmiley2k-CoW 2016年

5

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

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

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

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

SSH还提供了前向保密性,因此攻击者必须能够设置一个虚假服务器才能从密钥中受益。被动嗅探流量将不允许对其解密。


有趣的是,我们的先入为主的观念会蒙蔽我们(我)。SD卡位于设备内部,在面板后面,在电路板下面,因此,我从来没有想到有人会将其拔出。但是,您是正确的,任何使用螺丝刀的人绝对可以使用它。感谢您提醒我们考虑系统的物理安全性。
NXT

在WRT#2中,不应通过SSH连接发送root密码。应该将其输入到终端客户端,并用于验证协议的本地部分,该协议可证明拥有机密而不传输机密(“知识证明”)。甚至几十年前的系统都知道发送密码的哈希值,而不是密码本身。在质询/响应协议中包含一个随机数,攻击者既不知道原始密码也不知道可以在其位置使用的任何令牌。
Ben Voigt

1
@BenVoigt我认为大多数Unix系统确实会将密码传输到服务器。影子文件仅存储一个哈希,但您不希望信任客户端生成的哈希-因为否则任何人都可以使用被盗的哈希登录,而无需将其反转。因此,服务器必须知道实际的密码才能在其上运行bcrypt或类似密码。
jpa

2

我很恐怖地读了这篇!我曾经用相同的ssh主机密钥在同一群集中完成多台计算机,但我从来不敢这样做。在任何情况下都不允许具有不同管理员集合的计算机共享ssh主机密钥。当您因缺乏安全感而被张贴时,这就是疯狂和尖叫的恐怖。

看哪,我告诉你真相,他危及一台设备便危及了所有设备。一旦获得了一个,就可以期望坏人随意跳到另一个,安全性就像薄纸一样回滚。


1
您能否详细说明攻击者如何使用被盗的服务器私钥来破坏其他设备?
jpa

@jpa:对于主机密钥,通过拦截和窃取密码等。此外,此设置似乎建议对用户密钥执行相同的操作。
joshudson

1

由于您提到最终用户/客户未使用SSH访问,因此您可能希望默认情况下关闭SSH访问,并且仅在将设备置于“调试”模式时才临时启用它。

然后,您可以使用相同的密钥来运送所有设备,前提是您已经保护了“调试”模式,因此不会被试图入侵该设备的人远程触发。

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


我喜欢这个主意。
NXT

1

这是一个基于您的约束的示例攻击场景:

如果您的设备是,例如说Raspberry Pi。如果我向上走并从其中取出SD卡,则可以将SD卡粘贴到自己的计算机中,找到sshd密钥,然后将其复制到所需的任何位置。也许我拿起自己的树莓派和USB以太网卡。现在,我可以将其放置在目标设备与目标设备之间,并监视ssh连接。当我看到目标设备正在尝试建立ssh连接时,我将执行以下操作:

(target) <---> (my evil sshd <--> decrypted traffic <--> ssh) <---> (real server)
                                       |
                                       V
                                    log file

哦那是什么 您的密码是“我喜欢猫”?男孩,这是您发送给妻子的有趣的电子邮件。我敢打赌,如果她阅读了您发送给隔壁邻居妻子的这封电子邮件,那将更加有趣。

可能性是无止境的。目标永远不会知道,因为sshd密钥与真实服务器上的密钥相同。取决于正在接收设备设施的物理安全性,这可能是令人难以置信的简单。不要这样

相反,请执行您已经提出的建议,然后对其进行修复。在编写图像之前,请运行以下命令:

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

现在,每个服务器都有一个密钥。因为您确实真的不想分发密钥的副本。老实说,这至少和抓取房门钥匙的图片并将其与家庭住址上传到Internet一样糟糕。


1
如果某人对您的硬件具有物理访问权限,而您无法加密静态数据,则所有选择均无效。
user9517支持GoFundMonica
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.