12 Userspace-Live-Patching #
In diesem Dokument werden die Grundlagen und die Verwendung des Userspace-Live-Patchings erläutert.
12.1 Informationen zum 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. Live-Patching-Vorgänge werden mit dem Werkzeug ulp durchgeführt, das Teil von libpulp ist.
  
   Das Framework libpulp bildet den Rahmen für das Userspace-Live-Patching. Es besteht aus der Bibliothek libpulp.so und aus Werkzeugen, die die Bibliotheken livepatchfähig machen und die Live-Patches anwenden (die Binärdatei ulp).
  
12.1.1 Voraussetzungen #
Für das ULP müssen zwei Anforderungen erfüllt sein.
- Eine Bibliothek muss mit dem GCC-Flag - -fpatchable-function-entrykompiliert und damit livepatchfähig gemacht werden. Änderungen am Quellcode der Bibliothek fallen nicht an.
- Prozesse müssen die Bibliothek - libpulp.sovorab laden.
12.1.2 Verwenden von libpulp #
    Zur Verwendung von libpulp mit einer Anwendung gehen Sie wie folgt vor:
   
- Machen Sie eine Bibliothek livepatchfähig. 
- Wenn Sie die Anwendung starten, laden Sie - libpulpvorab mit dem Kommando- LD_PRELOAD=/usr/lib64/libpulp.so ./ANWENDUNG.
12.1.2.1 Vorbereiten der Live-Patch-Fähigkeit einer Bibliothek #
     Damit eine Bibliothek livepatchfähig ist, müssen ihre Funktionsaufrufe allesamt den Prolog NOP enthalten. GCC ab Version 8 (und die in SUSE Linux Enterprise Server enthaltene GCC-Version) bietet speziell für diesen Zweck das Flag -fpatchable-function-entry. Auf der AMD64/Intel 64-Architektur reicht es daher aus, eine in C geschriebene Bibliothek mit dem Flag ‑fpatchable-function-entry=16,14 zu kompilieren, um sie livepatchfähig zu machen.
    
Die Bibliotheken glibc, libssl.so.1.1 und libcrypto.so.1.1 sind unter SUSE Linux Enterprise 15 SP4 bereits livepatchfähig.
12.1.2.2 Prüfen der Live-Patch-Fähigkeit einer Bibliothek #
Prüfen Sie mit dem folgenden Kommando, ob eine Bibliothek livepatchfähig ist:
ulp livepatchable LIBRARY
12.1.2.3 Anwenden von Live-Patches #
     Live-Patches werden mit dem Kommando ulp trigger angewendet, beispielsweise:
    
ulp trigger -p PID LIVEPATCH.ulp
     In diesem Beispiel bezeichnet PID die PID des laufenden Prozesses, der die zu patchende Bibliothek enthält, und LIVEPATCH.ulp ist die eigentliche Live-Patch-Datei.
    
     Die Meldung live patching succeeded (Live-Patching erfolgreich) weist darauf hin, dass der Live-Patching-Vorgang erfolgreich abgeschlossen wurde.
    
12.1.2.4 Zurücksetzen von Live-Patches #
     Live-Patches können mit ulp trigger zurückgesetzt werden. Für das Zurücksetzen von Live-Patches stehen zwei Möglichkeiten zur Auswahl. Sie können einen Live-Patch durch Anwendung des zugehörigen .rev-Patch zurücksetzen:
    
ulp trigger -p PID LIVEPATCH.rev
Alternativ können Sie alle Patches einer bestimmten Bibliothek zurücksetzen. Beispiel:
ulp trigger -p PID --revert-all=LIBRARY
     Im obigen Beispiel steht LIBRARY (BIBLIOTHEK) für die eigentliche Bibliothek, z. B. libcrypto.so.1.1.
    
Das zweite Verfahren kann von Nutzen sein, wenn der Quellcode des ursprünglichen Live-Patches nicht verfügbar ist oder wenn Sie einen bestimmten älteren Patch entfernen und einen neuen anwenden möchten, ohne dass die Zielanwendung potenziell unsicheren Code ausführt. Beispiel:
ulp trigger -p PID --revert-all=libcrypto.so.1.1 new_livepatch2.ulp
12.2 Weitere Informationen #
   Weitere Informationen zu libpulp finden Sie im Git-Repository des Projekts.