Group-IB:UEFI 的攻击与狩猎

Andrew2021-03-25 11:20:25

0x00 摘要

大型黑客组织在bootkits的使用上有着长期的成功经验。bootkits是BIOS/UEFI中隐藏的特殊恶意代码,能够实现长期隐藏而不被发现,甚至在重新安装操作系统和更换硬盘驱动器后仍然存在。由于bootkits具有天然的隐蔽性,极难被检测发现,目前bootkits正被一些与经济动机相关的黑客组织(如Trickbot)所青睐。

本文描述了如何在本地网络中捕获此类威胁,以及如何使用最新的Mosaic Regressor UEFI bootkit搭建测试平台。

0x01 bootkit进化史

  • 在2013年,QuarksLab的Sébastien Kaczmarek创建了一个名为Dreamboot的bootkit PoC,它利用UEFI攻击操作系统的引导加载程序,但是该攻击只有禁用安全引导机制后才能实现。之后,同年的黑帽大会上提出了“一种绕过Windows 8安全引导的方法”。自此,安全引导绕过机制被第一次公开提出。

  • 在2014年,Rafal Wojtczuk和Corey Kallenberg发布了S3恢复机制中存在的Darth Venamis漏洞信息。计算机在从睡眠模式唤醒后可以使用这种机制继续工作。研究表明,存储S3 BootScript(计算机从睡眠模式被唤醒后初始化设备的一系列命令)的内存区域没有修改保护,引发了各种漏洞。

  • 在2015年,Corey Kallenberg和另一位研究人员Xeno Kovah提出了LightEater。这是一种rootkit,可通过直接访问物理内存,使用签名进行逐页搜索来获取加密密钥等关键数据。同年,从HackingTeam泄漏的数据中发现了Vector-EDK框架。这种恶意软件可以向基于UEFI的固件中注入程序。该框架曾被用于开发Mosaic Regressor。

  • 在2016年,Dmytro Oleksiuk开发了PeiBackdoor,这是第一个公开可用的UEFI Rootkit,它在PEI(即Pre-EFI初始化)阶段被加载。同年,黑客组织Equation Group泄漏的数据中出现了BANANABALLOT BIOS模块,该模块植入了某种特定程序以与CISCO路由器进行交互。

  • 在2017年,WikiLeaks发布了有关DerStarke的信息,DerStarke是一种针对macOS平台的Triton后门的UEFI版本。

  • 在2018年,ESET检测到并分析了LoJax UEFI Rootkit,这是信息安全公司首次发现的UEFI Bootkit。

  • 在2020年10月,卡巴斯基实验室在调查攻击时发现了Mosaic Regressor,这是一种UEFI bootkit,由HackingTeam数据泄漏中获得的工具所创建。同年12月,一种新型的TrickBot版本被发现,其中嵌入了UEFI代码。

    上面的介绍虽然并不完整,但也显示了UEFI相关攻击的流行趋势和危险性。近年来,固件中公开披露的漏洞数量每年都会翻倍。由此可见,网络犯罪分子对于此类攻击方法的兴趣不断上升。

0x02 UEFI bootkit 测试平台搭建

Mosaic Regressor包含的几个模块如下表所述。
模块名称 GUID 模块类型 描述
SmmInterfaceBase F50258A9-2F4D-4DA9-861E-BDA84D07A44C DXE-driver 在执行OS引导加载程序之前执行SmmAccessSub应用程序的驱动程序
Ntfs F50258A9-2F4D-4DE9-86AE-BDA84D07A41C DXE-driver 与NTFS文件系统交互的驱动程序
SmmReset EAEA9AEC-C9C1-46E2-9D52-432AD25A9B0C EFI-application 创建固件感染指示的应用程序 - UEFI变量“ fTA”
SmmAccessSub EAEA9AEC-C9C1-46E2-9D52-432AD25A9B0B EFI-application 将IntelUpdate.exe文件(恶意负载)保存到%PROGRAMDATA%\ Microsoft \ Windows \ Start Menu \ Programs \ Startup目录的应用程序
创建测试平台需要感染QEMU虚拟机的固件。该虚拟机使用OVMF(开放虚拟机固件)来对固件进行仿真模拟。固件存储在OVMF_CODE.fd文件中。

图片

因此,要修改虚拟机固件,必须先更改OVMF_CODE.fd文件。这里需要用到跨平台开源工具 - UEFITool。它能够分析固件,从固件中提取模块。

图片

要感染固件,必须向其中添加两个DXE驱动程序和两个UEFI应用程序。首先,需要找到包含所有被使用的DXE驱动程序的节(如下图所示,该节是GUID8C8CE578-8A3D-4F1C-9935-896185C32DD3的部分)

图片

在写入之前,每个现存的EFI文件都必须以FFS(固件文件系统)文件的格式显示。FFS格式的每个文件都包含多个节(在当前案例中,每个FFS文件有两个节)。第一个节包含可执行代码,第二个节包含模块名称。所有的驱动程序均被汇编为EFI_FV_FILETYPE_DRIVER文件。

所有应用程序都被汇编为EFI_FV_FILETYPE_APPLICATION文件。

为了进行汇编,需要用到EDK II GenSec和GenFfs组件。

可执行代码节的创建如下:
GenSec.exe -o pe32.sec .\Ntfs.efi -S EFI_SECTION_PE32
带有名称的节创建如下:
GenSec.exe -o name.sec -S EFI_SECTION_USER_INTERFACE -n "NTFS"
FFS格式的文件创建如下:
GenFfs-g "F50258A9-2F4D-4DE9-86AE-BDA84D07A41C" -ontfs_driver.ffs-ipe32.sec-iname.sec-tEFI_FV_FILETYPE_DRIVER
当创建带有名称的节时,必须更改-n参数后的文件名。

当创建可执行代码节时,需更改EFI文件的路径。

当创建FFS文件时,必须更改GUID-g参数)、文件类型(-t参数:驱动程序为EFI_FV_FILETYPE_DRIVER,应用程序为EFI_FV_FILETYPE_APPLICATION)以及输出文件的名称(-o参数)。

最后获得四个FFS格式的文件,可以使用UEFITool将其添加到固件中。

添加时必须确保该节具有足够的空余空间。修改后的固件应如下所示:

图片

在替换固件文件并启动虚拟机后,Mosaic Regressor开始创建文件;

该过程表明固件已被成功修改。这些文件包括%WINDIR%\setupinf.log以及%PROGRAMDATA%\Microsoft\Windows\开始菜单\Programs\Startup\IntelUpdate.exe。

第一个文件可以作为IOC,因为只有当setupinf.log文件不存在时才会创建IntelUpdate.exe文件;第二个文件从服务器下载攻击载荷:

图片

图片

虽然在当前案例中只是虚拟机被感染,但是攻击者可以利用此技术在现实中感染配置错误的计算机。

0x03 捕获Mosaic Regressor

有几种检测Mosaic Regressor的方法:
  • 在固件中搜索指示器或与UEFI引用镜像进行比较

  • 在操作系统级别搜索指示器

  • 分析网络活动

    接下来将对每种方法进行详细介绍。

搜索固件中的指示器

通过对EFI文件SmmReset的分析,可以获得一个固件IOC。该可执行文件将创建一个名为“ fTA”的NVRAM变量。而在HackingTeam开发的rkloader中发现了具有相同名称和功能的变量,因此搜索该IOC指标可以找到基于rkloader的Mosaic Regressor,rkloader以及其他bootkits。

图片

由英特尔发布和支持的多功能Chipsec应用可以检测此威胁。该应用执行固件安全性测试,获取固件转储。Chipsec也可以从操作系统中执行或引导到UEFI Shell后进行执行。本案例中选择了后一项。要创建可启动的闪存驱动器以启动Chipsec,应遵循以下步骤:
  • 将闪存驱动器格式化为FAT-32文件系统。

  • 保存计算机启动后在闪存驱动器上将要执行的UEFI Shell。为此,需要下载UEFI Shell,并将其命名为“Bootx64.efi”并保存至 /efi/boot。

  • 下载Chipsec仓库。

  • instal /UEFI/chipsec_uefi_x64.zip中的内容提取到闪存驱动器的根目录下。

  • 将Chipsec仓库的其余内容复制到闪存驱动器的根目录下。

    当引导进入到UEFI Shell后,mount命令将被执行,该命令可以显示可用设备列表。

    在下图的这种情况下,闪存驱动器将被指定为FS0:

图片

访问Chipsec目录后,可以使用如下命令检查固件中是否存在具有该名称的变量:
python chipsec_util.py uefi var-find fTA
若存在,其转储将被保存到文件中:

图片

若需要对固件进行更深入的分析,可以用Chipsec获取转储。为此,需要执行以下命令:
python chipsec_util.py spi dump rom.bin

图片

前面提到的UEFITool可用于打开转储并提取可疑模块,使用方法如下图所示:

图片

若存在引用固件映像,Chipsec可以使用它来检测固件修改。为此,必须使用如下命令生成参考图像模块的列表:
python chipsec_main.py -i -m tools.uefi.scan_image -a generate,list_of_variables.json,firmware.bin
其中list_of_variables.json是保存执行结果的文件。下图的例子中,firmware.bin文件属于引用固件转储:

图片

在接收到有关引用映像数据后,可以使用如下命令进行比较:
python chipsec_main.py -i -m tools.uefi.scan_image -a check,list_of_variables.json,suspected_firmware.bi
其中suspended_firmware.bin文件是被测固件的转储文件名称。

如上所述,可以从操作系统中使用Chipsec。为此,必须先安装Chipsec驱动程序,并且要用到python解释器运行相关py文件。通过这种方式,才能对收集到的固件映像进行进一步分析。

在操作系统级别搜索IOC

本节将介绍如何在操作系统级别上检测Mosaic Regressor固件感染。

当操作系统启动后,Mosaic Regressor攻击负载(IntelUpdate.exe文件)的行为与常见的恶意软件类似。可以利用分析EFI文件获得的数据、保存在%PROGRAMDATA%\Microsoft\Windows\StartMenu\Programs\Startup中的文件哈希、文件名称以及其他IOC来实现检测。但是,应该指出的是,文件创建事件的搜索将不会成功,因为文件是在加载操作系统之前创建的,这意味着使用EDR或类似解决方案将不会检测到该事件(唯一的解决方法:

可以在关闭计算机或使其进入休眠状态之前保存有关文件系统状态的信息,并将保存的状态与引导操作系统后的状态进行比较)。

%WINDIR%\setupinf.log文件也会发生类似情况,Mosaic Regressor将该文件用作UEFI变量的补充IOC。IntelUpdate.exe文件只会在setupinf.log文件不存在的情况下保存。

使用Huntbox中的以下查询字段,可以找到攻击载荷的痕迹,该痕迹由Mosaic Regressor EFI模块产生:
event_type: "Process creation" AND Payload.CommandLine: "Microsoft\Windows\Start Menu\Programs\Startup\IntelUpdate.exe"

图片

IntelUpdate.exe文件是使用未修改的时间属性创建。若一个自启动文件开始运行但是没有产生对应的事件,这将是一种潜在的威胁暗示。

在启动时创建的所有文件都应在沙箱或恶意软件执行平台中进行检查。在本例中,Huntpoint将文件发送到Polygon进行分析,从而识别恶意文件。结果显示,该类文件的启动在所有主机上均被阻止。

图片

使用EDR和恶意软件系统是一种通用解决方案,但在所有工作站上安装客户端并不一定可行。在这种情况下,使用已知的恶意主机分析网络流量连接可能会有所帮助。

这样可以检测发送攻击负载的服务器是否存在网络连接:
event_type: "Networkconnectionopening"  ANDPayload.RemoteAddress: "103.56.115.69"

图片

dns_query: "myfirewall.org"

图片

0x03 潜在的攻击媒介

涉及UEFI感染的情况通常有以下三种:
  • 远程感染

  • 物理访问感染

  • 通过供应链感染

    要进行远程感染,攻击者必须提升权限才能安装将在操作系统内核级别运行的攻击负载。提升权限之后,攻击者需要利用SMM漏洞。这样就可以在SMM模式下执行代码,从而绕过各种固件保护机制(闪存写保护),并直接访问固件内存。

    在涉及物理访问感染的情况中,攻击者可以利用UEFI配置或固件更新机制中的错误。

    如果供应链被感染,攻击者可以将代码注入到固件中或对其进行更新,并绕过现有的保护方法。对于此类攻击,需要获得对固件源代码的访问权。

    Chipsec也可以用于基本UEFI配置检查或漏洞扫描。为此,需要使用下列python命令运行主模块:

python chipsec_main.py
该命令将运行各种安全检查,例如重写保护检查。

需要注意的是,因为Chipsec仅提供一组基本的安全检查,所以成功通过此测试并不表示系统未受到感染。但是,未通过测试意味着必须安装最新的UEFI更新,或者找到违反固件基本安全机制的原因。

0x04 总结

UEFI威胁是最严重的安全威胁之一,想要更加安全、可靠地加载操作系统,就不能仅依靠内置的保护机制。为了保护基础设备并有效地应对此类威胁,必须重视网络威胁情报数据的使用。此外,除了实现了相关安全策略的商业产品外,还可以使用开源工具(Chipsec)进行防护,该工具通过检测IOC,在一定程度上提供了捕获威胁的可能性,并有助于检查UEFI配置是否正确。
  • End -

原文标题:Hunting bootkits on a local network and building your own test bench

原文链接:www.group-ib.com/blog/bootkits

本文为CNTIC编译,不代表本公众号观点,转载请保留出处与链接。

uefi操作系统开发
本作品采用《CC 协议》,转载必须注明作者和本文链接
0x00 摘要 大型黑客组织在bootkits的使用上有着长期的成功经验。bootkits是BIOS/UEFI中隐藏的特殊恶意代码,能够实现长期隐藏而不被发现,甚至在重新安装操作系统和更换硬盘驱动器后仍然存在。由于bootkits具有天然...
一个可能的中国 rootkit 会感染目标计算机并在重新安装系统时保持活动状态
Rootkit 是植入操作系统最深处的c。尽管在纸面上它们似乎对攻击者很有吸引力,但创建它们会带来重大的技术挑战,并且最轻微的编程错误都有可能使受害计算机完全崩溃。
此执行链的目标是在每次启动时从受感染的UEFI组件开始将内核级植入部署到Windows系统中。研究人员指出,这一特定活动似乎高度针对中国的特定个人,在伊朗和越南也出现了一些案例。
据Bleeping Computer网站7月13日消息,由联想生产的超70款笔记本电脑正受三个 UEFI 固件缓冲区溢出漏洞的影响,这些漏洞能让攻击者劫持Windows系统并执行任意代码。
Quarkslab发现“PixieFail”漏洞,开源UEFI代码中的严重缺陷需要立即修补。这些漏洞统称为PixieFAIL,是在对NetworkPkg进行粗略检查时在EDK II的网络堆栈中发现的,并且可以在网络启动过程中被利用。
近日,知名软硬件公司American Megatrends International(安迈,简称AMI)开发的MegaRAC基带管理控制器(BMC)软件曝出了两个新的严重漏洞。BMC是一种微型计算机,焊接到了服务器的主板上,使云中心及其客户可以简化远程管理大批计算机的任务。这使管理员们能够远程重装操作系统、安装和卸载应用程序,以及控制整个系统的几乎其他各个方面,甚至在关闭时也能控制。
HardenedVault 写道 "当前固件的主流方案依然是UEFI,由于技术架构设计并没有考虑其复杂的供应链生态,tianocore/EDK2的参考实现和OEM出厂实现差异过大,通过测试和逆向分析可以发现某些厂商的OEM固件中DXE模块有大量基于SMM的实现,这也是导致固件安全的高风险环节之一,因为SMM是x86平台下Host CPU的最高权限运行模式,俗称“Ring -2",操作系统难以检测R
近日,斯洛伐克网络安全公司ESET报告称发现首个能够绕过最新Windows 11安全启动保护UEFI的bootkit恶意软件——BlackLotus(黑莲花),已在地下网络黑市中销售,构成重大网络安全威胁。根据ESET的说法,该漏洞的成功利用允许在早期启动阶段执行任意代码,从而允许威胁行为者在启用UEFI安全启动的系统上执行恶意操作,而无需物理访问它。
Andrew
暂无描述