Was ist coreboot?

coreboot ist eine Open Source Firmware, die das proprietären BIOS des Herstellers ersetzt, das für den Rechnerstart (Initialisierung der Hardware, Start des Betriebsystems) benötigt wird. Da das BIOS vor dem Betriebsystem startet, ist es besonders wichtig in diesem Bereich auf eine sichere und vertrauenswürdige - da überprüfbare - Firmware zu setzen.


Vorteile von coreboot gegenüber dem proprietären BIOS des Herstellers:

quellcodeoffene Open Source Software
Die Vorteile von Open Source werden hier im Detail beschrieben.
weniger anfällig für Sicherheitslücken, überprüfbar auf Backdoors
Gerade bei Firmware ist der Sicherheitsaspekt besonders wichtig, denn Schadsoftware, die über Sicherheitslücken Zugang zu dem Flash-Chip bekommt und diesen kompromittiert, wird bei jedem Rechnerstart noch vor dem Betriebssystem ausgeführt. Dadurch ist es weder dem Betriebsystem noch dessen Software, wie z. B. Viren- und Anti-Malwarescanner, möglich die Schadsoftware zu erkennen oder zu entfernen. Auch eine Wiederherstellung oder Neuinstallation des Betriebsystems kann in diesem Fall keine Abhilfe schaffen, da sich die Schadsoftware nicht auf der Festplatte befindet, sondern auf einem Flash-Chip auf dem Mainboard. Ein weiteres Problem ist die proprietäre Intel Management Engine, die sich auf fast jedem Flash-Chip befindet. Sie wurde schon erfolgreich zum Ziel von Schadsoftware und besitzt sogar einen eigenen TCP/IP-Stack, der betriebssystemunabhängig eine Netzwerkverbindung aufbauen kann. Selbst unter Verwendung von coreboot kann die Intel Management Engine nicht vollständig entfernt werden. Ihre Größe kann jedoch von 5 Megabyte (bei machen Chips bis zu 12 MB) auf 80 Kilobyte (ca. 1,5 %) reduziert werden.
bessere Performance, schnellerer Bootvorgang
Ein weiterer Vorteile von coreboot ist, dass der Programmcode deutlich schlanker und in der Hochsprache C geschrieben ist, das BIOS der Hersteller hingegen ist meist in Assembler geschieben und umfasst eine größere Anzahl an Funktionen, was in der Kombination zu fehleranfälligerem Code und schlechterer Performance führt. Als namhafter Hersteller setzt Google bei vielen Chromebooks auf coreboot als BIOS-Ersatz.


Nachteile von coreboot:

beschränkte Hardware-Kompatibilität
Im Moment werden ca. 230 Mainboards von verschiedenen Herstellern unterstützt. Gerade im Laptop-Bereich ist die Auswahl deswegen sehr eingeschränkt. Die Unterstützung eines neuen Mainboards erfordert Freiwillige, die bereit sind viel Zeit in die Entwicktlung zu investieren.
selbstständiges Kompilieren der Firmware nötig
Die Flexibilität von coreboot hat seine Kehrseite in der, für unerfahrene Benutzer, schwierigen Bestimmung der Kompilierungsoptionen. Die Konfiguration für die Erstellung eines coreboot-Images umfasst ca. 700 Optionen, deren Verständnis einiges an Fachwissen voraussetzt. Nicht alle Optionen sind für jedes Modell verfügbar, aber insgesamt erfordert es einige Zeit, die verschiedenen Optionen zu verstehen, wenn keine Vorkenntnisse vorhanden sind.
aufwendiges Öffnen des Rechners, um die Firmware auf den Mainboard-Chip zu schreiben
Vor allem bei Laptops, die einen Embedded Controller besitzen, sollte von einem Beschreiben des Mainboard-Chip in laufendem Zustand abgesehen werden, um das Mainboard nicht zu beschädigen. Deswegen wird empfohlen einen externen Programmer zu benutzen, um die Firmware aufzuspielen. Das erfordert jedoch das Öffnen des Laptops, sowie Kenntnisse zum Umgang mit externen Programmern, die Lokalisierung des Chips auf dem Mainboard und ggf. das Ausbauen von Hardwareteilen um den Chip zu erreichen, die Pin-Belegung des Chips, Werkzeug zum Öffnen, usw.


Payloads

coreboot selbst initialisiert nur das Mainboard und die angeschlossene Peripherie, für den eigentlichen Systemstart sind dann sogenannte Payloads verantwortlich. Es gibt verschiedene Kombinationen aus Payloads, Bootloadern und Kerneln um einen Systemstart zu realisieren. Bei einem Standard-Ablauf liest das BIOS den Master Boot Record im ersten Sektor der Festplatte. Dort befindet sich eine Partitions-Tabelle, die die Einteilung der Festplatte in verschiedene Bereiche (Partitionen) festlegt und angibt auf welcher Partition sich der Bootloader befindet. Außerdem enthält der MBR ein minimales Programm, das den Bootloader startet. Der Bootloader lädt daraufhin den Kernel des Betreibssystems in den Arbeitsspeicher und führt diesen aus. Dadurch wird das Betriebssystem gestartet.

SeaBIOS

SeaBIOS ist ein Payload der sich im Großen und Ganzen so verhält wie ein proprietäres BIOS. Das System startet wie im oben beschriebenen Stardardablauf.

GRUB

Grub ist der Standard-Bootloader der meisten Linux-Distributionen. Er kann aber ebenso als coreboot-Payload eingesetzt werden und dann entweder in den Bootloader auf der Festplatte verzweigen oder direkt den Kernel des Betriebssystems laden. Letzteres macht den Bootloader auf der Festplatte überflüssig, da der GRUB-Payload aus dem Flash-Chip auch den Kernel laden und ausführen kann und somit kein Bootloader auf der Festplatte benötigt wird. Da GRUB auch in der Lage ist Festplatten zu entschlüsseln, kann in diesem Fall die gesamte Festplatte inklusive der Boot-Partition verschlüsselt werden. Das ist nur möglich, wenn sich der Bootloader selbst nicht auf der Festplatte sondern auf dem Flash-Chip befindet.

Linux-Kernel

Es besteht außerdem die Möglichkeit, dass sich der Linux-Kernel selbst im Flash-Chip befindet und von dort aus direkt das Betriebssystem startet. Da der Kernel der meisten Linux-Distributionen aber für den Flash-Chip zu groß ist und außerdem nach jedem Kernel-Update der Flash-Chip neu beschrieben werden müsste ist ein anderes Vorgehen gebräuchlicher. Dabei befindet sich ein minimaler Kernel im Flash-Speicher, der nur die nötigsten Funktionen umfasst. Dieser Kernel startet dann über die kexec-Funktion den Kernel der Linux-Distribution auf der Festplatte. Bei dieser Variante benötigt man also weder den MBR noch einen Bootloader für den Systemstart. Außerdem kann der Minimal-Kernel durch ein komprimiertes Initrd CPIO-Archiv ergänzt werden, so dass man auf diesem Weg ein kleines Linux-Betriebssystem im Flash-Speicher implementieren kann.