以前我对于硬件安全的认识只是:利用调试口拿个 shell、从调试接口或者存储芯片 dump 个固件等…
但随着芯片安全机制的完善,各种如固件读保护、安全启动、安全存储等保护机制,极大地增强了设备的安全防护能力,基本上阻断了这些简单的硬件攻击手段,也由此促进了新的攻击手段——故障注入技术的发展(真是酣畅淋漓的对决呢)
所谓故障注入,就是把故障,注入到设备中,使原本正常运行的系统产生错误的判断、执行错误的逻辑。故障注入有多种方式:电压故障、时钟故障、电磁故障、激光故障…
给大家举一个最简单的例子,直观感受一下电压故障注入的效果,假设有以下代码片段,校验用户输入的 user_key
是否正确:
...
if(validate_key(user_key)){
open_shell();
}
...
如果这个认证过程对你完全是黑盒的,你只知道输入 key 后设备会校验并执行相应的流程,且限制了请求次数不能暴力破解,这似乎无法利用了
然而,如果在 CPU 执行 validate_key()
时,我们能够对芯片的供电进行短暂接地,给 CPU 注入一个的电压故障毛刺
这个毛刺可能会导致 CPU 因供电不足而执行错误,但毛刺宽度很短,不至于让 CPU 直接挂掉
当这个电压毛刺的宽度和时机控制得足够精确,就可以恰好跳过这个校验环节,从而直接执行 open_shell()
想象一下侍卫在站岗时被人出其不意地敲了一下头,导致他瞬间失去意识,在这短暂的混乱中,攻击者抓住机会,悄悄地溜进了原本严密防守的区域
通过精确地对芯片进行故障注入,就像突然给了侍卫一“锤子”,在 CPU 执行关键操作如用户身份验证时,这个“敲击”会导致芯片瞬间“晕眩”,从而错过正常的校验步骤,使得攻击者能够绕过安全机制,执行他们原本无法执行的命令
当然,人为地把握这样精准的时机是不现实的,因此在实际利用过程中,通常需要通过脚本实现自动化,不断地进行尝试,直至成功
那么看上去,这种方式似乎可以做的事情有很多,除了常规的跳过各种调试接口、安全启动的校验逻辑,也有通过故障注入制造一个栈溢出漏洞的案例,你系统本身没有漏洞是吧?那我给你注入一个故障,不就有漏洞了吗
在实际的硬件安全研究中,故障注入已经被证明是一种有效的攻击手段,在 DEFCON、BlackHat 等安全会议中已经有很多通过故障注入对设备进行攻击的案例,有的是绕过芯片的读保护机制读取固件、有的是攻击安全启动链绕过安全启动…
最近我们正在准备一个关于故障注入的培训,涵盖了 nRF52系列、STM32系列、ESP32系列的固件读保护、安全启动绕过、eFuse密钥读保护绕过,基本都是 BlackHat 等安全会议中出现过的议题,带大家通过开发板动手复现一下,也会有一些真实设备如手环、AirTag 等给大家攻击
培训不仅仅是给设备接个线,带大家机械地复现一下故障注入攻击过程,我们还会把各个系列芯片的开发环境搭建、保护机制的启用、保护机制的原理、为什么打这个点可以成功、以及新版芯片的防护机制为什么能够防故障注入等知识分享给大家,欢迎感兴趣的朋友报名参加,更多详情见海报
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...