Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / SUSE Linux Enterprise Server-Dokumentation / Verwaltungshandbuch / Häufige Tasks / Userspace-Live-Patching
Gilt für SUSE Linux Enterprise Server 15 SP5

12 Userspace-Live-Patching

In diesem Kapitel werden die Grundlagen und die Verwendung des Userspace-Live-Patchings erläutert.

12.1 Info zu Userspace-Live-Patching

Das Userspace-Live-Patching (ULP) bezeichnet die Anwendung von Patches auf Bibliotheken, die von laufenden Prozessen verwendet werden, ohne diese zu unterbrechen. Jedes Mal, wenn eine Sicherheitskorrektur als Live-Patch verfügbar ist, werden die Kundendienste nach der Anwendung des Live-Patches ohne Neustart der Prozesse gesichert.

Live-Patching-Vorgänge werden mit dem Werkzeug ulp durchgeführt, das Teil von libpulp ist. libpulp ist ein Framework, das aus der Bibliothek libpulp.so und der Binärdatei ulp besteht. Es ermöglicht Live-Patching für Bibliotheken und wendet Live-Patches an.

Tipp
Tipp

Sie können das Kommando ulp entweder als normaler Benutzer oder als privilegierter Benutzer über den Mechanismus sudo ausführen. Der Unterschied besteht darin, dass Sie durch Ausführen von ulp über sudo Informationen über ausgeführte Prozesse oder Patch-Prozesse nach root anzeigen können.

12.1.1 Voraussetzungen

Für das ULP müssen zwei Anforderungen erfüllt sein.

  • Installieren Sie das ULP auf Ihrem System, indem Sie Folgendes ausführen:

    > sudo zypper in libpulp0 libpulp-tools
  • Anwendungen mit gewünschter Live-Patch-Unterstützung müssen vor dem Laden der Bibliothek libpulp.so.0 gestartet werden. Weitere Einzelheiten finden Sie unter Abschnitt 12.1.3, „Verwenden von libpulp.

12.1.2 Unterstützte Bibliotheken

Derzeit werden nur glibc und openssl (openssl1_1) unterstützt. Weitere Pakete werden verfügbar sein, sobald sie für das Live-Patching vorbereitet sind. Um glibc- und openssl-Live-Patches zu erhalten und zu aktivieren, installieren Sie die Pakete glibc-livepatches und openssl-livepatches:

> zypper install glibc-livepatches openssl-livepatches

12.1.3 Verwenden von libpulp

Um Live-Patching für eine Anwendung zu aktivieren, müssen Sie die Bibliothek libpulp.so.0 beim Starten der Anwendung vorladen:

> LD_PRELOAD=/usr/lib64/libpulp.so.0 APPLICATION_CMD

12.1.3.1 Prüfen, ob Live-Patching für eine Bibliothek möglich ist

Prüfen Sie mit dem folgenden Kommando, ob Live-Patching für eine Bibliothek möglich ist:

> ulp livepatchable PATH_TO_LIBRARY

12.1.3.2 Prüfen, ob eine .so-Datei ein Live-Patch-Container ist

Ein gemeinsam genutztes Objekt (.so) ist ein Live-Patch-Container, wenn es die ULP-Patch-Beschreibung enthält. Sie können dies mit dem folgenden Kommando überprüfen:

> readelf -S SHARED_OBJECT | grep .ulp

Wenn die Ausgabe zeigt, dass das gemeinsam genutzte Objekt die Abschnitte .ulp und .ulp.rev enthält, handelt es sich um einen aktiven Patch-Container.

12.1.3.3 Anwenden von Live-Patches

Live-Patches werden mit dem Kommando ulp trigger angewendet, beispielsweise:

> ulp trigger -p PID LIVEPATCH.so

Ersetzen Sie PID durch die Prozess-ID des laufenden Prozesses, der die Bibliothek verwendet, auf die ein Patch angewendet werden soll. Ersetzen Sie LIVEPATCH.so durch die entsprechende Live-Patch-Datei. Das Kommando gibt eine der folgenden Statusmeldungen zurück:

ERFOLG

Der Live-Patching-Vorgang war erfolgreich.

ÜBERSPRUNGEN

Der Patch wurde übersprungen, da er nicht für eine Bibliothek konzipiert wurde, die bei diesem Prozess geladen wird.

FEHLER

Es ist ein Fehler aufgetreten. Weitere Informationen erhalten Sie im internen Nachrichtenpuffer von libpulp. Weitere Informationen zu diesem Thema finden Sie unter Abschnitt 12.1.3.6, „Anzeigen der internen Nachrichtenwarteschlange“.

Es ist auch möglich, mehrere Live-Patches anzuwenden, indem Sie z. B. Platzhalter verwenden:

> ulp trigger '*.so'

Das Kommando versucht, jeden Patch im aktuellen Ordner auf jeden Prozess anzuwenden, der die Bibliothek libpulp geladen hat. Wenn der Patch nicht für den Prozess geeignet ist, wird er automatisch übersprungen. Am Ende zeigt das Werkzeug an, wie viele Patches es erfolgreich auf wie viele Prozesse angewendet hat.

12.1.3.4 Zurücksetzen von Live-Patches

Mit dem Kommando ulp trigger können Sie Live-Patches zurücksetzen. Für das Zurücksetzen von Live-Patches stehen zwei Möglichkeiten zur Auswahl. Sie können einen Live-Patch zurücksetzen, indem Sie den Schalter --revert verwenden und den Live-Patch-Container übergeben:

> ulp trigger -p PID --revert LIVEPATCH.so

Alternativ können Sie alle Patches einer bestimmten Bibliothek entfernen, beispielsweise:

> ulp trigger -p PID --revert-all=LIBRARY

In dem Beispiel steht LIBRARY für die entsprechende Bibliothek, beispielsweise für libcrypto.so.1.1.

Der letztgenannte Ansatz kann nützlich sein, wenn der Quellcode des ursprünglichen Live-Patches nicht verfügbar ist. Sie können diesen Ansatz auch verwenden, wenn Sie einen bestimmten alten Patch entfernen und einen neuen anwenden möchten, während die Zielanwendung noch einen sicheren Code ausführt, beispielsweise:

> ulp trigger -p PID  --revert-all=libcrypto.so.1.1 new_livepatch2.so

12.1.3.5 Anzeigen angewendeter Patches

Mit dem folgenden Kommando können Sie überprüfen, auf welche Anwendungen Live-Patches angewendet wurden:

> ulp patches

Die Ausgabe zeigt, bei welchen Bibliotheken Live-Patching möglich ist und welche Patches in Programmen geladen sind sowie welche Fehler der Patch behebt:

PID: 10636, name: test
  Livepatchable libraries:
    in /lib64/libc.so.6:
      livepatch: libc_livepatch1.so
        bug labels: jsc#SLE-0000
    in /usr/lib64/libpulp.so.0:

Sie können auch feststellen, welche Funktionen durch den Live-Patch gepatcht werden:

> ulp dump LIVEPATCH.so

12.1.3.6 Anzeigen der internen Nachrichtenwarteschlange

Protokollmeldungen von libpulp.so werden in einem Puffer innerhalb der Bibliothek gespeichert und nur auf Anfrage des Benutzers angezeigt. Um diese Meldungen anzuzeigen, führen Sie Folgendes aus:

> ulp messages -p PID

12.2 Weitere Informationen

Weitere Informationen zu libpulp finden Sie im Git repository des Projekts.