Kernel Live Patches

Die meisten Updates eines Linux-Systems erfolgen im laufenden Betrieb erfolgen. Aktualisierte Netzwerkdienste müssen zwar anschließend neu gestartet werden, aber es besteht keine Notwendigkeit, den ganzen Rechner neu zu starten. Die Ausnahme von dieser Regel ist der Kernel: Damit Sicherheits-Updates im Kernel wirksam werden, müssen Sie einen neuen Kernel und neue Module installieren und anschließend den ganzen Rechner oder via
kexec den Kernel und alle Dienste neu starten.

Gerade bei Servern, die möglichst ohne Unterbrechung ständig verfügbar sein sollen, ist ein Neustart zumeist unerwünscht. Und selbst Administratoren, die Updates automatisieren, scheuen in der Regel davor zurück, auch die erforderlichen Neustarts zu automatisieren. Zu groß ist die Gefahr, dass etwas schief geht und dann (zumeist mitten in der Nacht) keiner Zeit hat, das Problem zu beheben.

Die Lösung für dieses Problem heißt Kernel Live Patches. Damit wird der Kernel-Code im laufenden Betrieb aktualisiert.

Live Patching bei Oracle, RHEL und SUSE

Zum Live-Patching gibt es verschiedene Verfahren. Am ältesten ist ksplice. Das Verfahren wurde von der gleichnamigen Firma entwickelt. Diese wurde dann von Oracle gekauft. Daher war Oracle eine Weile die einzige Firma, die Kernel Live Patches für ihre Distributionen anbot.

Red Hat und SUSE wollten in dieser Hinsicht natürlich nicht zurückstecken und entwickelten unter den Namen kPatch und kGraft vergleichbare Update-Mechanismen. Die für kPatch und
kGraft erforderlichen Funktionen (gewissermaßen der größte gemeinsame Nenner) wurden von Linus Torvalds mit Version 4.0 (also Anfang 2015) in den offiziellen Linux-Kernel aufgenommen.

Oracle, Red Hat und SUSE bieten Live Patches aktuell nur für kommerzielle Kunden an.

Canonical Livepatch

Canonical ist gewissermaßen der Spätstarter im Live-Patching-Geschäft. Seit Ende 2016 bietet Canonical für kritische Sicherheitsprobleme in Ubuntu-LTS-Versionen Live-Patches im Rahmen des Landscape-Dienstes für kommerzielle Kunden an. Das Programm canonical-livepatch greift dabei auf die oben erwähnte Live-Patch-Infrastruktur im Kernel zurück. Details darüber, ob auf dieser Basis kPatch, kGraft oder ein eigenes Verfahren zum Einsatz kommt, hat Canonical nicht verraten.

Erfreulicherweise stellt Canonical die Live Patches in beschränkten Umfang auch nicht kommerziellen Anwendern zur Verfügung: Sofern Sie über ein kostenloses Ubuntu-One-Konto verfügen, können Sie drei Rechner mit Live Patches versorgen. Das Einrichten des Live-Patch-Dienstes ist erfreulich einfach: Zuerst melden Sie sich bei Ubuntu One an und fordern dort ein Livepatch-Token an:

https://auth.livepatch.canonical.com

Anschließend führen Sie die folgenden Kommandos aus, um das Snap-Paket canonical-livepatch zu installieren:

apt install snapd
snap install canonical-livepatch
canonical-livepatch enable <TOKEN>

Unterstützt werden aktuell die Ubuntu-Versionen 16.04 und 14.04. Wenn Sie die Version 14.04 verwenden, wird automatisch eine neuere Kernel-Version installiert. Außerdem müssen Sie in diesem Fall in /etc/environment und in /etc/sudoers die PATH-Variable um :/snap/bin ergänzen.

Den Live-Patch-Status können Sie mit canonical-livepatch status ermitteln:

canonical-livepatch status
  kernel: 4.4.0-72.93-generic
  fully-patched: true
  version: "22.4"

dmesg | grep livepatch liefert Meldungen über zuletzt durchgeführte Live-Patches:

dmesg | grep livepatch}
  ...
  livepatch: enabling patch 'kpatch_livepatch_Ubuntu_4_4_0_72_93_generic_22'

Sollten Sie zu einem späteren Zeitpunkt doch einen Neustart des Rechners durchführen, dann wird der aktuellste zuletzt installierte Kernel verwendet. Da es hierfür noch keine Patches gibt, sieht die status-Ausgabe dann wie folgt aus:

canonical-livepatch status
  kernel: 4.4.0-78.99-generic
  fully-patched: true
  version: ""

Nur für Notfälle: Die Veränderung des Codes des laufenden Kernels ist ein diffiziler Vorgang (wenn Sie ein Freund dramatischer Vergleiche sind: wie die Operation am offenen Herzen). Deswegen wird der Mechanismus aktuell von allen Distributoren nur für gefährliche Kernel-Sicherheitslücken verwendet. Bei sonstigen Korrekturen wird wie bisher ein neuer Kernel installiert, auf die Aktivierung der dort durchgeführten Änderungen via Live-Patches aber verzichtet. Somit kann es trotz aktivierter Live-Patches sein, dass Ihre Distribution nach der Installation von (Kernel-)Updates meldet, dass ein Neustart erforderlich ist. Lassen Sie sich davon nicht verunsichern.

Spectre und Meltdown

(Update 10.1.2018)

Der Änderungen im Kernel zur Umgehung der CPU-Fehler, die das Spectre- und Meltdown-Fiasko verursacht haben, sind derart komplex und tiefgreifend, dass ein Live-Patch nicht möglich ist (Quelle). Sie müssen nach dem Kernel-Update neustarten!

Externe Live-Patch-Services

(Update 26.3.2018)

Neben den distributions-spezifischen Livepatch-Services gibt es auch Cloud-Provider, die Livepatches gegen eine Gebühr anbieten (u.a. auch für Debian):

https://www.cloudlinux.com/all-products/product-overview/kernelcare

Quellen

https://www.ubuntu.com/server/livepatch