Was ist Libreboot?
Libreboot ist ein Fork des etwas bekannteren Coreboot. Beide sind freier, open-source Ersatz für proprietäre BIOS (aka das Ding, was immer kommt, wenn ihr euren PC bootet).
Und warum das ganze?
Ihr habt also auf eurem Rechner Linux laufen, und denkt jetzt seid ihr sicher vor Trojanern und Rootkits? Tja, da muss ich euch enttäuschen. Auf so einem BIOS-Chip sind meist mindestens 4MB Platz. Manchmal auch 8MB, manchmal 16MB. Da passt verdammt viel drauf – zur Visualisierung: Auf einem Freifunk-Router mit 4MB läuft ein komplettes Linux. Und was ist jetzt auf diesem doofen Chip? Das weiß leider niemand außer dem Hersteller, denn so ist das nunmal mit proprietärer Software. Auf fast allen Thinkpads ist da schonmal Computrace – eine nette kleine Spyware mit Rootkit und eigenem TCP/IP-Stack. Die telefoniert nach Hause und fragt regelmäßig einen Server in Kalifornien, ob das Thinkpad als gestohlen gemeldet wurde. Tolles Feature für Firmenkunden. Doofer Bug für alle, die Datenschutz cool finden. Mit einer einfachen Neuinstallation eures Systems werdet ihr die nicht los – denn die ist auf dem BIOS-Chip. Und die hat immer Root – denn sie ist noch eine Ebene über dem System. Allein das war für mich genug um den Mist zu ersetzen.
Dann ist da noch die nette Sache mit den whitelists: An sich ist miniPCI ein Standard. Ihr solltet also jegliche miniPCI-Karte in euren Rechner einbauen können, und das muss laufen. Tut es aber nicht – weil euer BIOS nach der Lenovo-Herstellerkennung sucht – und wenn es die nicht findet, verweigert es den Bootvorgang. Und wenn ihr jetzt die serienmäßige Broadcom-WLAN-Karte durch eine bessere ersetzen wollt? Tja, doof gelaufen.
Und wie mache ich das jetzt?
Tja, das ist jetzt der schwierige Part. Denn ihr müsst direkt an die Hardware – theoretisch könntet ihr den Chip auch einfach über Software neu beschreiben, aber leider hat der (zumindest bei Lenovo) einen Schreibschutz, der nur extern umgangen werden kann. Wenn ihr dann erst mal Libreboot installiert habt, könnt ihr den Schreibschutz auch deaktiveren – und in Zukunft direkt auf den Chip zugreifen.
Ihr braucht also ein passendes Programmiergerät – das kann z.B. ein Raspberry Pi sein, oder ein Bus Pirate.
In diesem Beispiel benutze ich einen Raspberry, weil der eben gerade da war. :) Mittlerweile gibt im Maschinenraum aber auch wieder einen Bus Pirate.
Raspberry vorbereiten:
- Raspbian Lite runterladen: https://www.raspberrypi.org/downloads/raspbian/
- auf SD-Karte (>4gb) kopieren, z.B. $ dd bs=1M if=[IMG] of=[DEVICE]
- SSH aktivieren: Datei namens SSH in Boot-Partition anlegen
- SD-Karte in den Raspberry stecken, Ethernet anschließen, Netzteil anschließen
- die IP rausfinden (z.B. auf der Oberfläche des Routers nachschauen)
- Terminal öffnen und verbinden: ssh pi@your.pi.address -p 22 (passwort: raspberry)
- $ sudo raspi-config
- Expand Filesystem, Change Locale (de_DE.UTF-8 UTF-8), en_GB.UTF-8, timezone einstellen, aktivieren: SSH server, SPI, I2C
- $ sudo apt-get update && sudo apt-get dist-upgrade && reboot
- $ sudo apt-get update && sudo apt-get install libftdi1 libftdi-dev libusb-dev libpci-dev subversion libusb-1.0-0-dev
Flashrom installieren:
- $ svn co https://code.coreboot.org/svn/flashrom/trunk flashrom
- $ cd flashrom
- $ make
- $ sudo make install
Libreboot-ROM-Image vorbereiten (auf dem PC):
- Utils & ROMs runterladen: http://mirror.helium.in-berlin.de/libreboot/stable/20160907/
- Ordner erstellen als Zwischenspeicher: # mkdir ~/work
- Entpacken: # cd ~/work && tar -xvJf ~/Downloads/libreboot_r20160907_util.tar.xz
- Bios-Chip-Größe rausfinden: # sudo dmidecode | grep ROM\ Size
- dementsprechend dafür passendes ROM aussuchen
- MAC-Adresse des Rechner finden: ifconfig eth0
- MAC-Adresse passend einfügen: # cd ~/work/libreboot_r20160907_util/ich9deblob/x86_64 ; # sudo ./ich9gen --macaddress XX:XX:XX:XX:XX:XX
- ins ROM kopieren: bei 8mb-rom: # dd if=ich9fdgbe_8m.bin of=<pfad zur vorlage> bs=1 count=12k conv=notrunc ; bzw. 4mb: # dd if=ich9fdgbe_4m.bin of=<pfad zur vorlage> bs=1 count=12k conv=notrunc
- auf den Pi kopieren: # scp ~/work/libreboot.rom pi@your.pi.address:~/flashrom/libreboot.rom
Pi ausschalten:
pi# sudo shutdown now -hP
Installation:
Thinkpad zerlegen, Chip finden, Nummer/Typ aufschreiben, entsprechend anschließen: http://netzfueralle.blog.rosalux.de/2016/05/15/libreboot-auf-lenovo-thinkpad-x200/#raspberry_pi_mit_dem_romchip_verkabeln
https://github.com/bibanon/Coreboot-ThinkPads/wiki/X200-X201-Hardware-Flashing-with-Raspeberry-Pi
(Chip-Namen: https://www.flashrom.org/Supported_hardware)
Pi booten, per ssh anmelden
pi# cd ~/flashrom
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -r romread1.rom
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -r romread2.rom
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -r romread3.rom
pi# sha512sum romread*.rom
-> checksum gleich? -> cool, rom speichern als backup
-> dann flashen:
pi# ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512 --chip <your_chip_name> -w libreboot.rom
-> ok? -> dann Pi aus, alles gut! Ansonsten eben nochmal.
Yeah! Freiheit!
Mehr Infos und das ganze in live und Farbe gibt's am 18.04. in unserem Workshop zum Thema.