乐鑫wifi芯片EPS32对“故障注入”和“eFuse保护”的建议,在ESP32芯片复位后,攻击者可以读入eFuse数据的过程中,使用一个“错误注入”的物理攻击方法,破坏ESP32的eFuse读取值。具体地说,被破坏的部分可能是eFuse中的读保护位(这个位是用来控制软件对eFuse其他区域的读取)。
通过这种“故障注入”攻击,攻击者可以绕过eFuse所保存的“Flash加密”(FlashEncryption)和“SecureBoot)密钥所提供的读取保护措施。典型地,eFuse中存储的密钥由于“失败注入”一起被破坏,但是攻击者可以通过持续地攻击和分析攻击结果来恢复完全的eFuse密钥值。
编写本文时,可能会受到影响的产品包括ESP32-D0WD、ESP32-D2WD、ESP32-S0WD、ESP32-PICO-D4芯片和相关模块。乐鑫wifi芯片ESP32-D0WD-V3芯片在ROM的运行时将被检查,所以不会受到该攻击的威胁。这个问题首先被LimitedResults发现,然后向乐鑫披露。这里,我们衷心感谢LimitedResults以负责的态度向我们披露这一问题。
何为故障注入
故障注入技术是一种物理方法注入故障,以破坏硬件系统正常工作的方法,常用的方法是严格控制电压或时钟波动的时序。要实现故障注入,攻击者必须首先拥有与硬件的物理接触方法,以便修改硬件并注入故障。一般情况下,系统在遭遇“故障注入”攻击后会直接崩溃。不过,通过严格控制故障发生的时间,攻击者还可以让CPU或内部硬件进程跳过某些指令,或者破坏特定的计算结果。由于由于多次重复注入失败,攻击者可能能够绕过安全措施。虽然"故障注入"的困难程度不同,但所有电子设备都不能完全避免这种攻击的威胁。
攻击的影响
"故障注入"攻击首先要求攻击者有一个与该设备有物理接触的方法,它也需要花费大量的时间和资源来实施攻击和改进设备。攻击者可以通过“故障注入”的方式,成功地将乐鑫wifi芯片ESP32芯片上的密匙恢复,然后使用这个密钥读取设备flash中存储的固件和数据等内容,同时还可以在flash中对加密内容进行非法修改。
当通过“故障注入”成功地从ESP32恢复到“安全启动”密钥时,攻击者还可以生成一组新的安全启动信息汇总,让设备启动一个被非法修改的引导加载程序。当使用Flash加密和安全引导功能时,我们建议用户应该为每一个设备生成一个“独立的”密钥。这样,攻击者就不能把从某个ESP32芯片恢复的密钥反复使用到其它ESP32产品上,取而代之的是,每一个设备都要进行一次“故障注入”才能实现对更多芯片的攻击。
ROM检验功能
在2019年5月,乐鑫和Riscure的安全分析师一起检查了ESP32的启动ROM代码,包括对“故障注入”攻击的修改。我们发现,当芯片复位之后,对eFuse数据进行读入时,会出现“故障注入”攻击,这会破坏eFuse的读取值。为此,我们向ROM代码中增加了额外的检查步骤。新代码已用于ESP32-D0WD-V3芯片。
另外,ESP32-D0WD-V3还添加了“安全引导”(V2版本),基于不对称加密机制。“Security(V2版本)”不需要安全的启动密钥。ESP-IDF对“安全引导(V2)”的支持将于2019年第四季度推出。另外,ESP32-D0WD-V3也支持“安全引导”(版本V1),并且在ROM中添加了检查以防止“失败注入”攻击。ESP32-S2芯片将添加更多硬件和ROM代码安全特性,防止“错误注入”攻击(包括这些已经发现的攻击方式)。ESP32-S2同样采用“安全引导(版本2)”。
披露历史
·7月24日:LimitedResults透露一个漏洞:“一个攻击者可以通过一个‘故障注入’来读取eFuse中存储的密钥。
·9月12日:LimitedResults提供了一个概念性验证报告,演示了如何通过“故障注入”攻击和结果分析,非法获取eFuse中存储的密钥的过程。
·11月:该漏洞约定公布日期。
给ESP32用户的建议
如果需要使用ESP32Flash和/或安全启动功能,建议您使用我们的乐鑫wifi芯片ESP32-D0WD-V3芯片或ESP32-WROVER-E模块。这两种ESP32产品都已经在ROM中添加了检查“故障注入”功能。特殊要求,请咨询我们的销售部门。
其它一般性建议:
·如有可能,删除flash中所有不必要的敏感数据,包括提供“恢复出厂设置”选项,允许设备在flash出售或被丢弃前删除flash中的所有客户数据。
·每台设备都应该在安全引导和Flash加密时使用不同的密钥。
·每一台设备都应该产生独立的密钥,并将其存储在flash中供应用程序使用,而不是所有设备都共享一个密钥。