news

ESP32 故障注入漏洞—影响分析

中国,上海
2020年1月2日

安全研究人员最近描述了一个针对 ESP32 的故障注入攻击,它可能会带来一定的安全风险,导致意外的信息泄露。然而,ESP32 的安全性仍符合绝大多数产品的要求。请看下文。

事实上,由于故障注入攻击离不开物理访问途径,因此 ESP32 的安全设计对于我们的绝大多数产品仍然有效。

对于受影响的产品,乐鑫已经提供了向新版 SoC(ESP32 ECO V3)进行迁移的路径。但是,在决定迁移到新版本之前,我们建议客户首先了解故障注入攻击的影响,并评估其产品是否确实受到影响。下面的详细信息旨在对此提供帮助。

了解故障注入攻击

故障注入攻击是通过物理方式注入故障来破坏电子系统行为的技术。具体来说,攻击者可以向芯片的外部控制组件中引入一个小错误,以干扰其正常运行。当该错误是专门针对安全子系统时,则可能会使攻击者获得内部使用的加密密钥,或者绕过必要的安全检查,并进而使用获得的密钥进一步读取和修改加密信息,例如存储在设备 Flash 中的固件和数据。故障注入有多种物理方法,例如严格定时的电压或时钟波动,外部温度变化,激光辐照或使用强磁场。

我们认为,暴露在此类攻击风险之下的芯片并非只有 ESP32 SoC,也包括其他商用芯片。

LimitedResults 在本披露中所描述的对 ESP32 的攻击,具体会导致:

1. 泄露安全启动密钥,从而绕过安全启动检查并运行不受信任的固件;

2. 泄露用于加密应用程序固件和 flash 内容的 flash 加密密钥。

请务必注意有关攻击的以下几点:

1. 攻击者必须拥有对 ESP32 SoC 的物理访问权限,才能从电路板或模组中移除一些部件,进而完成攻击。在开始物理攻击前,攻击者可能还需要切断或修改电路板走线,然后再将其接入故障注入设备。

2. 攻击者必须将电压故障注入设备连接到 SoC 的特定电源引脚,并反复尝试才可能得到特定的定时电压波动以实施攻击。


了解 ESP32 的安全启动和 Flash 加密

为了解上述攻击的影响,我们将简单总结 ESP32 的安全启动和 Flash 加密功能。

安全启动 (Secure Boot)

当开启了安全启动功能后,芯片在首次启动时,其软件加载程序会在 eFuse 中生成并编程一个“每个设备唯一的”安全启动密钥。接着,芯片将使用这个 AES-256 密钥为软件加载程序提供信息摘要,并将该摘要存储在 flash 中。然后,在随后的启动中,bootROM 会使用这个 AES-256 密钥,对比 flash 中存储的信息摘要和真实的软件加载程序文件,从而完成验证。

软件加载程序在验证固件合法性时使用了 ECDSA 算法(椭圆曲线数字签名算法)。软件加载程序仅包含公钥,而私钥仍由开发人员保管。因此,即使攻击者通过故障注入攻击破解了芯片的软件加载程序,也仅能获得 ECDSA 公钥,且无法使用此公钥签发固件或获取私钥。因此,无法让设备运行任何非法固件。

Flash 加密 (Flash Encryption)

当开启了 Flash 加密功能后,芯片在首次启动时,其软件加载程序会生成并编程一个“每个设备唯一的” flash 加密密钥,然后使用此密钥对指定区域的 flash 数据进行加密。

攻击对 ESP32 的影响

在了解了有关安全启动和 Flash 加密功能的信息之后,我们不难分析丢失 flash 加密密钥或绕过安全启动检查的影响。

如上文介绍,由于每个 ESP32 芯片均有自己唯一的 flash 加密密钥,因此即使攻击者通过故障注入攻击获得了某颗 ESP32 的 flash 加密密钥,则影响范围也仅涉及攻击者手中的这唯一一颗 ESP32 芯片。也就是说,该攻击者仅能获取这一颗 ESP32 芯片的 flash 信息和加密数据,其他芯片并不受到影响。

就像 flash 加密密钥一样,每颗 ESP32 芯片的安全启动密钥也是唯一的。因此,绕过安全启动检查也只针对于这一颗 ESP32 芯片。攻击者并不可以使用某一颗芯片的安全启动密钥,远程控制其他 ESP32 芯片执行不受信任的应用程序。

归根结底,由于每颗芯片都具有唯一的 flash 加密密钥和安全启动加密密钥,因此此类攻击的影响面仅限于攻击者手中的芯片,并不会扩大到同一型号的其他芯片。

更多详细信息,请查看 2019 年 11 月 1 日发布的安全公告

对您的产品有什么影响?

为了评估您的产品是否可能受到此类攻击的影响,您应考虑以下任一个条件对您的产品是否成立:

1. 您的产品部署在室外或在公共场所,存在遭受物理篡改并连接至故障注入设备的风险。

2. 您的产品中存储了同系列或同型号产品均共享的某些机密,且该机密是存储在连接至 ESP32 的 flash 中。

如存在上述情况,建议您在产品设计中使用新版本 SoC,即 ESP32 ECO V3

如果您的产品不符合上述任何情况,则使用当前 ESP32 SoC 芯片面临的攻击影响很小。

ESP32 ECO V3 如何解决此威胁

ESP32 ECO V3 具有以下增强功能,可保护产品免受物理故障注入攻击:

1. ESP32 ECO V3 支持基于 PKI (RSA) 的安全启动方案,其 eFuse 仅包含经过哈希算法加密的公钥,而私钥始终由您保管。这样可以确保攻击者无法创建已签名的启动加载程序,也就是说攻击者写入的非法加载程序将无法长时间保留在 flash 中或被执行。

2. ESP32 ECO V3 经过了加固,可以抵抗硬件和软件中的故障注入攻击,从而可以防止因为电压故障导致密钥泄露的情况。

如您有新的产品开发需求,可以考虑使用基于新版 ESP32 ECO V3 的模组或芯片。有关 ESP32 ECO V3 的更多信息,请查阅相关文档

ESP32 ECO V3 的可用性

基于 ESP32 ECO V3 的模组(ESP32-WROVER-E 和 ESP32-WROOM-32E )的工程样本已经限量供应。这些模组将于 2020 年 3 月投入量产。想了解更多这些产品的信息,请联系 sales@espressif.com

分享这篇文章
复制此内容