[论文解读] Keyshuffling Attack for Persistent Early Code Execution in the Nintendo 3DS Secure Bootchain
本文提出了一种密钥重排攻击,通过利用任天堂3DS设备安全启动链中AES-128-ECB的确定性解密特性,实现在持久化早期代码执行。通过操纵加密密钥库中的密钥#2,该攻击迫使启动ROM在合法固件运行前从内存加载并执行恶意载荷,从而实现硬件密钥的提取和长期系统控制。
We demonstrate an attack on the secure bootchain of the Nintendo 3DS in order to gain early code execution. The attack utilizes the block shuffling vulnerability of the ECB cipher mode to rearrange keys in the Nintendo 3DS's encrypted keystore. Because the shuffled keys will deterministically decrypt the encrypted firmware binary to incorrect plaintext data and execute it, and because the device's memory contents are kept between hard reboots, it is possible to reliably reach a branching instruction to a payload in memory. This payload, due to its execution by a privileged processor and its early execution, is able to extract the hash of hardware secrets necessary to decrypt the device's encrypted keystore and set up a persistent exploit of the system.
研究动机与目标
- 展示一种实用攻击,以绕过任天堂3DS的安全启动链,实现早期且持久的代码执行。
- 利用AES-128-ECB模式在密钥区解密过程中的确定性特性,操纵固件执行流程。
- 利用启动ROM在未清空内存的情况下将FIRM1加载到FIRM0之上,以安装恶意载荷。
- 通过早期执行提取硬件密钥(例如OTP哈希值),并在重启后建立持久后门。
- 表明若实现不当,新增的安全层(如ARM9Loader加密)可能反而削弱现有信任链。
提出的方法
- 利用AES-128-ECB在块级别上的确定性,对加密密钥库中的密钥进行重排,导致固件被解密为可执行但错误的代码。
- 通过暴力破解密钥#2,寻找一个值,当用于解密10.2.0固件二进制文件时,其生成的跳转指令指向8.1.0固件二进制文件结束位置之后0x190字节处。
- 将构造好的、加密后的密钥#2写入密钥库,并将自定义载荷放置在10.2.0固件二进制文件中计算出的偏移位置。
- 利用启动ROM的回退行为:当FIRM0签名验证失败时,FIRM1被加载到其之上而不会清空内存。
- 利用启动ROM使用密钥槽0x06来解密两个FIRM分区的特性,使恶意载荷在ARM9固件运行前被加载并执行。
- 在启动过程早期执行载荷,于ARM9固件清空SHA_HASH寄存器之前,提取OTP哈希值并实现持久化。
实验结果
研究问题
- RQ1能否利用3DS密钥库中AES-128-ECB的确定性行为,将代码执行重定向至恶意载荷?
- RQ2启动ROM在未清空内存的情况下将FIRM1加载到FIRM0之上,是否能提供持久化代码执行向量?
- RQ3密钥库中构造的密钥是否可导致ARM9固件二进制文件被解密为结构损坏但可执行的状态,并具备可控的跳转目标?
- RQ4是否可能在ARM9固件清空SHA_HASH寄存器之前提取硬件密钥(如OTP哈希值)?
- RQ5若未经充分审计,安全启动链中新增的加密层在多大程度上会引入新的攻击面?
主要发现
- 该攻击通过利用密钥库中AES-128-ECB的确定性块解密特性,成功在任天堂3DS上实现持久化早期代码执行。
- 通过暴力破解,找到了一个特定的密钥#2,其解密10.2.0固件二进制文件后,会生成一条跳转指令,指向8.1.0固件二进制文件结束位置之后0x190字节处。
- 由于启动ROM在FIRM0签名验证失败后,会将FIRM1加载到FIRM0之上而不会清空内存,因此载荷可被可靠地在ARM9固件运行前执行。
- 该攻击可在ARM9固件清空SHA_HASH寄存器前提取OTP哈希值,从而实现完整密钥恢复。
- 在9.6.0版本中,ARM9Loader的实现引入了关键缺陷,即未验证密钥#2,该缺陷被用于实施密钥重排攻击。
- 该攻击表明,若未经充分验证,新增的安全措施(如ARM9Loader加密层)可能反而削弱现有信任链。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。