如何使连接到 ESP8266 的 Firebase 实时数据库安全
How to make Firebase Realtime Database connected to ESP8266 safe
我计划发布一个项目,该项目涉及连接到 Firebase 中的实时数据库的 ESP8266。人们将构建项目,将代码上传到他们的 ESP8266 并下载一个 Flutter Android 应用程序作为整个项目的远程控制,以 Firebase 作为后端。
API 密钥、数据库 URL 以及用户名和密码将从 Flutter 应用程序发送到 ESP8266,因此人们可以在不知道API 键和数据库 URL.
这里的问题是,从 ESP8266 检索这些数据并在数据库中创建大量流量以我这边的大账单结束将是一个非常简单的黑客攻击。有一个名为 Firebase App Check 的新事物,但由于 ESP8266 不是应用程序,因此它毫无用处。
我怎样才能防止这种情况发生?有没有我没有想到的不同方法?或者这真的不是一个值得考虑的威胁?
问题是如何在 ESP8266 上安全地存储凭据。我希望更多人考虑这样的问题。
不幸的是,答案是你不能。 ESP8266 缺少安全存储数据所需的硬件。具有物理访问权限的攻击者将能够读取芯片无法加密的闪存。
考虑升级到 ESP32。 ESP32 includes a number of security features,允许您使用不可读的加密密钥对其进行永久编程,以便它只会 运行 签名固件,并加密存储凭据的闪存。这些功能使您可以防止 CPU 执行已被篡改的固件,并使敏感的配置信息保密,即使攻击者可以物理访问 CPU。
请注意,某些安全功能是不可逆的。它们是通过更改芯片内部的“efuses”来设置的,只能更改一次。例如,如果您设置一个密钥来验证签名的固件,芯片从那时起将只能 运行 通过该密钥验证的签名固件,您将无法更改密钥或允许它 运行 未签名的固件。
如果您要为最终用户提供处理器,您将能够实施安全措施。如果您不是,并且用户正在提供他们自己的硬件并 运行 安装您的固件,您将能够在固件中检测是否启用了硬件安全......但是恶意最终用户将能够篡改固件以不需要硬件安全。
坚持使用 ESP8266,你可以让偶然的攻击者更难通过加密来检索凭据,但你仍然必须存储加密密钥。在这种情况下,攻击者不仅会通过在固件中搜索类似于凭据的字符串来找到凭据,而且他们还必须反编译固件才能找到解密凭据和找到密钥的方法。无论如何,这都不是很强的安全性;它只是增加了成功攻击的努力。
最终只有您可以决定您的风险是什么。有多少人会得到这些设备?他们的信任度如何?虽然一个就足够了,但有人攻击一个的可能性会随着数量的增加而增加。只有您可以为有权访问设备的人群及其行为建模。
您还可以通过仔细调整后端权限、设置速率限制(即使 Firebase 不支持,您也可以通过自己的代理支持)或使用其他 back-end机制。
我计划发布一个项目,该项目涉及连接到 Firebase 中的实时数据库的 ESP8266。人们将构建项目,将代码上传到他们的 ESP8266 并下载一个 Flutter Android 应用程序作为整个项目的远程控制,以 Firebase 作为后端。
API 密钥、数据库 URL 以及用户名和密码将从 Flutter 应用程序发送到 ESP8266,因此人们可以在不知道API 键和数据库 URL.
这里的问题是,从 ESP8266 检索这些数据并在数据库中创建大量流量以我这边的大账单结束将是一个非常简单的黑客攻击。有一个名为 Firebase App Check 的新事物,但由于 ESP8266 不是应用程序,因此它毫无用处。 我怎样才能防止这种情况发生?有没有我没有想到的不同方法?或者这真的不是一个值得考虑的威胁?
问题是如何在 ESP8266 上安全地存储凭据。我希望更多人考虑这样的问题。
不幸的是,答案是你不能。 ESP8266 缺少安全存储数据所需的硬件。具有物理访问权限的攻击者将能够读取芯片无法加密的闪存。
考虑升级到 ESP32。 ESP32 includes a number of security features,允许您使用不可读的加密密钥对其进行永久编程,以便它只会 运行 签名固件,并加密存储凭据的闪存。这些功能使您可以防止 CPU 执行已被篡改的固件,并使敏感的配置信息保密,即使攻击者可以物理访问 CPU。
请注意,某些安全功能是不可逆的。它们是通过更改芯片内部的“efuses”来设置的,只能更改一次。例如,如果您设置一个密钥来验证签名的固件,芯片从那时起将只能 运行 通过该密钥验证的签名固件,您将无法更改密钥或允许它 运行 未签名的固件。
如果您要为最终用户提供处理器,您将能够实施安全措施。如果您不是,并且用户正在提供他们自己的硬件并 运行 安装您的固件,您将能够在固件中检测是否启用了硬件安全......但是恶意最终用户将能够篡改固件以不需要硬件安全。
坚持使用 ESP8266,你可以让偶然的攻击者更难通过加密来检索凭据,但你仍然必须存储加密密钥。在这种情况下,攻击者不仅会通过在固件中搜索类似于凭据的字符串来找到凭据,而且他们还必须反编译固件才能找到解密凭据和找到密钥的方法。无论如何,这都不是很强的安全性;它只是增加了成功攻击的努力。
最终只有您可以决定您的风险是什么。有多少人会得到这些设备?他们的信任度如何?虽然一个就足够了,但有人攻击一个的可能性会随着数量的增加而增加。只有您可以为有权访问设备的人群及其行为建模。
您还可以通过仔细调整后端权限、设置速率限制(即使 Firebase 不支持,您也可以通过自己的代理支持)或使用其他 back-end机制。