大家好, 我是来自银基Tiger-Team的Kevin2600. 今天想分享在学习EMFI错误注入攻击中的些许心得. 本系列将分为上下两篇. 在上篇中我们将了解电磁注入基础原理以及工具的使用. 而下篇将分享如何使用电磁注入方式破解真实目标.
0x00 电磁错误注入101
大家好, 我是来自银基Tiger-Team的Kevin2600. 今天想分享在学习EMFI错误注入攻击中的些许心得. 本系列将分为上下两篇. 在上篇中我们将了解电磁注入基础原理以及工具的使用. 而下篇将分享如何使用电磁注入方式破解真实目标.
首先我们要先来介绍下啥是错误注入, 它是硬件安全领域常见的攻击手段之一. 简单来说就是通过外界譬如电压; 时序;电磁甚至激光等对目标设备进行干扰, 以图改变其正常控制流程或防御.
其中电磁注入是相对比较容易上手的. 说起电磁波大家会不会想起X战警中那个无敌的万磁王. 电磁注入EMFI就是通过电磁波来影响目标芯片达到干扰目的.
大家都知道计算机是由0和1组成. 底层逻辑电路用接通和断开两种状态来表述. 假设我们的CPU工作在3.3V, 那么电压3.3就代表逻辑 1. 而电压0 就代表逻辑 0. 当我们给正在运算的CPU注入电磁波, 这时电磁脉冲所产生的电压就可能影响到CPU的逻辑状态. 而EMFI注入带来的0 1状态转换就可以帮助我们干扰程序流或者绕过CRP保护.
当然在实际测试的时候, 有很多关键的因素是需要考虑的. 比如脉冲的时间; 强度以及注入位置等. 打多了有无效果? 又或是目标直接重置. 我们唯有反复测试缩小参数范围. 根据目标设备的不同反应状态, 来调整注入时长和强度等参数. 电磁注入的难点就在于如何将电磁波聚焦在某个点, 同时电磁波的频率也很关键. 这些都是我们需要考虑到的.
0x01 电磁注入Hello-World
在了解错误注入及电磁波的知识点后, 相信大家已经迫不及待的想练手啦. 小伙伴们是否还记得前几年的新闻”小黑盒“事件. 据报道2018年在第九届国际门业博览会上, 一位女子对现场智能锁厂商展开踢馆. 使用的是一个神秘小黑盒. 整个过程异常轻松, 没有费时费力的暴力拆锁. 结果被挑战的智能门锁在小黑盒面前纷纷败下阵来.
其实这个所谓的神秘小黑盒就是一个特斯拉线圈. 通过产生高强度的电磁脉冲. 对目标电路设备产生影响, 从而导致系统重置. 这其实就是一种非常暴力的电磁错误注入.
这里我们用某品牌的摄像头作为实验目标, 来感受下暴力电磁错误注入的威力. 如视频所示我们用高功率手台对正常工作中的摄像头发送特定频率的无线信号. 而手台所产生的电磁场影响到了摄像头, 导致其无法正常工作.
(视频https://v.qq.com/x/page/j3235cvku3p.html)
大家是不是觉得很神奇很酷炫. 但事实上如此暴力的注入所产生的后果, 往往跟我们的预期不尽相同. 对于复杂的目标, 我们需要的是更加稳定和可控的注入设备. 接下来我们就来了解下一款名为ChipShouter的电磁波注入神器吧.
0x02 怒吼的ChipShouter
ChipShouter是由加拿大著名硬件黑客Colin O'Flynn设计出品的一款专门用于电磁波错误注入的设备. 其具有易上手及丰富的API接口便于后期开发等特点. 相对于其他同类商业产品来说, 它的价格优势非常适合大家作为硬件安全研究的必备神器.
ChipShouter套装提供了我们所需的基本配件. 同时还配备了EMFI 目标测试板, 方便大家第一时间测试EMFI 的效果.
除此之外还配有若干电磁注入探头, 用于不同芯片注入的位置微调. 这些探头在实际测试中将起到非常关键的作用.
在功能方面ChipShouter具有以下几个特点. 首先它自带调试口, 方便我们根据不同的目标调整所需参数. 同时我们也可以将其联接示波器, 测试在注入时所产生的电压是否符合我们的实际需求.
ChipShouter最大的亮点在于跟外界其他设备的扩展性. 其带有一个Trigger 端口, 我们可以连接第3方设备用于不同场景的事件触发. 通过Python 3 API 接口, 对目标进行定制化攻击测试. 小伙伴可以到官网上去了解更多实际攻击案例.
(如图 Colin 在对某款汽车ECU 进行EMFI 攻击测试)
0x03 ChipShouter实战初体验
最后让我们来体验下如何使用ChipShouter 实战CTF. 这里我们的目标是 Riscure 在2016年设计的硬件挑战中的一题. 题外话Riscure乃业界知名的硬件安全公司. 它们的侧信道攻击水平乃世界一流. 其出品的CTF挑战自然也是相当硬核.
Riscure CTF 题目的固件跑在Arduino 的Atmega芯片上. 要求通过逆向或是测信道等方法破解出Flag. 相比其他类型的CTF, 更考验大家AVR 架构逆向和硬件的实际动手能力. 而我们想搞定的是名为Fiesta 的挑战. 连结上串口后发现此题在屏幕上输出一堆LOCKLOCKLOCK 字符, 并周而复始循环输出. 而题目的用意就是要大家想办法跳出这个死循环, 从而获取Flag 解题成功.
网上可以找到很多Writeup. 正所谓条条大道通罗马, 每个人的思路和具体实现都有所不同. 比如这位Julio老兄直接通过短接时钟频率接口, 造成clock故障从而跳出循环.
还有位网名 LiveOverflow 的德国小伙则是通过电压毛刺注入的方式获取Flag. 但是电压,毛刺注入都需要对目标电路做相应的改动. 而激光注入甚至需要对芯片本身进行刨片. 这类方式除了有造成目标损害的潜在风险外, 相信绝大多数刚入门的小伙伴并不具备所需的设备环境.
这里就要请出我们的神器ChipShouter. 因其发射的电磁波足以穿透Atmega外壳, 所以我们无需对目标做任何改动.
我们首先要了解电磁注入攻击所需的关键因素. 首当其冲的就是芯片的注入点. 众所周知芯片内部集成有成千上万的逻辑门. 而CPU就是通过这些逻辑门来进行各种运算的. 其中就包括了各类加密算法.
但我们在进行注入的时候, 通常无法得知芯片上具体是那块区域在负责相关运算. 我们却又希望可以在不影响程序整体运行的情况下, 可以干扰到那几个关键的逻辑门. 所以第一步就需要确定注入的芯片位置.
当我们千辛万苦确定了大致的注入点. 迎面而来的却是第二个关键问题, 注入所需的脉冲时间以及强度. 当然因为这只是道CTF题, 与真实的目标场景比起来相对简单的多. 确实存在莫名其妙就搞定的可能. 如图Tiger-Team的帅气小伙, 啥也不管上去就是一把梭直接拿到Flag.
0x04 结语
整个过程是不是很像我们在寻找软件漏洞的溢出点, 以及计算正确的偏移量. 正如前面提到的测信道及错误注入实战非常考验动手能力和经验. 笔者强烈推荐小伙伴们都去尝试下这道有趣的CTF题. 笔者将在 ”怒吼吧电磁波 (下)” 篇中分享更多电磁注入的实战案例. 同时也借此机会向Colin O'Flynn; 王宗岳; 吴震等前辈在我们研究过程中给予的指点表示感谢.
0x05 参考文献
https://wiki.newae.com/Main_Page
https://www.newae.com/chipshouter
Open security research - 测信道攻击技术 王宗岳
Open security research - 故障注入攻击技术 王宗岳
- 本文作者: 带头大哥
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/51
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!