自从2011年起,所有基于 Intel 处理器的计算机都有一个小小的 OS 藏在里面。这玩意叫 Intel Management Engine (Intel 管理引擎)。它能在未经任何授权的情况下访问网络(通过内置的Intel以太网卡), 直接访问内存内容,甚至在电脑未启动时它仍在运行。
对于企业来说,这玩意无疑是非常有用的,但是对于个人用户来说,它完全无用。恰恰相反,它是一个巨大的安全隐患。就算它没有任何窃取隐私的行为,让一个完全闭源,十分复杂,而且能够连接到网络的系统运行在特权权限也是非常危险的。1
最糟糕的是,Intel 官方没有提供任何关闭 ME 的方式。 不过在2017年左右,在人们基本摸清楚了 ME 分区的结构后,me_cleaner 项目提供了一个很方便的限制 ME 功能的工具。在 Sandy Bridge 及之后的处理器架构上,ME仍无法被完全去除(因为现在 ME 也承担了很多硬件初始化及管理的功能),但我们至少可以去除大部分可能涉及隐私的部分。
当配合 coreboot 2 食用时,我们就得到了一个几乎完全自由的固件。当然,一般的厂商不会允许一个未知来源的固件直接写入主板里(这很危险!),所以很多支持 coreboot 的笔记本都得通过拆机直接刷写固件芯片的方式来安装 coreboot。
ThinkPad X220 是一个很不错的选择。它还算新,拥有很不错的 coreboot 支持,而且文档十分详细。3
准备
SinkPadThinkPad X220- SOP-8 测试夹(连接 ROM 芯片用)
- Raspberry Pi(充当 SPI 刷写器)
- 另一台电脑(充当终端和编译机。也可以给 rPi 接键盘和显示器,但是用 rPi 编译固件会比较慢)
以及耐心和细心!
准备树莓派
我使用了 Raspbian. 按照往常那样设置就好. (刷固件, 联网, etc.)
然后, 用 sudo raspi-config
启用 SPI. 进入 Interfacing Options
然后选择 SPI
.
备份原始固件
在做任何事情之前, 确保电源和电池都已经断开!
把笔记本拆开来(记得看看 X220 硬件维护手册!). 掌托和键盘都得取下来.
主板被防静电膜覆盖着, 我们要找的芯片位于主板左下角, ExpressCard 卡槽附近. 把防静电膜的左下角掀起来应该就能看到了.
绕接固件芯片
把测试夹夹道芯片上. 引脚排列4如下:
|
|
然后把另一端连接到树莓派上(同样, 记得断电!):
|
|
(没错,我们只需要其中的6根针脚连接就够了.)
使用 flashrom 备份固件
现在可以启动树莓派了. 编译 flashrom
. 我们将用它来备份原厂 ROM 以及写入新的 ROM.
|
|
现在我们可以试着读取了!
|
|
如果成功检测到芯片, 应该会有类似下面的输出:
|
|
现在我们可以读取芯片里面的内容了. 多读取几份以保证连接稳定.
|
|
如果三个 md5 校验和都是一样的, 说明我们的连接(有很高机率)是有效的而我们读取的固件是正确的. 把读取的固件好好保存, 后面有用.
而且实在搞不定还可以恢复到原始固件上去.
编译并刷写 coreboot
我使用一台台式机进行编译操作(因为可怜的小 Pi 实在是有点慢).
获取闭源组件
X220 的固件主要由5部分组成:
-
Flash Descriptor (4K)
- 直译为 闪存描述, 应该是类似分区表的存在
- BIOS (3M)
- Intel ME 固件 (5M)
- Gigabit Ethernet ROM (8K)
-
Platform data
- 直译为 平台数据, 我们用不到
我们只需要 decriptor, me固件 和 GbE固件. 为了能在 coreboot 中使用, 需要使用 ifdtool
来分离他们.
|
|
干掉 Intel Management Engine
我使用 Tianocore 作为启动载荷. 因为 Tianocore 相对较大, 得想办法给它腾点空间出来. me_cleaner 默认只会将需要破坏的部分填充无用数据, 但我们也可以直接把这些部分去掉以缩小 ME 固件的体积.
|
|
准备 coreboot 编译工具链
|
|
私人定制 coreboot!
运行 make nconfig
进入配置界面.
下面是我的配置. 注意选项可能在未来变化.
|
|
完成之后, 使用 make
并等待编译完成即可.
刷入新固件
一切正常的话, 新的固件应该能在 coreboot/build/coreboot.rom
找到. 把它复制到树莓派上并使用
|
|
将固件写入芯片中.
大功告成!
然后, 断开编程夹, 重新接上掌托和键盘, 连接电源, 试着开机!
如果屏幕上出现了一只小兔子, 大功告成!
如果没成呢?
如果一直黑屏, 很有可能是 coreboot 遇到了错误. 试着检查你的配置. 实在不行的话, 你永远可以重新刷入官方固件.
检查 ME 状态
理论上来说, 现在 ME 已经处于功能受限状态了. 如果你想检查一下成果, 可以使用 intelmetool 来查看 ME 的工作状态.
安装好 intelmetoolAUR 后, 重启并在内核参数中添加 iomem=relaxed
. 然后使用 root 权限运行 intelmetool, 你应该会得到类似下面的结果:
|
|
可以看到, ME 的工作状态已经是 Recovery 模式了. 也就是说, 大多数可能有害的功能模块都处于无法运行的状态了.