MirageOS 4.0.0: Unikernels mit schmalem Fußabdruck und hoher Sicherheit

Basierend auf Unikernels lassen sich mit MirageOS schlanke und potente Abbilder für virtuelle Instanzen schaffen. Version 4 bietet einige Neuerungen.

In Pocket speichern vorlesen Druckansicht 11 Kommentare lesen

(Bild: Olya Detry/Shutterstock.com)

Lesezeit: 5 Min.
Von
  • Martin Gerhard Loschwitz
Inhaltsverzeichnis

Spricht man das Thema Unikernel gegenüber selbst sattelfesten Admin-Veteranen an, erntet man oft nur ungläubige Blicke: Allzu verbreitet ist das Prinzip nicht. Da wundert es nicht, dass die Veröffentlichung von MirageOS 4.0.0 an den meisten Menschen der IT-Szene unbemerkt vorbeigehen könnte.

Zu Unrecht: Basierend auf dem Prinzip des Unikernels lassen sich mit MirageOS schlanke und potente Abbilder für virtuelle Instanzen schaffen, die auf den Betrieb einer einzelnen Anwendung optimiert sind und so wenig Angriffsfläche wie möglich haben. Obendrein beweist insbesondere MirageOS, dass Linux nicht der Weisheit letzter Schluss sein muss, wenn es um eingebettete, sichere Anwendungen geht.

Dem Verständnis von MirageOS nützt es, zunächst den Begriff Unikernel genauer zu definieren. Wer heute an virtuelle Instanzen und Container denkt, denkt fast immer an ein mehr oder minder komplettes Abbild einer (virtuellen) Festplatte, das die benötigten Komponenten enthält. Zu diesen gehört eine Reihe von gemeinsam genutzten Bibliotheken, die zum Teil als Abhängigkeit voneinander installiert sind. Weil diese Abbilder neben den für die Erfüllung einer Aufgabe notwendigen Komponenten auch viel Beiwerk enthalten, sind sie nicht nur unnötig groß, sondern bieten auch eine unnötig große Oberfläche für Angreifer. In typischen Linux-Containern existiert zwar zumindest kein Kernel, in klassischen virtuellen Instanzen jedoch sehr wohl.

Die Idee des Unikernels besteht darin, diesem Wildwuchs den Kampf anzusagen. Ein Unikernel besteht per Definition nur aus den Treibern, die nötig sind, um basale OS-Funktionen bereitzustellen, sowie den direkt in den Kernel eingebauten Bibliotheken, die bestimmte Funktionen anbieten. Damit ist auch klar: Ein Unikernel lässt sich nicht auf beliebigen Hardware-Plattformen einfach so nutzen, wie es bei generischen, modularen Kerneln der Fall wäre. Das trifft auch auf MirageOS zu, das vorrangig für den Einsatz auf Grundlage des Xen-Hypervisors konzipiert ist und gerade genug Funktionen enthält, um die dort durchgeschleifte Hardware zu nutzen.

Darüber hinaus ist MirageOS vor allem eine Art Baukastensystem: Entwickler wählen aus einer Liste von OCaml-Bibliotheken jene aus, die Bestandteil ihres eigenen, hochspezifischen Unikernels sein sollen, kompilieren die Anwendung und erhalten am Ende ein Abbild, das sich nativ in Xen nutzen lässt.

Mirage 4.0.0 ist ein Major-Release und punktet durch viele echte Neuerungen. Entwickler sind künftig etwa angehalten, das Build-System zu nutzen, das OCaml selbst beisteuert: Dune. Dem zuvor genutzten ocamlbuild haben die Entwickler damit implizit den Garaus gemacht. Hiervon erhofft sich das Projekt nicht nur eine wesentlich bessere Integration in das gesamte OCaml-Ökosystem, sondern auch eine beschleunigte Entwicklung. Für die Maintainer existierender OCaml-Unikernel-Vorlage für MirageOS bedeutet das jedoch erst einmal zusätzliche Arbeit, um das eigene Projekt auf Dune zu konvertieren.

Dabei lässt sich allerdings gleich auch das Monorepo-Prinzip übernehmen, das in MirageOS 4 für Unikernels Standard ist und es dem Entwickler erspart, sich Quellen aus unterschiedlichen Repositories zusammenzusuchen. Die Idee ist stattdessen, dass alles, was zu einem fertigen Unikernel gehört, auch in einem Repository Platz findet. Dies kompiliert der Entwickler dann, um es im Anschluss unmittelbar als Unikernel zu nutzen. Der Sprung zu opam-monorepo, das die Mono-Repositories im Hintergrund verwaltet, führt zudem zu einer impliziten Trennung vom eigentlichen Kompiliervorgang und dem Erstellen von den OCaml-Paketen, die später Teil des Unikernels werden. Bis dato war dieser Prozess ein Gesamtprozess, der Verwaltung und Debugging erschwert hat.

Verbessert haben die Mirage-Entwickler obendrein die Cross-Compiling-Optionen in MirageOS. Beim Cross Compiling erstellt der Kompilierer Programme für eine andere Zielarchitektur als jene, auf der er selber läuft. In MirageOS 3 war das bis dato eine schwierige Angelegenheit; MirageOS 4 liefert hier dank der umfassenden Dune-Integration jedoch deutlich mehr Funktionen ab Werk und ermöglicht so etwa den bereits erwähnten Raspberry-Port, der sich nun auch auf x86_64-Maschinen bauen lässt.

Darüber hinaus ergeben sich in MirageOS 4 vor allem viele kleine Neuerungen. Etliche der genutzten Ocaml-Bibliotheken kommen in neuen Versionen daher, sodass sich API-Veränderungen und mithin nötige Anpassungen ergeben. Durch die Umstellung auf Dune ist es deutlich leichter, die Ocaml-IDE Merlin zu nutzen, um MirageOS-Unikernels zu fabrizieren. Ebenfalls Dune ist verantwortlich dafür, dass sich C- und Rust-Programme nun leichter in MirageOS integrieren lassen. In Summe ändert sich bei MirageOS 4 mithin einiges, und wer mit MirageOS 3 bereits gewerkelt hat, muss sich an vielen Stellen umstellen. Weil dies der Produktivität letztlich jedoch zuträglich ist, lohnt sich der Umstieg dennoch. Wer Mirage 4 ausprobieren möchte, findet ausführliche Hinweise auf der Website des Projektes.

(fo)