AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 818686
Accepted
NXT
NXT
Asked: 2016-12-05 09:44:09 +0800 CST2016-12-05 09:44:09 +0800 CST 2016-12-05 09:44:09 +0800 CST

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

  • 772

我正在开发运行 FreeBSD 和 SSH 的嵌入式设备。

如您所知,sshd 喜欢在首次启动时随机生成一组服务器密钥。问题是我们将交付带有只读 sd 卡文件系统(不可协商)的产品。

我看到的两个选择是:

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

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

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

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

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

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

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

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

ssh freebsd embedded internet-of-things
  • 6 6 个回答
  • 6267 Views

6 个回答

  • Voted
  1. Best Answer
    Michael Hampton
    2016-12-05T11:50:09+08:002016-12-05T11:50:09+08:00

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

    • 27
  2. dawud
    2016-12-05T10:25:46+08:002016-12-05T10:25:46+08:00

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

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

    供参考,来自man ssh(1):

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

    • 12
  3. jpa
    2016-12-06T05:00:56+08:002016-12-06T05:00:56+08:00

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

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

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

    但是,您首先不应该使用 root 密码,而是使用 ssh 密钥进行身份验证。如果您只从 LAN 登录,那么共享服务器密钥的影响就会非常小。

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

    • 5
  4. joshudson
    2016-12-06T19:56:28+08:002016-12-06T19:56:28+08:00

    我惊恐地读到这里!我在同一个集群中使用相同的 ssh 主机密钥完成了多台机器,我永远不敢这样做。在任何情况下都不要允许具有不同管理员集的机器共享 ssh 主机密钥。当您因缺乏安全感而被张贴时,这种方式会带来疯狂和尖叫的恐惧。

    看哪,我告诉你实话,妥协一个设备的人会妥协所有设备。一旦得到一个,预计坏人会随意从一个跳到另一个,安全性就像薄纸一样卷回。

    • 2
  5. Edders
    2016-12-07T03:44:11+08:002016-12-07T03:44:11+08:00

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

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

    或者您在设备进入“调试”模式时生成了一个新密钥 - 因此您不必在每次启动设备时浪费启动时间生成密钥。

    • 1
  6. Wayne Werner
    2016-12-07T04:39:48+08:002016-12-07T04:39:48+08:00

    以下是基于您拥有的约束的示例攻击场景:

    如果您的设备是,例如 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
    

    现在每台服务器都有一个新密钥。因为您真的,真的不想分发密钥的副本。老实说,这至少和拍下你家钥匙的照片并把它们和你的家庭住址一起上传到互联网一样糟糕。

    • 1

相关问题

  • 如何最好地设置 ssh 隧道以访问远程网络 (Linux)

  • SSH 和重定向

  • 通过 SSH 会话使用 NET USER 命令拒绝访问

  • SSH 服务器零日漏洞利用 - 保护自己的建议

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve