Red Hat Training
A Red Hat training course is available for RHEL 8
10.7. Integrity Measurement Architecture および Extended Verification Module の有効化
整合性測定アーキテクチャー (IMA) および拡張検証モジュール (EVM) は、カーネル整合性サブシステムに属し、さまざまな方法でシステムセキュリティーを強化します。オペレーティングシステムのセキュリティーを向上させるために、IMA と EVM を有効にして設定できます。
前提条件
Secure Boot 機能を一時的に無効にしている。
注記Secure Boot 機能を有効にすると、
ima_appraise=fix
は機能しません。securityfs
ファイルシステムが/sys/kernel/security/
ディレクトリーにマウントされており、/sys/kernel/security/integrity/ima/
ディレクトリーが存在している。# mount ... securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) ...
systemd
サービスマネージャーに、システムの起動時に IMA および EVM に対応するパッチがすでに適用されていることを確認します。# dmesg | grep -i -e EVM -e IMA [ 0.000000] Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-167.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet [ 0.000000] kvm-clock: cpu 0, msr 23601001, primary cpu clock [ 0.000000] Using crashkernel=auto, the size chosen is a best effort estimation. [ 0.000000] Kernel command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-167.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet [ 0.911527] ima: No TPM chip found, activating TPM-bypass! [ 0.911538] ima: Allocated hash algorithm: sha1 [ 0.911580] evm: Initialising EVM extended attributes: [ 0.911581] evm: security.selinux [ 0.911581] evm: security.ima [ 0.911582] evm: security.capability [ 0.911582] evm: HMAC attrs: 0x1 [ 1.715151] systemd[1]: systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy) [ 3.824198] fbcon: qxldrmfb (fb0) is primary device [ 4.673457] PM: Image not found (code -22) [ 6.549966] systemd[1]: systemd 239 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=legacy)
手順
以下のカーネルコマンドラインパラメーターを追加します。
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"
このコマンドは、現在のブートエントリーの fix モードで IMA および EVM を有効にしてユーザーが IMA 測定を収集し、更新できるようにします。
ima_policy=appraise_tcb
カーネルコマンドラインパラメーターにより、カーネルは、デフォルトの TCB (Trusted Computing Base) 測定ポリシーと評価手順を使用するようになります。評価部分は、以前の測定と現在の測定が一致しないファイルへのアクセスを禁止します。- 再起動して変更を適用します。
必要に応じて、パラメーターがカーネルコマンドラインに追加されていることを確認します。
# cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-167.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet ima_policy=appraise_tcb ima_appraise=fix evm=fix
カーネルマスターキーを作成して、EVM 鍵を保護します。
# keyctl add user kmk "$(dd if=/dev/urandom bs=1 count=32 2> /dev/null)" @u 748544121
カーネルマスターキー (
kmk
) はすべて、カーネル領域メモリーに保持されます。カーネルマスターキーkmk
の 32 バイトの Long 値は、/dev/urandom
ファイルの乱数バイト数から生成し、ユーザーの (@u
) キーリングに配置します。鍵のシリアル番号は、前の出力の 2 行目にあります。kmk
鍵をもとに暗号化された EVM 鍵を作成します。# keyctl add encrypted evm-key "new user:kmk 64" @u 641780271
kmk
を使用して 64 バイトの long 型ユーザーキー (evm-key
) を生成してユーザー (@u
) のキーリングに配置します。鍵のシリアル番号は、前の出力の 2 行目にあります。重要ユーザーキーの名前は evm-key (EVM サブシステムが想定して使用している名前) にする必要があります。
エクスポートする鍵のディレクトリーを作成します。
# mkdir -p /etc/keys/
kmk
鍵を検索し、その値をファイルにエクスポートします。# keyctl pipe $(keyctl search @u user kmk) > /etc/keys/kmk
このコマンドは、カーネルマスターキー (
kmk
) の非暗号化値を、以前に定義した場所 (/etc/keys/
) にあるファイルに配置します。ユーザーキー
evm-key
を検索し、その値をファイルにエクスポートします。# keyctl pipe $(keyctl search @u encrypted evm-key) > /etc/keys/evm-key
このコマンドは、ユーザーの
evm-key
鍵の暗号化値を、任意の場所にあるファイルに追加します。evm-key
は、すでにカーネルのマスターキーにより暗号化されています。必要に応じて、新規作成されたキーを表示します。
# keyctl show Session Keyring 974575405 --alswrv 0 0 keyring: ses 299489774 --alswrv 0 65534 \ keyring: uid.0 748544121 --alswrv 0 0 \ user: kmk 641780271 --alswrv 0 0 \_ encrypted: evm-key # ls -l /etc/keys/ total 8 -rw-r--r--. 1 root root 246 Jun 24 12:44 evm-key -rw-r--r--. 1 root root 32 Jun 24 12:43 kmk
同様の出力が表示されるはずです。
EVM をアクティベートします。
# echo 1 > /sys/kernel/security/evm
システム全体の再ラベル付け
# find / -fstype xfs -type f -uid 0 -exec head -n 1 '{}' >/dev/null \;
重要この手順を省略すると、IMA および EVM を有効にした後に、システム上のほとんどのファイルにアクセスできなくなる場合があります。
検証手順
次のように入力して、EVM が初期化されたことを確認できます。
# dmesg | tail -1 […] evm: key initialized
システムが再起動されると、キーはキーリングから削除されます。このような場合、すでにエクスポートされている kmk
および evm-key
キーをインポートできます。
手順
ユーザー
kmk
キーを追加します (ステップ 7 で/etc/keys/kmk
ファイルに既にエクスポートされています)。# keyctl add user kmk "$(cat /etc/keys/kmk)" @u 451342217 # keyctl show Session Keyring 695566911 --alswrv 0 0 keyring: ses 58982213 --alswrv 0 65534 \ keyring: uid.0 451342217 --alswrv 0 0 \ user: kmk
ユーザーの
evm-key
キーをインポートします (手順 8 で既に/etc/keys/evm-key
ファイルにエクスポートされています)。# keyctl add encrypted evm-key "load $(cat /etc/keys/evm-key)" @u 924537557 # keyctl show Session Keyring 695566911 --alswrv 0 0 keyring: ses 58982213 --alswrv 0 65534 \ keyring: uid.0 451342217 --alswrv 0 0 \ user: kmk 924537557 --alswrv 0 0 \_ encrypted: evm-key