![在安装 Linux 的情况下,如何升级联想 T440s 的管理引擎/AMT 固件?](https://linux22.com/image/1532982/%E5%9C%A8%E5%AE%89%E8%A3%85%20Linux%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E5%A6%82%E4%BD%95%E5%8D%87%E7%BA%A7%E8%81%94%E6%83%B3%20T440s%20%E7%9A%84%E7%AE%A1%E7%90%86%E5%BC%95%E6%93%8E%2FAMT%20%E5%9B%BA%E4%BB%B6%EF%BC%9F.png)
我有一台 T440s。CVE-2017-5689 / INTEL-SA-00075 即将出现。联想发布了更新:
https://support.lenovo.com/us/en/product_security/LEN-14963
他们的主板 BIOS 更新通常既有 Windows 必需的选项,也有实时 USB 更新选项。但是,据我现在检查,这个只有 Windows 必需的选项。他们甚至还没有发布所有硬件型号的更新,所以也许事情还在筹备中,但他们没有在我所看到的任何内容中表明这一点。
同时,我在一些 wiki 上找到了这些说明:
http://www.thinkwiki.org/wiki/Intel_Active_Management_Technology_(AMT)#Firmware_update
但它们似乎很复杂,有点令人困惑,而且我想知道它是否已经过时了。作为 wiki,它可能会改变,但目前似乎说我需要:
- 在 USB 上安装 Windows PE
- 从中提取 2 个文件其他固件文件从 IBM 网站使用 Wine 进行访问:
- 我将运行 CMD 来进行更新
- 我需要弄清楚如何加载驱动程序。
我觉得这不太靠谱。有人能证实这一点吗?还有其他方法吗?
顺便提一下,联想难道不应该更负责任一点,来处理其产品中的缺陷吗?还是我在合同中同意只运行 Windows?对于他们产品中如此严重的缺陷,缺乏支持、透明度和准备对我来说是完全不可接受的。
答案1
我找到了一种使用原生 Linux(甚至是 DOS/EFI:只需使用系统工具下载中的相应工具,而不是 Linux 工具)的方法。
联想为我们提供了两样东西:管理引擎接口(MEI)或管理引擎软件和管理引擎固件(ME)。前者需要提供驱动程序(HECI)来访问和刷新 ME,后者是刷新实用程序加上刷新映像。由于我们使用 Linux,我们只需要闪存工具和固件。在我的例子中,它被称为“ ”,从现在起r0dmu01w.exe
我将使用“ ”。FWPkg.exe
$ innoextract FWPkg.exe
使用 innoextract或 wine提取固件$ wine FWPkg.exe
app
这将在当前目录 (innoextract) 中创建文件夹“ ”,或在需要时ME
在 wine 根目录 (wine) 中创建文件夹“ ” 。我们只对文件 (固件映像) 和调用“ ”的“ ”闪存脚本C:\DRIVERS\
感兴趣。ME_<version>_[Consumer/Corporate]_*_Production.bin
MEUpdate.CMD
FWUpdLcl(64).exe
英特尔确实向分销商提供了该工具的 Linux 版本,但是我们可以下载它这里METools.rar
(非官方!)。这些是英特尔 ME 系统工具,我有一个 ME v11,所以我下载了“英特尔 CSME 系统工具 v11”,从现在起我将称之为“ ”。
- 提取文件
$ unrar x METools.rar
- 在解压的目录中,会有一个“
FWUpdate/LINUX(64)/Portable/FWUpdLcl
”文件。 - 进入该文件的路径并添加执行权限:
$ chmod +x FWUpdLcl
看一下“
MEUpdate.CMD
”脚本,其中有一行看起来有点像这样:%~dp0FWUpdLcl64.exe -F %~dp0ME_<version>_[Consumer/Corporate]_*_Production.BIN -OEMID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX -generic -allowsv
我们只对 OEMID 标志感兴趣,我将其称为
$OEMID
。或者,您可以使用“MEInfo
”实用程序,但这需要iomem=relaxed
在内核加载命令行中进行设置。现在使用 Linux 工具作为管理员并更新你的固件,如果你的设备确实不是支持英特尔 AMT(支持 AMT 的 CPU 上有“vPro”标志):
# FWUpdLcl -F <path/to/binfile> -OEMID $OEMID -allowsv
通用标志在 Linux 上不可用,我能找到的唯一文档是“无需凭证即可通过 MEI 执行更新”——但我们似乎不需要它。AllowSV 允许同版本更新。
就这样,您现在应该有一个更新的 ME 固件。
编辑:我刚刚发现某人已经找到了相同的解决方案(德语),链接完整。
答案2
配方(每次修改的确切时间是这个)适用于我的 Thinkpad X2X0(原始操作系统升级到 GNU/Linux 和 OpenBSD),略有改动。
准备工作winpe3_x86.iso
相对简单。我启动了它,并且必要的固件升级和驱动程序“包”以两个文件的形式保存在 USB 闪存驱动器上.exe
。
- 我将运行 CMD 来进行更新
通过在 WinPE 环境中启动 exe 文件提取后,您会在每个固件升级“包”中找到 CMD 文件。对于 T440,修复漏洞所需的版本最有可能是https://pcsupport.lenovo.com/downloads/DS038194
- 我需要弄清楚如何加载驱动程序。
菜谱里提到:...您需要使用“drvload HECI.inf”加载 HECI 驱动程序以及链接至适用于 Windows 的 Intel AMT 管理引擎接口。链接(重定向)已损坏,但用户应该能够使用以下搜索字段找到适合自己平台的链接:https://support.lenovo.com。
驱动程序已成功使用drvload
命令加载(它已被提取到C:\DRIVERS\WIN\AMT\MEI\MEI\HECI.inf
;C:是我的 USB 闪存驱动器),但是它对我来说不起作用,MEUpdate.CMD
失败了。
我使用不同的“包”成功了:Intel 管理引擎接口 7.1 和 LAN 上串行 (SOL) 驱动程序。加载 HECI.inf(已解压至c:\DRIVERS\WIN\AMT\ME_SW\Drivers\MEI\HECI.inf
)后,我也加载了C:\DRIVERS\WIN\AMT\ME_SW\Drivers\SOL\mesrle.inf
,但不能 100% 确定这是否有必要 - 我不想重复该实验。
顺便说一句,不要忘记在固件升级之前在 BIOS 设置中启用 Intel AMT,然后在升级之后将其禁用;)