如何入侵一台已关机的电脑,或者在Intel ME中运行未签名的代码

写在前面的话

在近期的欧洲黑帽黑客大会上,来自Positive Technologies公司的研究人员Mark Ermolov和Maxim Goryachy跟大家介绍了英特尔管理引擎(Intel Management Engine 11)中存在的安全漏洞,而这个漏洞将允许攻击者访问目标主机中的绝大部分数据和进程。而更加重要的是,在这个漏洞的帮助下,一旦攻击者绕过了传统的基于软件的保护机制之后,他们将能够对已关机的电脑进行攻击。

 

一、 介绍

英特尔管理引擎(Intel ME)是英特尔公司的专利技术,它由一个整合了平台控制器中心(PCH)和一系列内置周边设备的微控制器组成,PCH负责传输处理器和外部设备之间几乎所有的通信流量。因此,Intel ME几乎能够访问计算机中所有的数据。如果攻击者能够在Intel ME上运行第三方代码的话,那么他们就能够完全入侵目标计算机。
我们可以看到,全世界现在有越来越多的研究人员开始关注Intel ME的安全问题了。其中一个原因就是这个子系统正在向新的硬件架构(x86)以及软件平台(修改后的MINIX[1])过度,而x86平台将允许研究人员利用二进制代码分析工具的全部功能。在此之前,固件分析相对来说是比较难的,因为Intel ME早期的版本是基于一种ARCompact微控制器实现的,而这种控制器所提供的一系列指令相对来说也比较陌生。
在此之前,我们几乎是不可能对Intel ME 11进行分析的,因为可执行模块采用了Huffman代码(未知表)进行压缩。但是我们的研究团队成功地恢复了这些表,并且创建了一个专门用于解包镜像的实用工具[2]。
在对可执行模块进行解包之后,我们就可以对Intel ME的软件以及硬件内部结构进行研究了。而通过分析后我们发现,其实Intel ME并不像我们想象中的复杂。

1.1 Intel ME 11概述

关于Intel ME内部结构以及组件的内容可以从参考资料中[1]、[3]、[4]这三篇论文获取。
实际上从2015年开始,LMT处理器核心(x86指令集)就已经被整合到PCH之中了,而这种核心正用于Quark SOC之中:

英特尔所采用的很多现代技术都是围绕Intel ME开发的,比如说英特尔主动管理技术(Intel Active Management Technology)、英特尔平台可信技术(Intel Platform Trust Technology)和英特尔软件保护扩展(Intel Software Guard Extensions)等等。Intel ME同样也是Intel启动防护功能信任机制的核心,而这个功能可以防止攻击者向UEFI注入恶意代码。Intel ME基本上可以丝毫不受限制地访问计算机中的数据,而且还可以拦截并修改显卡的图像信息。这种功能也意味着,如果攻击者能够在Intel ME中执行任意代码,那么他们就能够开发出一种全新的恶意软件,而这种恶意软件是无法被目前的安全检测工具所检测到的。幸运的是,在这项技术诞生至今的十七年里,只出现了三个公开的相关安全漏洞。

1.2 Intel ME公布的三个安全漏洞

1.2.1 Ring-3 rootkits

第一个Intel ME安全漏洞公布于2009年,在当年的黑帽黑客大会上,Alexander Tereshkin以及Rafal Wojtczuk曾进行了一次主题为”介绍Ring-3 Rootkits”的演讲,这种攻击需要向UMA内存的特定区域中注入代码。
研究被公布之后,英特尔引入了UMA保护机制。现在这块内存区域已经采用了AES加密,而且Intel ME会在每一个内存页面中存储相应的校验和。当页面返回到Intel ME的主内存区域时,这个校验和将对这些页面进行检测。

1.2.2 Zero-Touch

在2010年,Vassilios Ververis演示了一种针对Intel ME的攻击技术[10],这种技术使用的是Zero-Touch模式(ZTC),而这项技术将能够绕过AMT认证。

1.2.3 Silent Bob

在2017年5月,研究人员公布了一个存在于AMT认证系统中的安全漏洞(CVE-2017-5689)[11],该漏洞将允许未经授权的用户获取目标系统(支持vPro技术)的完整访问权。
因此,总的来说目前只出现了一个允许攻击者在Intel ME内部执行任意代码的安全漏洞。

 

二、 潜在的攻击向量

Intel基本上都会对Intel ME所使用的数据进行签名,但Intel ME仍需要与用户进行一些交互:
-本地通信接口 (HECI)
-网络(vPro only)
-主机内存 (UMA)
-固件SPI布局
-内部文件系统

2.1 HECI

HECI是一种独立的PCI设备,它可以作为主系统与Intel ME之间数据交换的循环缓冲器。Intel ME中的应用程序可以注册它们自己的HECI处理器,这样将会提升安全漏洞(CVE-2017-5711)的危险系数。在苹果电脑中,默认已禁用了HECI。

2.2 网络(vPro only)

AMT是一种大型模块,其中涉及到多种不同的网络协议。这个模块中包含了大量的遗留代码,并且现在有很多商业系统都在使用它。

2.3 针对SPI接口的硬件攻击

在研究Intel ME的过程中,我突然想起也许可以使用SPI闪存模拟器来绕过签名验证机制。这种特殊的设备跟普通的SPI闪存看起来很像,但是它可以在每次访问时发送不同的数据。这也就意味着,如果一开始进行了签名检测然后再读写数据的话,攻击者就可以尝试向Intel ME中注入代码了。

2.4 内部文件系统

Intel ME使用了SPI闪存来作为主文件存储,这种文件系统的结构比较复杂[6],而且很多特权进程都会将配置文件存储在这里。因此,文件系统肯定会是攻击者的主要目标之一。那么接下来,我们就要选择一个代码模块来寻找安全漏洞了。

2.5 选择模块进行分析

Intel ME操作系统实现了类Unix的访问控制模块,user-id、group-id、可访问硬件列表以及允许使用的系统调用都会根据每一个进程来进行静态规则设置:

分析后发现,只有少数系统进程可以加载并运行这些模块。其中一个就是能够生成子进程的BUP(BringUP),在对其进行了逆向分析之后,我们在负责进行设备初始化的函数中发现了一个堆缓冲区溢出漏洞。文件/home/bup/ct并没有被签名,因此我们就可以直接修改Intel ME固件的版本信息了。现在,我们可以让BUP进程发生缓冲区溢出,但是在利用这个漏洞之前,还需要绕过堆缓冲区溢出保护机制。

2.6 绕过堆缓冲区溢出保护机制

Intel ME用于保护栈缓冲区溢出的实现如下:

  1. 当进程被创建之后,一个32位值将会从硬件随机数生成器拷贝到一个特定区域(只读);
  2. 在函数开头,这个值会在返回地址之前拷贝到栈中(实现保护);

在函数结尾,存储的值会跟已知的正确值进行对比,如果不匹配,则软件发生崩溃,并终止进程;
我们在研究过程中,发现bup_dfs_read_file函数会间接调用memcpy,并返回TLS结构的目的地址。需要注意的是,BUP的读/写函数会使用系统服务来访问共享内容。换句话来说,读取和写入功能可以通过共享内存机制来获取并记录数据。
调用memcpy函数:

从TLS获取地址:

在缓冲区溢出的场景下,这部分TLS区域是可以通过文件读取函数来重写的,而攻击者将能够通过这种方式来绕过缓冲区溢出保护。

2.7 线程本地存储

TLS的访问跟gs段寄存器有关,该结构如下所示:


其中,gs段是不可写入的,而且TLS结构本身位于栈底。因此,为了实现缓冲区溢出,我们需要重写TLS中的指针(指向SYSLIB_CTX),并生成新的结构。根据bup_dfs_read_file函数的工作机制,这将允许我们写入任意数据。

2.8 使用读取函数来获取任意写入原语

bup_dfs_read_file函数不仅可以从SPI闪存中读取数据,而且还可以在迭代过程中修改指针数据(指向SYSLIB_CTX)。而在下一次迭代过程中,sys_write_shared_mem函数将会提取出我们所创建的地址,并将其作为目的地址传递给memcpy。这样一来,我们就能够获取任意写入原语了。
bup_dfs_read_file的部分代码如下:

2.9 可能的漏洞利用向量

为了成功利用该漏洞,我们需要通过特殊的HMR-FPO消息向Intel ME的特定区域写入访问数据[9]。攻击者可以利用BIOS漏洞来发送这种消息,或者直接利用操作系统来发送(Intel ME处于制造模式下),或者通过DMA攻击。
如果下列条件叛族的话,攻击者甚至还可以远程利用该漏洞:

目标平台激活了AMT;

攻击者知道AMT管理员密码,或利用漏洞绕过了验证机制;

BIOS没有设置密码保护(或者攻击者知道密码);

BIOS开启了ME区域的写入权限;
如果上述条件均满足,那攻击者将能够远程利用该漏洞并访问Intel ME中的数据。

2.10 CVE-2017-5705,6,7概述

这个漏洞分配到的编号为INTEL-SA-00086 (CVE-2017-5705, CVE-2017-5706, CVE-2017-5707),相关描述信息如下:

CVSSv3向量

8.2 High AV:L/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H

受影响的产品[12]

6th, 7th & 8th Generation Intel® Core™ Processor Family
Intel® Xeon® Processor E3-1200 v5 & v6 Product Family
Intel® Xeon® Processor Scalable Family
Intel® Xeon® Processor W Family
Intel® Atom® C3000 Processor Family
Apollo Lake Intel® Atom Processor E3900 series
Apollo Lake Intel® Pentium™
Celeron™ N and J series Processors

总结

本文所介绍的漏洞将允许攻击者在Intel ME中运行任意代码,这种漏洞将会危及到多种英特尔技术的安全性。
我们希望本文的研究成果能够帮助更多感兴趣的研究人员了解Intel ME的安全现状。

参考资料

Dmitry Sklyarov, “Intel ME: The Way of the Static Analysis”, Troopers, 2017.

Intel ME 11.x Firmware Images Unpacker, github.com/ptresearch/unME11.

Xiaoyu Ruan, Platform Embedded Security Technology Revealed. Safeguarding the Future of Computing with Intel Embedded Security and Management Engine, Apress, ISBN 978-1-4302-6572-6, 2014.

Igor Skochinsky, “Intel ME Secrets. Hidden code in your chipset and how to discover what exactly it does”, RECON, 2014.

Alexander Tereshkin, Rafal Wojtczuk, “Introducing Ring-3 Rootkits”, Black Hat USA, 2009.

Dmitry Sklyarov, “Intel ME: flash file system explained”, Black Hat Europe, 2017.

Alex Matrosov, “Who Watch BIOS Watchers?”, 2017, medium.com/@matrosov/bypass-intel-boot-guard-cc05edfca3a9.

Mark Ermolov, Maxim Goryachy, “How to Become the Sole Owner of Your PC”, PHDays VI, 2016, 2016.phdays.com/program/51879.

Vassilios Ververis, “Security Evaluation of Intel’s Active Management Technology”, Sweden, TRITA-ICT-EX-2010:37, 2010.

Dmitriy Evdokimov, Alexander Ermolov, Maksim Malyutin, “Intel AMT Stealth Breakthrough”, Black Hat USA, 2017.

Intel Management Engine Critical Firmware Update (Intel-SA-00086), intel.com/sa-00086-support.

(完)