与Mac不同,许多PC可能易受到针对UEFI的预引导直接内存访问(DMA)攻击。如果在配置了安全引导的系统上发生攻击,那么信任链就会损坏,安全引导会变得不安全。
如果在操作系统启动之前获得代码执行,那么尚未加载的操作系统的进一步妥协是可能的。作为示例,可能会使用Device Guard危及运行基于虚拟化的安全性(VBS)的Windows 10系统。这已经由Dmytro Oleksiuk研究。
这个帖子将重点是通过DMA攻击UEFI,而不是潜在的进一步妥协的系统。
什么是UEFI?
UEFI是统一的可扩展固件接口的缩写。在操作系统引导之前,它是在计算机上运行的固件。 UEFI负责检测引导操作系统所需的内存,磁盘和其他硬件。 UEFI本身就是一个小型的操作系统。有时候还有一点叫做BIOS。
目标
英特尔NUC i3“Kaby Lake”全新购入6月。 8GB内存,Win10 1703安全引导,Bitlocker + TPM,基于虚拟化的安全(VBS)Device Guard已启用。 BIOS版本:BNKBL357.86A.0036.2017.0105.1112。通过内部M.2插槽访问DMA。
一个较旧的联想T430,8GB内存,Win10 1703与安全引导,Bitlocker + TPM,基于虚拟化的安全(VBS)设备防护已启用。通过ExpressCard插槽进行DMA访问。
问题
根本的问题是,许多UEFI仍然不能保护自己免受DMA攻击,尽管硬件(VT-d / IOMMU)多年来一直被包括在所有的CPU中。下面的屏幕截图显示,PCILeech首先通过DMA搜索目标计算机的内存,尝试找到哪里可以挂接到UEFI。一旦进入,它很容易转储内存(也显示),并做其他的恶行 - 如执行任意代码,尽管安全启动被启用。
攻击
如果允许DMA访问,控制是一个简单的事情,找到正确的内存结构并覆盖它们。 PCILeech自动执行此过程。可以自动搜索EFI系统表“IBI SYST”的内存地址 - 或者更好地直接指定给PCILeech。 EFI系统表包含EFI引导服务表“BOOTSERV”的位置,其中包含许多有用的函数指针。引导服务功能对于钩住并且也从我们植入的模块调用是有用的。
在下面的示例中,引导服务函数SignalEvent()被挂接。一旦插入了用于UEFI的PCILeech“内核”模块,就可以使用它来转储内存并执行代码 - 就像任何正常的PCILeech内核模块一样。在下面的例子中,PCILeech UEFI种植体uefi_textout被称为多次。输出打印在受害者计算机的屏幕上。
攻击完成后,向PCILeech发出了kmdexit命令,并卸下了UEFI植入物。在这种情况下,Windows将开始启动,如下所示。如果针对加载的操作系统,最好钩住ExitBootServices() - 当操作系统从UEFI接管计算机的控制时,由EFI的操作系统加载程序调用。在这个时间点上,恶意代码可能会修改操作系统加载程序。
我可以自己试试吗?
绝对!该代码可用作Github上的开源PCILeech直接内存访问攻击工具包的一部分。
结论
PCILeech的UEFI DMA攻击现在公开,价格便宜,易于执行。对DMAFI的恐惧已经不再是理论上的了。
供应商应该使VT-d能够防止DMA攻击。
操作系统的进一步妥协是可能的。如果有易受伤害的UEFI,可能无法依赖基于虚拟化的安全性。
责任编辑:韩希宇
免责声明:
中国电子银行网发布的专栏、投稿以及征文相关文章,其文字、图片、视频均来源于作者投稿或转载自相关作品方;如涉及未经许可使用作品的问题,请您优先联系我们(联系邮箱:cebnet@cfca.com.cn,电话:400-880-9888),我们会第一时间核实,谢谢配合。