目次にジャンプページナビゲーションにジャンプ: 前のページ[アクセスキーp]/次のページ[アクセスキーn]
documentation.suse.com / SUSE Linux Enterprise Desktopドキュメント / 管理ガイド / 共通のタスク / ユーザ空間ライブパッチ
適用項目 SUSE Linux Enterprise Desktop 15 SP6

12 ユーザ空間ライブパッチ

この章では、ユーザスペースのライブパッチの基本原理と使用方法について説明します。

12.1 ユーザ空間ライブパッチについて

ユーザ空間ライブパッチ(ULP)とは、実行中のプロセスで使用されるライブラリに、中断することなくパッチを適用するプロセスのことです。ライブパッチとしてセキュリティ修正が利用できるようになるたびに、ライブパッチを適用した後にプロセスを再起動することなくカスタマサービスが保護されます。

ライブパッチ操作は、libpulpの一部であるulpツールを使用して実行されます。libpulpは、libpulp.soライブラリと、ulpバイナリで構成されるフレームワークで、ライブラリをライブパッチ可能にし、ライブパッチを適用します。

ヒント
ヒント

標準ユーザまたは特権を持つユーザのいずれかとしてsudoメカニズムを使用してulpコマンドを実行できます。両者の違いは、sudoを使用してulpを実行すると、rootによって実行されているプロセスまたはパッチプロセスの情報を表示できることです。

12.1.1 前提条件

ULPを機能させるには、2つの要件を満たす必要があります。

  • 次を実行してシステムにULPをインストールしている。

    > sudo zypper in libpulp0 libpulp-tools
  • 目的のライブパッチサポートを含むアプリケーションをlibpulp.so.0ライブラリをプリロードすることによって起動する必要がある。詳しくは12.1.3項 「libpulpの使用」を参照してください。

12.1.2 サポートされているライブラリ

現在は、glibcおよびopenssl (openssl1_1)のみがサポートされています。追加のパッケージは、ライブパッチ用に準備できてから使用できるようになります。glibcおよびopensslのライブパッチを受け取るには、glibc-livepatchesopenssl-livepatchesパッケージの両方をインストールしてください。

> zypper install glibc-livepatches openssl-livepatches

12.1.3 libpulpの使用

アプリケーションでライブパッチを有効にするには、アプリケーション起動時にlibpulp.so.0ライブラリをプリロードする必要があります。

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

12.1.3.1 ライブラリがライブパッチ可能かどうかの確認

ライブラリがライブパッチ可能かどうかを確認するには、次のコマンドを使用します。

> ulp livepatchable PATH_TO_LIBRARY

12.1.3.2 .soファイルがライブパッチコンテナかどうかの確認

共有オブジェクト(.so)は、ULPパッチ記述が埋め込まれている場合にはライブパッチコンテナです。次のコマンドを使用して確認できます。

> readelf -S SHARED_OBJECT | grep .ulp

共有オブジェクトに.ulpセクションと.ulp.revセクションの両方があることを出力が示している場合、ライブパッチコンテナです。

12.1.3.3 ライブパッチの適用

ライブパッチは、次のような、ulp triggerコマンドを使用して適用されます。

> ulp trigger -p PID LIVEPATCH.so

PIDを、パッチを適用するライブラリを使用する実行中のプロセスのプロセスIDで置き換え、LIVEPATCH.soを実際のライブパッチファイルで置き換えます。このコマンドは、次のステータスメッセージのいずれかを返します。

SUCCESS

ライブパッチ操作は成功しました。

SKIPPED

パッチは、プロセスでロードされたどのライブラリ用にも設計されていなかったためスキップされました。

ERROR

エラーが発生しました。libpulp内部メッセージバッファを調べることにより、より多くの情報を取得できます。詳細については、12.1.3.6項 「内部メッセージキューの表示」を参照してください。

ワイルドカードを使用して複数のライブパッチを適用することもできます。次に例を示します。

> ulp trigger '*.so'

このコマンドは、現在のフォルダ内のすべてのパッチをlibpulpライブラリがロードされているすべてのプロセスに適用しようとします。パッチは、プロセスに不適である場合、自動的にスキップされます。最後に、適用に成功したパッチ数および適用されたプロセス数がツールに表示されます。

12.1.3.4 ライブパッチを元に戻す

ulp triggerコマンドを使用してライブパッチを元に戻します。ライブパッチを元に戻すには、2つの方法があります。--revertスイッチを使用し、ライブパッチコンテナを渡すことで、ライブパッチを元に戻すことができます。

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

または、特定のライブラリに関連付けられているすべてのパッチを削除することもできます。次に例を示します。

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

この例では、LIBRARYは、libcrypto.so.1.1などの実際のライブラリを表します。

後者の方法は、元のライブパッチのソースコードを利用できない場合に便利です。または、特定の古いパッチを削除し、新しいパッチを適用するが、同時にターゲットアプリケーションがセキュアコードの実行を継続する場合です。次に例を示します。

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

12.1.3.5 適用パッチの表示

次を実行することによって、ライブパッチが適用されているアプリケーションを確認できます。

> ulp patches

ライブパッチ可能なライブラリ、プログラムにロードされているパッチ、およびパッチが対処しているバグが出力に示されます。

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:

ライブパッチによってパッチされている機能を確認することも可能です。

> ulp dump LIVEPATCH.so

12.1.3.6 内部メッセージキューの表示

libpulp.soからのログメッセージは、ライブラリ内のバッファに格納され、ユーザが要求しない限り表示されません。これらのメッセージを表示するには、次を実行します。

> ulp messages -p PID

12.2 詳細情報

libpulpに関する詳細については、プロジェクトのGit repositoryを参照してください。