我目前正在讨论物联网设备的想法。它将在广泛可用的开发板上运行 Linux,我不太担心物理安全或最终用户对它做了什么坏事,但是我想保护它免受僵尸网络(例如 mirai 僵尸网络)的侵害。
对于 root 用户帐户之类的东西,我应该如何保护它:我应该使用基于密钥的身份验证还是只使用常规密码?我希望能够根据要求向最终用户授予对 root 用户帐户的访问权限,或提供开箱即用的帐户。
我不想有任何额外的用户帐户或在我的服务器上存储任何身份验证详细信息以防万一。
我目前正在讨论物联网设备的想法。它将在广泛可用的开发板上运行 Linux,我不太担心物理安全或最终用户对它做了什么坏事,但是我想保护它免受僵尸网络(例如 mirai 僵尸网络)的侵害。
对于 root 用户帐户之类的东西,我应该如何保护它:我应该使用基于密钥的身份验证还是只使用常规密码?我希望能够根据要求向最终用户授予对 root 用户帐户的访问权限,或提供开箱即用的帐户。
我不想有任何额外的用户帐户或在我的服务器上存储任何身份验证详细信息以防万一。
好问题!你应该记住几件事情。
这是非常基本的,您可能已经想到了,但让我重申:默认或简单的密码是致命的。当我问这个问题时,我了解到 Mirai 蠕虫的工作方式只是通过默认用户名和密码进行攻击。 无论您做什么,都不要在物联网设备上设置默认密码。
基本上,设置基于密钥的唯一风险是如果有人掌握了您的私钥。否则,无密码 ssh 实际上比输入密码更安全。 在我看来,有几个原因:
正如我在上面提到的,密码相对容易被暴力破解,并且密码在途中被截获的风险不大可能但可能存在。
请注意,如果您确实使用无密码 ssh,则绝对应该使用密码保护它。
假设您需要处理固件更新(否则,默认情况下您是不安全的),那么您还需要对更新进行签名(并以安全的方式管理更新)。否则,攻击者可以简单地向您的设备展示受感染的更新包。显然,如果您这样做,您将无法让用户以相同的方式应用固件更新,但您不一定需要将它们完全锁定(因为它们具有物理访问权限)。
此外,您需要提供一种安全的方式来为每个设备配置一个对最终用户可见的唯一 ssh 密钥(但如果您接受物理访问意味着所有权,它们可以包含在设备上)。