这是一篇关于ARM CPU故障注入的论文选读
论文来源
论文标题:Oops, Glitched It Again: Fault Injection and Rooting Android Devices 发表期刊:USENIX Security Symposium 2023 发表时间:2023年 作者:
Patrick Schaumont Navid Emamdoost Mihai Christodorescu
主要研究了多重故障注入(MFI)技术及其对ARM TrustZone-M设备的影响。研究提出了µ-Glitch平台,这是一种能够注入多个协调电压故障的新型故障注入框架,通过该平台,攻击者可以在单个触发信号下向目标设备注入多个电压故障,从而在单次执行目标固件时攻击多个故障目标。
摘要
本文详细介绍了一种名为µ-Glitch的多重电压故障注入(MVFI)平台,这是一种针对ARM CPU的能够绕过ARM TrustZone-M设备的防护措施。本文将描述µ-Glitch平台的设计和实现,展示具体的代码实例,并分析实验数据,做一个学习记录。
1. 背景介绍
1.1 故障注入技术
故障注入(Fault Injection, FI)是一种安全测试方法,通过在系统运行过程中引入故障来评估其异常处理能力。常见的FI方法包括:
电压故障注入(Voltage Fault Injection, VFI):通过扰乱电源供应来引发故障。
时钟故障注入(Clock Fault Injection):通过扰乱时钟信号来引发故障。
电磁故障注入(Electro-Magnetic Fault Injection):通过电磁干扰来引发故障。
激光故障注入(Laser Fault Injection):通过激光干扰来引发故障。
1.2 ARM TrustZone-M
ARM TrustZone-M 是一种面向嵌入式处理器的安全技术,提供了系统级的硬件隔离机制,创建了一个安全执行环境(Trusted Execution Environment, TEE)。它通过硬件强制的计算和内存隔离,确保系统的安全性。
2. µ-Glitch 平台设计
2.1 系统架构
µ-Glitch 平台是一个用于实施多重电压故障注入(MVFI)的工具,旨在通过单一触发信号注入多个协调故障。其设计架构包括以下组件:
控制主机系统:负责管理和控制整个故障注入过程。 故障注入平台:包括内部寄存器、I/O 缓冲区、故障信号生成器等。 目标设备(Device under Test, DuT):被测试和攻击的设备。
2.2 故障模型
电压故障注入(VFI)的基本原理是通过扰乱集成电路(IC)的电源供应,导致其在特定时间段内超出正常工作范围。VFI 主要影响处理器的内部流水线阶段,包括指令跳过、数据获取错误、指令解码错误和写回错误。
2.3 参数搜索算法
为了有效地进行多重故障注入,µ-Glitch 平台采用了一种新颖的参数搜索算法,显著减少了搜索复杂度。该算法的关键步骤如下:
定义成功函数(Success Function, SF):用于判断一次MFI尝试的结果是成功还是失败。
定义部分成功函数(Partial Success Functions, PSFs):用于识别部分目标被命中的情况。
多参数搜索:通过单次故障搜索扩展参数空间,确定有效的故障参数组合。
参数翻译:将绝对参数翻译为相对参数,便于后续处理。
模糊化参数:对参数进行轻微调整,以应对非确定性行为。 综合模糊化参数:对小范围内的参数进行穷举搜索,确定最优组合。
评估与分析:分析成功的参数组合,检查其可重复性。
3. 实验与结果
3.1 攻击案例
在实验中,µ-Glitch 平台被用于测试和攻击四种实际芯片:STM32L5、M2351、SAML11 和 NXP's LPC55SXX & RT6XX。这些芯片都具有针对单次故障注入(SFI)的防护机制。
3.2 实验结果
µ-Glitch 平台成功实现了多重故障注入,在一天内完成了参数搜索和攻击实施。实验结果表明,µ-Glitch 能够绕过多种芯片的防护措施,获取安全内存中的敏感信息。
4. 故障注入示例代码
以下代码展示了如何在实际系统中配置和触发故障注入:
// 示范代码:设置故障注入参数
void setupFaultInjection() {
FI_TARGET->CONFIG = SET_FAULT_PARAMETERS;
triggerFaultInjection();
}
// 示范代码:触发故障注入
void triggerFaultInjection() {
FI_CONTROLLER->TRIGGER = 1;
}
该代码示例展示了如何在嵌入式系统中设置和触发故障注入。通过配置故障注入参数并触发控制器,攻击者可以实现多重故障注入。
5. 数据分析与图表解读
5.1 参数搜索时间比较(图1)
图1显示了注入故障前后的系统响应差异。在故障注入点,系统表现出异常,未能执行预期操作。展示了穷尽搜索和扫描搜索在不同延迟组合下的时间消耗。可以看到,扫描搜索的时间显著少于穷尽搜索。这说明扫描搜索在寻找多重故障注入参数时更高效。
5.2 攻击成功率统计(图2)
图2显示了单宽故障成功率、双窄故障成功率和无效结果增加的比较。单宽故障的成功率较高,而双窄故障的成功率相对较低。同时,无效结果增加的比例较小,这表明在优化参数搜索时,单宽故障的效果更好。
5.3攻击NXP的TrustZone-M结果(图3)
图3展示了不同故障目标下的成功率。随着故障目标的增加,成功率显著下降。特别是当目标包括SAU、AHB CTRL、DUPL和PE时,成功率几乎为零。这说明集成多重防护机制可以显著提高系统的安全性。
5.4连续指令攻击的结果分布(图4)
图4显示了在不同故障类型下的结果分布。对于无故障和双故障的情况,成功率较高,而单个LSLS或LSRS故障的成功率较低。无效结果的比例也相对较小,这表明连续指令攻击在特定条件下更容易成功。
5.5不同实验条件下的故障注入成功率(图5)
图5展示了不同实验条件下的故障注入成功率。实验4的成功率最高,为0.45,而实验3的成功率最低,为0.09。这表明不同的故障注入参数组合对成功率有显著影响。
5.6故障注入成功率随延迟变化的趋势(图6)
解释: 图6显示了故障注入成功率随延迟变化的趋势。可以看到,成功率与延迟1和延迟2之间存在一定的关系,但并不完全线性。这说明除了延迟外,还有其他因素影响成功率。
5.7延迟与成功率的关系
图7展示了延迟与成功率之间的散点关系。通过观察,可以看出延迟1和延迟2对成功率的影响各不相同,进一步验证了多因素影响的复杂性。
6. 防护措施建议
6.1 现有防护策略评估
评估了ARM TrustZone-M现有的防护措施的有效性,识别了其在面对多重故障注入时的漏洞。
6.2 改进建议
-
基于信息级别的对策(ILC) 随机化重复寄存器:
背景:重复寄存器方法是一种用来保护安全关键寄存器的故障注入对策。通过在内存空间中部署第二个结构相同的寄存器,以检测单次故障注入(SFI)。 问题:这种方法容易被多重故障注入(MFI)攻击绕过,因为攻击者可以通过多参数搜索来找到所有故障目标的偏移量。 对策:引入随机延迟,随机化重复寄存器的写入时间。这样可以有效地增加参数搜索的复杂性,降低MFI攻击的成功率。通过编译器插入延迟属性,仅在关键安全分配时引入随机延迟,从而在不影响整体计算性能的情况下增强安全性。
-
基于硬件的对策(HLC) 专用电压调节器:
背景:大多数电压故障注入(VFI)攻击通过扰乱目标设备的电源供应来实现。
对策:在集成电路(IC)内部集成专用的电压调节器,以实时监测和调整电源电压,防止电压异常。使用高频采样的电压检测机制,可以检测到任何异常电压波动并及时采取保护措施。
-
软硬件结合的对策 指令级保护和随机延迟:
背景:现有的大多数指令级对策(如重复寄存器方法)主要针对单次故障注入(SFI),对于多重故障注入(MFI)往往无效。
对策:结合软件和硬件的保护措施,如在关键指令前后插入随机延迟,并使用硬件检测机制检测指令跳过和修改。这种结合方法可以大幅增加攻击的复杂性,使得攻击者难以找到有效的参数组合。
7. 结论
在这项研究中,我们详细探讨了多重故障注入(MFI)技术及其在ARM TrustZone-M设备上的应用。通过µ-Glitch平台的设计和实现,我们能够成功绕过多种嵌入式设备的安全防护机制,展示了MFI技术的强大攻击能力。基于实验数据和分析,我们得出了以下主要结论和建议:
MFI技术的有效性:
实验结果表明,多重故障注入技术能够显著提高攻击成功率,尤其是在针对单次故障注入防护机制较强的设备时。实验4的成功率高达45%,证明了在正确配置和参数设置下,MFI可以有效绕过设备的防护机制。 参数优化的重要性:
通过详细的参数搜索和优化,能够找到最佳的故障注入参数组合。绝对参数翻译成相对参数的方法提高了故障注入的精确性和可重复性,确保了攻击的成功率和可复现性。 防护措施的必要性:
当前的防护措施主要针对单次故障注入(SFI),对于多重故障注入(MFI)仍存在漏洞。我们提出的随机化重复寄存器、专用电压调节器、指令级保护和随机延迟等防护措施,可以显著提升系统的安全性,降低MFI攻击的成功率。 软硬件结合的防护策略:
结合软件和硬件的防护措施,可以更有效地抵御MFI攻击。软件层面的随机延迟和硬件层面的电压调节器相辅相成,增强了整体防护能力。 未来研究方向:
建议进一步研究和开发针对MFI的综合防护策略,包括更复杂的参数随机化方法、动态防护机制以及基于机器学习的故障检测和响应系统。提高防护措施的动态适应性,使其能够实时响应和调整,以应对复杂的故障注入攻击。
附录1:攻击原理
初始化攻击设置
设置硬件和软件环境,包括电压故障注入平台。 识别故障目标
确定系统中的关键指令或寄存器,这些是攻击的目标。 参数搜索
搜索最佳故障参数(偏移和宽度),以确保成功注入多个故障。 注入故障
使用确定的参数在目标设备上注入多个电压故障。 评估成功
检查系统行为,确认故障注入是否成功绕过了安全机制。 详细故障注入目标
SAU激活:跳过SAU的激活指令。
Secure AHB Controller激活:跳过Secure AHB Controller的激活指令。
Duplicate Register攻击:跳过写入重复寄存器的指令。
权限提升:通过注入连续的故障指令,实现从安全态到非安全态的转换。
附录2:论文公式解读 在多重故障注入(MFI)和ARM TrustZone-M设备的安全研究中,文献中使用的公式通常用于描述故障注入参数的设置、成功率的计算和攻击效果的评估。以下是一些常见公式及其含义:
1.故障注入参数设置公式
绝对参数翻译为相对参数 假设我们有一组绝对时间参数,这些参数表示在时间点 注入故障。为了提高精确性和可重复性,我们可以将绝对参数翻译为相对参数。
其中:
表示第次故障注入的绝对时间。
表示相对于上一次故障注入的时间间隔。
通过计算相对参数,我们可以得到一组相对时间间隔,以便在不同系统条件下更稳定地控制故障注入时间。
2.故障注入成功率公式
成功率计算 成功率是评估故障注入攻击效果的重要指标。假设我们进行了次故障注入实验,其中成功的次数为,则成功率的计算公式为:
其中: 表示成功的试验次数。 表示总的试验次数。
3.参数搜索时间比较公式 参数搜索时间 为了比较不同参数搜索方法的效率,可以计算每种方法在找到最佳故障注入参数组合时所花费的时间。假设穷尽搜索的时间为,扫描搜索的时间为,可以通过以下公式进行比较: 其中 表示穷尽搜索所需时间。 表示扫描搜索所需时间。
4.多重故障注入效果评估公式
多重故障注入成功率
在多重故障注入中,评估每种故障组合的成功率非常重要。假设我们有两种故障参数组合,成功率分别为和 ,则可以使用以下公式进行比较:
其中: 表示第一个故障组合的成功率。
表示第二个故障组合的成功率。
5.随机延迟插入公式 随机延迟 在对关键指令进行保护时,可以在其前后插入随机延迟,以增加攻击复杂性。假设随机延迟的时间范围为
则随机延迟的计算公式为:
其中:
表示最小延迟时间。
表示最大延迟时间。
表示一个介于0和1之间的随机数。 以下是使用上述公式的代码示例,展示如何计算相对参数和成功率:
# 绝对参数
absolute_params = [100, 250, 400, 600]
# 计算相对参数
relative_params = [absolute_params[0]]
for i in range(1, len(absolute_params)):
relative_params.append(absolute_params[i] - absolute_params[i - 1])
print("绝对参数:", absolute_params)
print("相对参数:", relative_params)
# 成功率计算
total_experiments = 100
successful_experiments = 24
success_rate = successful_experiments / total_experiments
print("成功率:", success_rate)
1.https://www.usenix.org/system/files/usenixsecurity23-sass.pdf