此帖是记录笔者研究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,代码如下:
字典参考:e67K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6H3N6s2u0W2M7$3g2S2M7X3y4Z5i4K6u0r3N6h3&6y4c8e0p5I4 这个项目。
[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。