8.8. ランタイム監視のための Keylime のデプロイ
監視対象システムの状態が正しいことを確認するには、Keylime エージェントが監視対象システム上で実行されている必要があります。
Keylime のランタイム監視は、Integrity Measurement Architecture (IMA) を使用して多数のファイルを測定するため、システムのパフォーマンスに重大な影響を与える可能性があります。
エージェントをプロビジョニングするときに、Keylime が監視対象システムに送信するファイルを定義することもできます。Keylime はエージェントに送信されたファイルを暗号化し、エージェントのシステムが TPM ポリシーと IMA 許可リストに準拠している場合にのみ復号化します。
Keylime の除外リストを設定することで、Keylime が特定のファイルまたは特定のディレクトリー内の変更を無視するようにできます。
RHEL 9.3 で提供される Keylime バージョン 7.3.0 以降、許可リストと除外リストは Keylime ランタイムポリシーに統合されます。
前提条件
Keylime コンポーネントが設定されているシステムへのネットワークアクセスがある。
- verifier
- 詳細は、「Keylime verifier の設定」 を参照してください。
- registrar
- 詳細は、「Keylime registrar の設定」 を参照してください。
- テナント
- 詳細は、「Keylime テナントの設定」 を参照してください。
- エージェント
- 詳細は、「Keylime エージェントの設定」 を参照してください。
手順
Keylime エージェントが設定され実行されている監視対象システムで、システムの現在の状態から許可リストを生成します。
# /usr/share/keylime/scripts/create_allowlist.sh -o <allowlist.txt> -h sha256sum
<allowlist.txt>
を許可リストのファイル名に置き換えます。重要SHA-256 ハッシュ関数を使用します。SHA-1 は安全ではなく、RHEL 9 で廃止されました。追加情報は、SHA-1 deprecation in Red Hat Enterprise Linux 9 を参照してください。
生成された許可リストを、
keylime_tenant
ユーティリティーが設定されているシステムにコピーします。次に例を示します。# scp <allowlist.txt> root@<tenant.ip>:/root/<allowlist.txt>
オプション: Keylime の測定から除外するファイルまたはディレクトリーのリストを定義するには、テナントシステム上にファイルを作成し、除外するファイルとディレクトリーを入力します。除外リストでは、1 行に 1 つの Python 正規表現を使用できます。特殊文字の完全なリストについては、docs.python.org の Regular expression operations を参照してください。たとえば、
/tmp/
ディレクトリー内のすべてのファイルと/var/
ディレクトリーの一部のサブディレクトリーを Keylime の測定から除外するには、次の内容を含む/root/<excludelist.txt>
ファイルを作成します。/var/cache/.* /var/lock/.* /var/log/.* /var/run/.* /var/spool/.* /var/tmp/.* /tmp/.*
除外リストをテナントシステムに保存します。
許可リストと除外リストを Keylime ランタイムポリシーに統合します。
# keylime_create_policy -a <allowlist.txt> -e <excludelist.txt> -o <policy.json>
Keylime テナントが設定されているシステムで、
keylime_tenant
ユーティリティーを使用してエージェントをプロビジョニングします。# keylime_tenant -c add -t <agent_ip> -u <agent_uuid> --runtime-policy <policy.json> --cert default
-
<agent_ip>
は、エージェントの IP アドレスに置き換えます。 -
<agent_uuid>
は、エージェントの UUID に置き換えます。 -
<policy.json>
を Keylime ランタイムポリシーファイルへのパスに置き換えます。 --cert
オプションを使用すると、テナントは、指定されたディレクトリーまたはデフォルトの/var/lib/keylime/ca/
ディレクトリーにある CA 証明書と鍵を使用して、エージェントの証明書を生成し、署名します。ディレクトリーに CA 証明書と鍵が含まれていない場合、テナントは/etc/keylime/ca.conf
ファイルの設定に従ってそれらを自動的に生成し、指定されたディレクトリーに保存します。その後、テナントはこれらの鍵と証明書をエージェントに送信します。CA 証明書を生成するとき、またはエージェント証明書に署名するとき、次のメッセージが表示され、CA 秘密鍵にアクセスするためのパスワードの入力を求められる場合があります。
Please enter the password to decrypt your keystore:
証明書を使用したくない場合は、代わりに
-f
オプションを使用してファイルをエージェントに配信します。エージェントをプロビジョニングするには、空のファイルであっても、ファイルを送信する必要があります。注記Keylime はエージェントに送信されたファイルを暗号化し、エージェントのシステムが TPM ポリシーと IMA 許可リストに準拠している場合にのみ復号化します。デフォルトでは、Keylime は
.zip
ファイルを解凍します。
たとえば、次のコマンドを使用すると、
keylime_tenant
は UUIDd432fbb3-d2f1-4a97-9ef7-75bd81c00000
を持つ新しい Keylime エージェントを127.0.0.1
にプロビジョニングし、policy.json
というランタイムポリシーをロードします。また、デフォルトのディレクトリーに証明書を生成し、その証明書ファイルをエージェントに送信します。Keylime は、/etc/keylime/verifier.conf
で設定された TPM ポリシーが満たされている場合にのみ、ファイルを復号化します。# keylime_tenant -c add -t 127.0.0.1 -u d432fbb3-d2f1-4a97-9ef7-75bd81c00000 --cert default --runtime-policy policy.json
注記# keylime_tenant -c delete -u <agent_uuid>
コマンドを使用して、Keylime によるノードの監視を停止できます。keylime_tenant -c update
コマンドを使用して、すでに登録されているエージェントの設定を変更できます。-
検証
- オプション: 検証の前に監視対象システムを再起動して、設定が永続的であることを確認します。
エージェントのアテステーションが成功することを確認します。
# keylime_tenant -c cvstatus -u <agent.uuid> ... {"<agent.uuid>": {"operational_state": "Get Quote"..."attestation_count": 5 ...
<agent.uuid>
をエージェントの UUID に置き換えます。Operational_state
の値がGet Quote
で、attestation_count
が 0 以外の場合、このエージェントのアテステーションは成功です。Operational_state
の値がInvalid Quote
かFailed
の場合、アテステーションは失敗し、次のようなコマンド出力が表示されます。{"<agent.uuid>": {"operational_state": "Invalid Quote", ... "ima.validation.ima-ng.not_in_allowlist", "attestation_count": 5, "last_received_quote": 1684150329, "last_successful_attestation": 1684150327}}
アテステーションが失敗した場合は、verifier ログで詳細を表示します。
# journalctl -u keylime_verifier keylime.tpm - INFO - Checking IMA measurement list... keylime.ima - WARNING - File not found in allowlist: /root/bad-script.sh keylime.ima - ERROR - IMA ERRORS: template-hash 0 fnf 1 hash 0 good 781 keylime.cloudverifier - WARNING - agent D432FBB3-D2F1-4A97-9EF7-75BD81C00000 failed, stopping polling
関連情報
- IMA の詳細は、カーネル整合性サブシステムによるセキュリティーの強化 を参照してください。