攻击UEFI运行时服务和Linux

[[182247]]

前言

具有物理访问权限的攻击者能够在许多具有DMA-直接内存访问的完全修补的计算机上攻击固件。一旦在UEFI/EFI运行时服务中执行代码,就可以使用脚本来控制正在运行的Linux系统。

Linux 4.8内核完全随机化了内核的物理内存地址。如果计算机拥有足够大的内存,内核很有可能随机化到4G以上的地址空间上。这意味着DMA硬件攻击仅能够攻击32位的地址(4GB),如PCILeech,不能直接攻击Linux内核。

 

由于EFI运行时服务通常位于4GB以下,因此它们在高内存EFI引导系统上提供了一种进入Linux的方法。

什么是EFI运行时服务?

PC上的UEFI,mac上的EFI是现代化的BIOS。UEFI是统一的可扩展固件接口的缩写。UEFI负责检测硬件和配置设备,以便于将控制移交给正在加载的操作系统。

UEFI的两个主要组件是引导服务和运行时服务。操作系统上很早就调用ExitBootServices。随后引导服务就不再使用。

即使在操作系统加载和运行后,EFI Runtime Services仍然保持运行。它们提供操作系统可以调用的各种功能。UEFI规范指定了运行时服务应该向操作系统提供的一组固定的函数,如下所示。

UEFI运行时服务

最初,运行时服务功能的位置通过运行时服务表传送到操作系统。每个函数的物理地址是64位/8字节长,并以小端存储的形式保存在内存中。然而,到目前为止,所有系统的内存地址都在32位范围内。物理内存地址似乎是完全不变的,即在重新启动之间不发生随机化。

Linux随后将这些地址映射到虚拟地址空间,并用相应的虚拟地址覆盖表中的初始地址。初始表和被Linux修改后的表的如下所示。

EFI Runtime服务表,原始在左边,Linux修改的为右边。

攻击

如果我们使用DMA用自己的代码覆盖EFI运行时服务表会发生什么?或者,如果我们修改EFI运行时服务表的指针,让它指向之前插入的攻击代码,这又会发生什么?

当操作系统调用EFI运行时服务时,会在目标系统上执行代码-例如当它读取一个EFI变量。在特殊上下文中获得执行代码,其中较低的内存页面在虚拟地址与物理地址之间以1:1映射。在正常的虚拟地址中是可以访问到Linux内核的。在ring0/supervisor模式下执行。

然而,调用Linux内核中的所有函数是不可能的。一些函数会调用失败,因为Linux已经为运行时服务设置了特殊的EFI上下文。针对这种情况,可以在Linux内核中patch 一个“随机”的钩子函数。当“正常”内核线程命中该钩子时,被hook的内核代码将会被执行.

目标系统运行Ubuntu 16.10,连接着攻击硬件的PCILeech。右视图为PCILeech

目标

已经在一台具有8GB内存的联想T430和一台具有32G内存的 Intel NUC Skull Canyon做过了测试。T430的ExpressCard插槽用于获得DMA访问,在NUC上,在“BIOS”中设置Thunderbolt模式为“Legacy” – 允许通过Thunderbolt3 / USB-C进行DMA访问。

T430非常简单,只需插入PCILeech设备并调用pcileech.exe kmdload -kmd linux_x64_efi命令。PCILeech将搜索EFI运行时服务表并hook它。然后要求用户执行某些操作来触发已hook过的服务。

NUC是不同的。PCILeech在找到目标之前如果遇到不可读的内存就会失败。幸运的是,运行时服务表的地址是静态的,在重新启动之间不会改变。这适用于所有已测试的系统。找到地址最简单的方法是通过在同一系统或相似系统上以EFI模式用USB引导启动Linux。一旦启动就调用命令cat /sys/firmware/efi/runtime来查看运行时服务表的物理地址。一旦知道地址是0x3b294e18,我们可以调用命令

  1. pcileech.exe kmdload -kmd linux_x64_efi -min 0x3b294000 -max 0x3b295000 

显示被攻击的运行时服务表

备注

如果你也想试试,可以查看Github上的PCILeech。

虽然漏洞总是在运作,但是攻击并不是100%稳定的。有时,搜索运行时服务表会失败,有时很难触发对运行时服务表的调用。有时目标系统也会崩溃。

结论

在Linux 4.8操作系统上,如Ubuntu 16.10。由于可以利用PCILeech,所以不再是完全安全的。 即使你的笔记本电脑可能没有一个ExpressCard插槽,但是如果拧开后盖,它可能会有一个mini-PCIe或M.2插槽。

操作系统将重要的数据放在高于32-bit/4GB的地址上并不能阻止DMA攻击。32位硬件(如PCILeech)会攻击低于4GB的代码和数据。其他恶意硬件也可能攻击多达到64位地址空间。

操作系统应该启用VT-d来保护自身和固件(例如运行时服务)免受恶意设备的攻击。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/135853.html<

(0)
运维的头像运维
上一篇2025-03-01 19:45
下一篇 2025-03-01 19:47

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注