是否可以提取加载到NodeMCU板上的程序?


13

我正在使用具有WiFi功能的NodeMCU板来构建简单的资产跟踪器。我设法找到了一些Arduino草图,可以连接到Azure IoT中心并发布消息。

我需要“加载”到板上的键之一是Azure设备连接字符串,当然还有WiFi SSID和密码。

我担心有人可能会简单地拿起董事会并“下载”文件以访问安全证书。

我的恐惧是没有根据的,还是凭证丢失是我需要减轻的真正威胁?


3
我认为@Mike Ounsworth和Bence Kaulics的答案一起给了我一个不错的选择。不幸的是,我不能将两者都标记为已接受的答案。
公羊

Answers:


12

[免责声明:我是一名安全/加密专家,每天都会处理此类安全架构问题。

您偶然发现了存储凭据的问题,即无人参与的进程可以访问凭据,但攻击者无法访问凭据。这是一个众所周知且非常困难的问题。

如果您的IoT设备在主板上内置了硬件密钥库(例如某些TPM),或者等效于Android硬件支持的密钥库或Apple Secure Enclave,则可以使用它。

在传统服务器上,您可以使用HSM或智能卡,但据我所知,唯一的完整软件解决方案是通过结合所有硬件设备的序列号构建的某种“硬件指纹”派生AES密钥。然后使用该AES密钥加密凭据。在同一服务器上运行的进程可以重建AES密钥并解密凭据,但是一旦从服务器中提取文件,该文件基本上是不可解密的。

物联网对此产生了影响,原因有二:

  1. 硬件序列号唯一的假设可能不成立,并且

  2. 与服务器不同,攻击者可以对设备进行物理访问,因此攻击者可能可以在设备上安装外壳来运行解密程序。

硬件加密(TPM)和“硬件指纹”加密都充其量是混淆的,因为从根本上说,如果本地进程可以解密数据,那么能够运行该本地进程的攻击者也可以解密数据。


因此,标准技巧似乎在这里不起作用。您需要问自己的第一个问题是:

  • 我的威胁模型是什么Secure <--> Convenient?这个项目在规模上位于什么位置?

最终,我认为您要么需要确定security > convenience并在每次启动后让人员输入凭据(使用类似@BenceKaulics的答案),要么您就可以决定security < convenience并仅将凭据放在设备上,如果您愿意,可以使用一些混淆方法感觉有所不同。


物联网设备的性质使这一难题变得更加棘手。

为了完整起见,针对此问题的成熟的工业解决方案是:

  • 在制造时为每个物联网设备提供唯一的RSA公钥。根据设备序列号将此公钥记录在db中。
  • 将敏感凭据存储在适当的服务器上,我们称其为“网关”。
  • IoT设备通过网关的RSA密钥对网关进行身份验证时,网关会使用存储的凭据为其打开一个会话,并将会话令牌交还给该设备。
  • 为了获得最佳安全性,网关是物理(或VPN)网关,因此来自IoT设备的所有流量都将通过网关,并且您可以更好地控制防火墙规则和内容-理想情况下,可以防止设备直接(非VP​​N隧道)访问互联网。

这样,破坏设备的攻击者就可以打开会话,但永远无法直接访问凭据。


2
是。问题的很大一部分是,这里要保护的是共享密码,即wifi密码。当可以对设备进行物理解剖时,共享秘密不是一个好主意。更好的设计会将设备(或其他计算机)的每个实例隔离到其自己的安全环境中,并在每个小工具与需要与之通信的系统之间使用唯一的安全通道。因此,相对于某些点对点2.4 GHz方案甚至是“ Esp Now”协议,wifi可能不是非常适合该应用程序。
克里斯·斯特拉顿

1
好点子。您可以通过使用WPA2企业客户端证书而不是SSID密码来解决共享机密问题(如果IoT设备足够大以拥有TLS堆栈,则很多则不能)。我对Azure IoT中心一无所知,但我假设这些Azure设备连接字符串对于每个设备而言已经是唯一的。不幸的是,这似乎在“ DIY无安全性”和“工业规模安全性”之间是非常干净的黑白,两者之间没有太多区别。
Mike Ounsworth

2
我想知道是否可以随意打开会话,为什么我需要凭据?
Andrew Savinykh

1
@AndrewSavinykh取决于凭据是什么。也许他们所做的只是打开一个会话,在这种情况下,没有太多理由。但是,它们可能是Windows域AD凭据,或者可以访问通常不使用的/不能从IoT设备访问的其他API。也许您对来自受感染设备的会话感到满意,但对于来自攻击者的笔记本电脑的会话则不太满意。是的,它很快就可以用于特定的用例。
Mike Ounsworth

3
序列号???查找唯一的序列号应该不是问题,但是序列号不是秘密。它们没有用做密钥。在世界上哪个地方使用序列号作为密钥是“标准把戏”?
吉尔斯(Gillles)“所以-别再作恶了”

6

威胁是真实存在的,但幸运的是,您不是第一个或只有一个拥有此类安全隐患的人。

您需要的是ESP WiFi Manager

使用此库,没有保存的会话的ESP将切换到AP模式并将托管一个Web门户。如果您使用PC或智能手机连接到此AP,则可以通过网页配置WiFi凭据。

您不必对关键信息进行硬编码,并且可以在所需的任何WiFi网络上使用设备,而无需刷新它。

怎么运行的

  • 当您的ESP启动时,它将它设置为“站”模式并尝试连接到以前保存的访问点

  • 如果不成功(或没有保存以前的网络),它将把ESP移至接入点模式并启动DNS和WebServer(默认IP 192.168.4.1)

  • 使用具有浏览器功能的任何支持wifi的设备(计算机,电话,平板电脑)连接到新创建的访问点

  • 由于使用了强制门户和DNS服务器,您将获得“加入网络”类型的弹出窗口,或者将您尝试访问的任何域重定向到配置门户

  • 选择扫描的接入点之一,输入密码,然后单击保存

  • ESP将尝试连接。如果成功,它将控制权交还给您的应用。如果不是,请重新连接到AP并重新配置。

(ESP WiFi Manager文档)


1
或仅在AP模式下下载记录或其他内容。希望张贴者不要试图将wifi本身用于资产跟踪。
克里斯·斯特拉顿

1
@ChrisStratton :-)实际上,我正在尝试使用WiFi进行资产跟踪。幸运的是,我使用的WiFI网络是公开且开放的,但是当我需要使用另一个需要密码的网络时,我担心其中的含义。设备上还存在AzureIoT Hub连接字符串的事实。
公羊

2
@rams当然,读取设备的EEPROM并不是一项艰巨的任务。
Bence Kaulics

3
@rams在您的硬件上,可以读取EPROM。较新的设备可能具有一些安全的闪存区域,可以得到更好的保护。当然,这是一个已知的问题,需要片上支持才能正常工作。
肖恩·霍利哈内

2
@SeanHoulihane-ESP8266没有EEPROM。它用于一切的SPI闪存(包括对Arduino功能的仿真)在ESP8266外部。即使在多芯片模块中,它也是一个独特的管芯,可以在不错的实验室中进行探测。
克里斯·斯特拉顿

3

是的,如果您将密码保留为纯文本,他们可以访问您的密码。

好处是许多wifi连接接口都接受哈希密码。虽然我使用的那些接受了md5散列并且md5并不是超级安全,但对于普通joe来说仍然是一个非常艰巨的挑战。根据您的配置文件,您可以声明哈希算法的名称,然后输入密码,或者使用wifi接口使用的默认值。


3
如果他们可以提取在散列时有效的散列密码,那么如何防止他们使用该密码而又不会逆转密码呢?
克里斯·斯特拉顿

1
@ChrisStratton你是对的。预防此问题的方法是针对Information Security SE,此问题要求防止凭据丢失。但是,如果没有其他软件,手机仍然无法使用哈希密码来连接网络。
atakanyenel

1
是的,实际上,在某些其他系统上重复使用wifi密码的情况下,它将提供一些保护,但是对于防止未经授权连接到该wifi接入点并不能提供太多保护。
克里斯·斯特拉顿

1
@ChrisStratton是的,例如,MAC白名单比简单地拥有一个密码并对其进行哈希处理要安全得多,但是这些步骤通常是为了实现wifi安全性,而不是为了保护公共设备上凭据的私密性。
atakanyenel

2
不,MAC白名单只是个玩笑-根本没有秘密。当然,可以很容易地从被盗的ESP8266或其SPI闪存中提取MAC。关于唯一的地方MAC白名单将有助于反对谁使用GUI加入WiFi网络,或者如果接入点正坐在那里等待来自客户端可能会显示某一天的连接,但人们从来没有连接到它 -即,剑在石头上的东西。
克里斯·斯特拉顿

1

简单的答案-是的。可以办到。您至少必须执行某种混淆处理以提供最小的保护。


1
混淆使得它更难找出如何将设备做的事情,但它是无用的,以防止克隆的设备。防止提取凭证是没有用的:您要做的就是在仿真器中运行固件。
吉尔(Gilles)'所以

完全同意。我给出此类答案的动机是要注意<必须考虑IoT网络安全>。@Mike Ounsworth提供了详细的答案,提出了使用AES和/或RSA基础结构的解决方案建议。我正在考虑再给出一个答案,但是我不确定如何使用加密技术(我在支付和银行解决方案领域也有多年经验)。我的想法是,我们必须提供实用/平衡的建议,因为通常人们会避免深入研究密码学来保护他家后院的物联网设备。
阿米特·伏伊茨

1
如果人们因为不愿意弄清楚如何制造安全设备而想要制造不安全的设备,我认为没有理由启用它们。
吉尔斯(Gillles)“所以-别再作恶了”

我的经验是人们想学习,但同样,安全级别和复杂性之间必须达到平衡。支付行业中有一个关于SET的著名故事(en.wikipedia.org/wiki/Secure_Electronic_Transaction),它非常安全,但实现起来很复杂,并且由于实践而失败。
阿米特·伏伊茨

2
混淆会增加复杂性,而不会提高安全性。那不是平衡。
吉尔斯(Gillles)“所以-别再作恶了”
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.