昨天树莓派刚刚宣布了挑战赛获奖名单和简单介绍,这里将相关内容给大家做个翻译介绍,方便了解当前破解的前沿知识和破解手段
2024年8月推出了第二代微控制器RP2350。基于其前身RP2040的成功,RP2350增加了更快的处理器、更多的内存、更低的功耗状态以及围绕Arm TrustZone for Cortex-M构建的安全模型。
所有芯片都有漏洞,大多数供应商的策略是不谈论它们
。我们认为这是次优的,因此,我们以DEF CON的精神提供了一项为期一个月的1万美元奖金,奖励第一个从设备的一次性可编程(OTP)存储器中检索到秘密值的人。我们的目的是尽早发现弱点,以便在RP2350广泛应用于安全应用之前修复它们。这种开放的安全工程方法普遍受到好评:称之为“通过透明性实现安全”,与其他供应商的“通过模糊性实现安全”哲学形成对比。
没有人在截止日期前领取奖金,因此在九月份我们将截止日期延长到年底,并将奖金翻倍至2万美元。今天,我们很高兴地宣布,我们收到了四个有效的提交,所有这些都需要对芯片进行物理访问,具有不同程度的侵入性。在比赛之外,Thomas “stacksmashing” Roth和Hextree团队也发现了一个漏洞,下面宣布获奖者:
“Hazardous threes” – Aedan Cullen
RP2350的抗熔断OTP存储器是一个安全关键组件:安全配置位存储在OTP中,并在复位过程中早期读取。一个称为OTP PSM的状态机负责这些读取。不幸的是,OTP PSM存在一个可利用的弱点。
抗熔断阵列通过USB_OTP_VDD引脚供电。为了防止电源故障,PSM使用“保护读取”:读取已知数据非常接近读取安全关键数据。电源故障应导致已知保护数据的不匹配,表明相关的安全关键读取是不可信的。我们使用一个单一的保护字:0x333333。
然而,在电源故障期间,OTP可能会保留最后感知到的读取数据,随后的读取将返回电源良好时最近读取的数据。这本身不是一个缺陷,但与保护字的选择相互作用不佳。如果在保护读取发生后精确地降低USB_OTP_VDD,则在恢复电源之前将读取0x333333。因此,攻击者可以用这个值覆盖安全关键的配置数据。
这是一张电子电路板(绿色PCB)的特写照片,上面有各种表面贴装组件。中心是一个带有Raspberry Pi标志的黑色集成RP2350电路芯片。一个金色的探针或测试针正在与芯片上的一个引脚接触,表明正在进行测试、调试或编程活动。围绕主芯片的是小电阻、电容器和可能的其他集成电路,所有这些都排列在绿色电路板上。图片由Aedan Cullen提供 如果在OTP PSM执行期间,CRIT0和CRIT1字被替换为0x333333,则RISCV_DISABLE和ARM_DISABLE位将被设置,DEBUG_DISABLE位将被清除。ARM_DISABLE优先,因此芯片在复位后将以RISC-V内核运行并允许调试,而不管熔丝中写入的实际配置。然后,从OTP转储秘密数据变得很简单。
更多信息可以在Aedan的GitHub存储库中找到,并在他的Chaos Communication Congress演讲中找到。
目前没有可用的缓解措施,该漏洞已被分配错误编号E16。可能会在RP2350的未来版本中解决。
USB引导程序单指令故障与电源电压注入 – Marius Muench
RP2350的一个基础安全特性是安全启动,它限制芯片只能运行用特定私钥签名的代码。如果攻击者能够绕过或突破安全启动,他们可以运行自己的未签名代码,这可能会从OTP中转储秘密数据。
Marius发现了引导ROM的重启API中的一个弱点。这个API支持几种不同的重启模式,其中之一是REBOOT_TYPE_PC_SP,它以特定的程序计数器和堆栈指针重启并开始执行。这只能从已经在芯片上运行的安全固件中触发,但如果攻击者能够从外部触发这种启动模式,并且具有受控参数,我们将开始在攻击者提供的地址执行代码——而无需验证代码的签名!
但是,如果这种启动模式只能由签名和验证的固件访问,如何进入这种启动模式呢?
答案(当然)是故障注入。通过向USB引导程序发出正常的重启命令,并注入故障(在这种情况下,通过故障电源电压)以便在正确的时间跳过一条指令,可以欺骗重启API相信请求了REBOOT_TYPE_PC_SP。如果攻击者事先将恶意代码加载到RAM中,这些代码可以被执行并用于提取秘密。
这种攻击的一个有趣方面是,接受重启命令的代码实际上是针对故障注入进行了加固的。不幸的是,实现重启逻辑的函数本身假设传入的参数(包括请求的启动模式)是经过清理的。由于编译器发出的指令排列不幸,注入一个跳过两个非常具体指令之一的故障会使芯片重新启动到危险的启动类型。
Marius说:“虽然事后看来这个突破似乎很简单,但现实却大不相同。识别和利用这些类型的问题远非简单。总体而言,这次黑客挑战对我来说是一个多月的项目,期间探索了许多死胡同,并进行了无数次攻击代码和设置的迭代,以确认或否定潜在的发现。尽管如此,我在深入研究新RP2350微控制器的复杂性时获得了很多乐趣,我要感谢Raspberry Pi和Hextree举办了这次挑战!”
针对这种攻击,有几种有效的缓解措施,该漏洞已被分配错误编号E20。最精确的缓解措施是设置OTP标志BOOT_FLAGS0.DISABLE_WATCHDOG_SCRATCH,这将禁用在应用代码不需要该功能的情况下重新启动到特定PC/SP的能力。
签名检查单指令故障与激光注入 – Kévin Courdesses
Kévin发现了安全启动路径中的一个可利用弱点,就在要验证的固件被加载到RAM中之后,以及在计算签名检查所需的哈希函数之前。在这个阶段注入一个精确定时的故障可以导致哈希函数计算出由攻击者控制的不同数据。如果该数据是有效的签名固件,签名检查将通过,攻击者的未签名固件将运行!
引入故障的最常见方法(如Marius的攻击中所见)是短暂拉低电源电压,引入短暂的“故障”,导致芯片中的数字逻辑行为异常。RP2350包含故障检测电路,旨在发现大多数电压故障并故意停止芯片。为了在不触发故障检测器的情况下注入故障,Kévin构建了一个定制的激光故障注入系统;该系统将激光脉冲短暂应用于通过磨掉部分封装暴露的芯片背面。尽管为了保持设置在有限预算内需要做出一些技术妥协,但它成功了!
更多信息可以在Kévin的论文中找到。
目前没有可用的缓解措施,该漏洞已被分配错误编号E24。可能会在RP2350的未来版本中解决。
故障检测器评估和OTP读取双指令故障与电磁注入 – Hextree
我们委托Hextree团队评估安全启动过程,以及冗余协处理器(RCP)和故障检测器的有效性。他们发现,在最高灵敏度设置下,故障检测器可以检测到许多电压故障;然而,未检测到的故障率仍然足够高,使得攻击在一定努力下是可行的。
他们的大部分工作集中在电磁故障注入(EMFI)上,这种方法将高压脉冲传递到芯片顶部的小线圈上。这会在芯片中产生一个电磁场,从而注入非常局部的故障,而不会干扰故障检测器。测试产生了多个与安全相关的结果,特别是通过在启动过程的早期注入故障,可以破坏从OTP读取的值,并且RCP提供的随机延迟容易受到侧信道测量的影响。