最近,趋势科技汽车安全团队启动了一个项目,目的是复现2024年在日本东京举办的Automotive Pwn2Own大赛中使用的一种目标设备上的软件提取攻击。我们选择了电磁故障注入(EMFI)这种手段,来尝试破解现有的读取保护机制。
Electromagnetic fault injection
电磁故障注入是一种硬件攻击手段,通过向被攻击的设备注入故障来实现攻击者的目的。这些故障可以通过操纵时钟脉冲、供电电压、温度、设备周围的电磁场,或者向设备特定位置发射短光脉冲来实现。在这些攻击手段中,EMFI因其操作简便、无需对设备进行大的改动而脱颖而出。攻击者只需在设备上方移动电磁探针并触发电磁脉冲,如果运气好,就能以正确的方式干扰设备的正常运行,达到预期的效果。
实际上,进行这种攻击需要一种电磁脉冲工具。我们选择了PicoEMP(https://github.com/newaetech/chipshouter-picoemp)作为工具,并将其安装在改造过的3D打印机滑车上。
但是,我们的目标设备——GigaDevice的GD32F407Z——体积相当大,封装尺寸达到了20mm x 20mm。考虑到每次尝试都需要较长时间,并且需要多次尝试以收集有意义的统计数据,再加上我们使用的探针移动增量很小,因此缩小搜索区域是有意义的。直接向环氧封装中注入EM故障效果不大。
不幸的是,封装不是透明的,我们无法直接看到里面的芯片。这意味着我们需要一种方法来取出芯片进行测量,或者更好的是,让芯片留在封装内,这样我们就可以测量芯片的尺寸以及它在封装内的位置。
-
机械法:通过打磨或铣削封装,加热时使封装破裂。
-
化学法:使用酸来溶解封装。
-
热法:将封装放入高温炉中烧掉。
-
光学法:使用激光精确地烧掉封装
考虑到我们手头的资源,我们选择了96%的热硫酸作为去封装的方法。
注意:热硫酸极其腐蚀,操作时一定要小心,避免溢出,并始终穿戴适当的防护装备。硫酸蒸汽也极具腐蚀性,避免吸入,并在通风良好的环境中操作。
由于家庭实验室没有排风罩,所有操作都在室外进行。我们使用了以下工具:
-
96%的硫酸
-
热风枪
-
鳄鱼夹
-
装有丙酮的喷雾瓶
-
PE移液管
-
废物容器
首先,我们将设备固定在鳄鱼夹上,然后用移液管在封装中心滴加一小滴硫酸。
接着,我们用热风枪加热设备,温度设置在200°C,风速设置在40%。这个过程的目的是慢慢溶解封装的环氧树脂。我们加热设备直到观察到硫酸处有烟雾产生,然后在气泡形成之前停止加热。如果硫酸过热产生气泡,材料会形成硬质的碳化“蛋糕”,这将很难清除。
硫酸变暗后,我们停止加热,让设备稍微冷却,然后用丙酮清洗掉硫酸,最后用热风吹干设备。
这个过程需要重复多次,每次都会去除一些封装材料。这在以下一系列图像中被捕获(比这里呈现的步骤更多):
通过这个过程,我们可以看到芯片慢慢从封装中露出:较大的是微控制器,较小的是存储所有编程代码和数据的串行闪存。不幸的是,当前的过程不保留键合线,使设备无法操作。在我们的案例中不需要它的操作。这可以通过使用98%的酸和无水丙酮来缓解——这是将来尝试的事情。
通过图形编辑器,我们可以测量封装、芯片以及芯片位置的像素尺寸,然后转换成实际尺寸。这样,我们就可以精确地知道芯片的大小和位置,从而将电磁探针的运动限制在芯片区域,大大减少了实验的时间。结果如下:
-
封装尺寸1835×1835像素(测量)= 20×20毫米(从数据表已知)
-
-
芯片尺寸366×366像素(测量)= 4×4毫米(计算)
-
芯片从左下角偏移:745×745像素(测量)= 8.12×8.12毫米(计算)
通过测量得到的数据可以立即用于编程,将电磁探针的运动限制在仅针对芯片区域。为了计算这样做能节省多少实验时间,我们来计算一下面积:芯片本身的面积是4毫米乘以4毫米,等于16平方毫米;而整个封装的面积是20毫米乘以20毫米,等于400平方毫米。这样,面积减少了25倍,因此实验时间也可能减少25倍。
另一种可以避免去封装过程的方法是让探针以螺旋状移动,从封装中心开始向外扩展。这当然可以实施。然而,这里的挑战是,两个芯片可能并排封装,而不是像这个例子中那样堆叠——这将大大减少这种方法的收益。考虑到去封装过程,包括清理工作,只需要不超过1-2小时,因此认为这是非常值得的,因为它提供了获得的信息——以及得到的芯片图片。
原文始发于微信公众号(安全脉脉):为电磁故障注入(EMFI)去除芯片封装