/ coreboot

Neutralize Intel ME on X220

去掉Intel ME的过程很有意思,会涉及到芯片烧录和编译BIOS,但需要注意的是操作时不要带电操作,先释放身体静电,选择一款性能不错的电脑用于编译,最后买一个稍微合适的烧录夹。

所需工具:

  • 树莓派,有GPIO接口的就可以,因为只需用来读写芯片
  • SOP8芯片烧录夹,最好买连上线的夹子,省去一些麻烦
  • 能连接到树莓派GPIO口的线,如果夹子带的线可以直接用最好了
  • 性能尚可的笔记本或台式机用于编译BIOS,不要尝试用任何版本的树莓派编译coreboot!太慢!

改造烧录夹(可选)

如果你买到了和我一样的烧录夹,需要改造一下,但不一定改成我这样的。我是硬掰开插上线的,你可以优雅一点!
1968318957

暴露芯片

去掉X220背后螺丝,将键盘和触摸板抬起,芯片在黑色胶带纸下
x220_spi_flash

芯片和树莓派连接

不同树莓派的GPIO定义不一样,只需按照GPIO图找到对应位置即可。我们需要: 3.3v, MOSI, MOSO, CLK, CS, GND。

芯片一共有8个引脚,但其中有两支是N/C引脚(受限于封装,假的引脚),所以只需要接其中6支即可。

           __
MOSI  5 --|  |-- 4  GND
CLK   6 --|  |-- 3  N/C
N/C   7 --|  |-- 2  MISO
VCC   8 --|  |-- 1  CS

根据树莓派GPIO类型,接线方法也不一样,对照图标找到对应引脚接上就好。

flashrom

git clone https://review.coreboot.org/cgit/flashrom.git
cd flashrom
make 
sudo make install

激活内核模块

sudo modprobe spi_bcm2835
sudo modprobe spidev

spi_bcm2835spidev添加到/etc/modules中,下次开机即可启用内核模块。

test flashrom

sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -r read01.bin
flashrom v0.9.9-r1954 on Linux 4.4.34-v7+ (armv7l)
flashrom is free software, get the source code at https://flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6405" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6405D" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6406E/MX25L6408E" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E" (8192 kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L6405", "MX25L6405D", "MX25L6406E/MX25L6408E", "MX25L6436E/MX25L6445E/MX25L6465E/MX25L6473E"
Please specify which chip definition to use with the -c  option.

我使用了MX25L6405进行下一步操作

读取现有BIOS

读取两次,比较两次文件是否一致

sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -r read01.bin -c MX25L6405
sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -r read02.bin -c MX25L6405
md5sum read0*

阉割Intel ME

git clone https://github.com/corna/me_cleaner.git
mv read01.bin x220-ori.bin
python me_cleaner/me_cleaner x220-ori.bin
mv x220-ori.bin x220-without-me.bin

写入新BIOS

再次读取两次,看是否这四次一致

sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -r read03.bin -c MX25L6405
sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -r read04.bin -c MX25L6405
md5sum read0*

写入

sudo flashrom -p linux_spi:dev=/dev/spidev0.0 -w x220-without-me.bin -c MX25L6405

可能会出现写入失败,但flashrom会尝试其他方式写入,最终会成功,大约五六分钟就可以完成。

test

关掉树莓派,去掉烧录夹,安装电池,开机测试是否正常,有问题可以用刚刚的方法把原版BIOS刷进去,没问题就可以用了!

按开机键后,可能出现几秒像是没电的状态,然后就正常了,也许是因为去掉了Intel ME导致这样的问题,之前没有出现过。

这是BIOS中ME配置界面,可以看到版本号是0,固件也未知状态!
1770590673

疑点

原本计划安装coreboot代替现有BIOS,但编译了一个后有些地方不兼容,不想继续折腾,可能和我的二手X220有关?也许原本会好一些么?于是做了简化处理,只在原版固件基础上去除Intel ME,这样保证最大兼容性又提升安全性。


Refs
https://tylercipriani.com/blog/2016/11/13/coreboot-on-the-thinkpad-x220-with-a-raspberry-pi/
https://karlcordes.com/coreboot-x220/
https://hardenedlinux.github.io/firmware/2016/11/17/neutralize_ME_firmware_on_sandybridge_and_ivybridge.html