首页
社区
课程
招聘
[原创] Intel 酷睿 CPU Management Engine 固件研究与分析逆向 (一) 前置准备与解包
发表于: 3天前 1006

[原创] Intel 酷睿 CPU Management Engine 固件研究与分析逆向 (一) 前置准备与解包

3天前
1006

此帖是记录笔者研究Intel Management Engine 以及 Intel-SA-00086 安全漏洞的记录笔记。笔者也不知道能研究多深入,所以研究一点是一点,顺便发出来也给各位大佬参考以及讨论。(也是下班给自己找点事做,上班一直做Agent开发太无聊了)

基于之前Kaokao那篇文章(具体可以去看github或者其他平台由相关参考)。Github仓公开爆料的是TXE平台,并没有我们常规的酷睿平台。由于在国内外网站没找到一模一样的硬件并且Intel和华硕官网都找不到相关硬件的固件和资料想要复现极难。
我的平台的选择:
主板:华硕 Rog Z370 -F Game
Cpu:i7 8700k
Management Engine 版本:11.7.4 (根据Intel-SA-00086 说明影响最后一个版本是 11.8.50.3399)
CH341A Pro编程器(华硕有8Ping接口可以不用买夹子)
线缆:Usb3.0 A to A 线 或 Intel SVT DCI DbC2/3 A-to-A
展示一下我的硬件平台实验台:
图片描述
AMD散热器散热Intel CPU HHH:
图片描述

图片描述
抬起拉杆把转接器按照顺序插入最后压下压杆就行了,非常简单。

首先我们需要找到SPI芯片,并且Dump当前Bios中的数据。
图片描述
这里需要注意的是,如果是华硕的主板是自带8PING接口的,所以可以直接使用转8Pin线来dump。如果是其他匹配则需要夹子夹在主板上。华硕主板接口顺序0号位是有一个白色角的,这一点要注意别接反了烧。
图片描述

使用我们的NeoProgrammer工具Dump下来我们的文件
图片描述
点击这个位置进行时保存就可以保存

首先我们需要对dump数据进行解包,并且拿到我们的bios分区。在主板中并没有开启DCI接口的选项,所以我们需要通过魔改Bios来做到。
首先根据 Intel SPI Flash 规范可以写一个检查脚本。规范可以查询文档:Intel® 100 Series and Intel® C230
Series Chipset Family Platform Controller Hub (PCH)。这里我用AI和我自己写的PDF MCP 让AI扫描了一下快速了解了一下内存布局。

整理一下就如上表格,主要有魔术字段和FLMAP0偏移以及Region Table组成。有这些才能把Bios从Bin中切出来。
解析一下拷贝出来的固件:
魔术字:
图片描述
FLMAP0:
图片描述
说一下如何解析:

注意这个04实际上就是Offset指向 Region Table表。算法就是 0x04 << 4 = 0x40
图片描述
根据顺序来说第一个是FD,从00开始,第二个是Bios区域,第三个是ME, 第四个是GbE。在白皮书中可以找到对应的解释:
图片描述
Region Table 解析规则如下:

所以地址就是0X280000,范围是 0XFFFFFF:
图片描述
图片描述
接下来使用 uefi-firmware-parser 将 我们的固件进行解包,注意是整个固件,不需要手动切块:
图片描述
图片描述
ME和Bios区:
图片描述
FFS介绍:

解包出来就是这个:
图片描述
FFS的命名是GUID标注,也就是不同厂家里面的GUID都是一样的属于标准了。FFS说白了就是Bios的各种模块的标准,主板厂太多了,标准必须要统一。
899407d7-99fe-43d8-9a21-79ec328cac21 这个GUID 是 AMI Setup FFS的,我们需要的DCI的选项就在这个里面。
AMI FFS结构如下:

图片描述
图片描述
FFS 里有 2 个 section:

核心实际上就是这个:section0.pe
图片描述
标准的4D5A PE头。

我们的核心就是解析 String Package 和 Forms Package 并且将他们映射起来,就能找到我们想要的开关。
解析所有字符串找到和DCI有关系的字符串:
这里就让Ai给我写了一个解析脚本:

找到对应的dci的偏移值:

图片描述
具体如何解析的可以看代码。
接下来就需要找到 0x904 在哪,这个解析出来的不是 文件office,是NVRAM容器格式的偏移。
NVRAM 容器的Guid是: cef5b9a3-476d-497f-9fdc-e98143e0422c。而我们需要修改的是他出厂的默认设置:

首先需要解析 AMI NVAR 的私有格式。好在通过Ai搜寻 UEFITool 源码中是有参考的。这里写了一个脚本来寻找并且Patch一下:
图片描述
解析代码如下:

这里已经解析并且计算出真实的偏移是多少,由于NVRAM 容器是没有被压缩,就可以在对应文件中进行patch就完事了这里具体不展开了。
接下来就是刷入固件然后启动。到现在为止,我们才有资格调试ME.在KAOKAO中由于他那个设备是默认就开启了这些接口所以不需要任何Patch技术就可以解锁了。
刷入:
图片描述

两个方案:

因为uefi-firmware-parser 解包出来得缺少body(说白了切得时候少切了内容,这也是我遇到的一个坑)。我们需要使用UEFIExtract 进行解包:
图片描述
body本身是压缩算法处理过的,这里写一个解密脚本用来解密一下body,代码如下:

字典参考:551K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6H3N6s2u0W2M7$3g2S2M7X3y4Z5i4K6u0r3N6h3&6y4c8e0p5I4 这个项目。


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 5
支持
分享
最新回复 (1)
雪    币: 121
活跃值: (1230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大佬加个联系方式
2天前
0
游客
登录 | 注册 方可回帖
返回