我正在使用具有 WiFi 功能的 NodeMCU 板来构建一个简单的资产跟踪器。我设法找到了一些 Arduino 草图,可以连接到 Azure IoT 中心并发布消息。
我需要“加载”到板上的密钥之一是 Azure 设备连接字符串,当然还有 WiFi SSID 和密码。
我担心有人可能会简单地拿起董事会并“下载”文件以访问安全凭证。
我的恐惧是没有根据的,还是证书丢失是我需要减轻的真正威胁?
我正在使用具有 WiFi 功能的 NodeMCU 板来构建一个简单的资产跟踪器。我设法找到了一些 Arduino 草图,可以连接到 Azure IoT 中心并发布消息。
我需要“加载”到板上的密钥之一是 Azure 设备连接字符串,当然还有 WiFi SSID 和密码。
我担心有人可能会简单地拿起董事会并“下载”文件以访问安全凭证。
我的恐惧是没有根据的,还是证书丢失是我需要减轻的真正威胁?
[免责声明:我是一名安全/加密专家,每天都在处理这样的安全架构问题。]
您偶然发现了以无人参与的进程可以访问凭证的方式存储凭证的问题,但攻击者不能。这是一个众所周知且非常难以解决的问题。
如果您的 IoT 设备在主板上内置了硬件密钥库,例如某些 TPM,或等效于Android 硬件支持的密钥库或 Apple Secure Enclave,那么您可以使用它。
对于传统服务器,您可以使用 HSM 或智能卡,但我所知道的唯一完整的软件解决方案是从通过组合所有硬件设备的序列号构建的某种“硬件指纹”中派生出 AES 密钥。然后使用该 AES 密钥来加密凭证。在同一台服务器上运行的进程可以重建 AES 密钥并解密凭据,但是一旦您从服务器中提取文件,它基本上是不可解密的。
物联网在这方面陷入困境,原因有两个:
硬件序列号唯一的假设可能不成立,并且
与服务器不同,攻击者可以物理访问设备,因此可能会在设备上获得一个 shell 来运行解密程序。
硬件加密 (TPM) 和“硬件指纹”加密充其量只是混淆,因为从根本上说,如果本地进程可以解密数据,那么能够运行该本地进程的攻击者也可以解密它。
所以标准的技巧看起来在这里不起作用。你需要问自己的第一个问题是:
Secure <--> Convenient
规模在哪里?最终,我认为您要么需要做出决定,security > convenience
并在每次启动后让人工输入凭据(使用类似@BenceKaulics 的答案),或者您决定security < convenience
并仅将凭据放在设备上,如果您可以使用一些混淆觉得这很重要。
由于物联网设备的性质,这是一个难题。
为完整起见,此问题的成熟工业解决方案是:
通过这种方式,破坏设备的攻击者可以打开会话,但永远无法直接访问凭据。
威胁是真实存在的,但幸运的是,您不是第一个或唯一一个有此类安全问题的人。
您需要的是ESP WiFi 管理器,这正是您所需要的。
使用这个库,没有保存会话的 ESP 将切换到 AP 模式并托管一个 Web 门户。如果您使用 PC 或智能手机连接到此 AP,则您将能够通过网页配置 WiFi 凭据。
您不必对关键信息进行硬编码,您可以在任何您想要的 WiFi 网络上使用您的设备,而无需重新刷新它。
怎么运行的
当您的 ESP 启动时,它会将其设置为 Station 模式并尝试连接到之前保存的接入点
如果这不成功(或没有保存以前的网络),它会将 ESP 移动到接入点模式并启动 DNS 和 WebServer(默认 IP 192.168.4.1)
使用任何支持 wifi 的设备和浏览器(计算机、手机、平板电脑)连接到新创建的接入点
由于 Captive Portal 和 DNS 服务器,您将获得“加入网络”类型的弹出窗口,或者将您尝试访问的任何域重定向到配置门户
选择扫描的接入点之一,输入密码,点击保存
ESP 将尝试连接。如果成功,它会将控制权交还给您的应用程序。如果没有,请重新连接到 AP 并重新配置。
(ESP WiFi 管理器文档)
是的,如果您将密码保留为纯文本,他们可以访问您的密码。
好处是许多 wifi 连接接口都接受散列密码。虽然我使用的那些接受了 md5 哈希并且 md5 不是超级安全,但对于普通人来说仍然是一个非常艰巨的挑战。根据您的配置文件,您可以说明散列算法的名称,然后输入密码,或者使用您的 wifi 接口使用的默认值。
简单的回答 - 是的。可以办到。您至少必须执行某种混淆以提供最低限度的保护。