8.5. IMA と EVM の有効化
Integrity Measurement Architecture (IMA) と Extended Verification Module (EVM) を有効にして設定することで、オペレーティングシステムのセキュリティーを向上できます。
必ず IMA と一緒に EVM を有効にしてください。
EVM を単独で有効にすることもできますが、EVM 評価は IMA 評価ルールによってのみトリガーされます。したがって、SELinux 属性などのファイルメタデータが EVM によって保護されません。ファイルメタデータがオフラインで改ざんされた場合、EVM はファイルメタデータの変更を防ぐことしかできません。ファイルの実行などのファイルアクセスは妨げません。
前提条件
セキュアブートが一時的に無効になっている。
注記セキュアブートが有効になっている場合、
ima_appraise=fix
カーネルコマンドラインパラメーターが機能しません。securityfs
ファイルシステムが/sys/kernel/security/
ディレクトリーにマウントされており、/sys/kernel/security/integrity/ima/
ディレクトリーが存在している。mount
コマンドを使用して、securityfs
がマウントされている場所を確認できます。mount
# mount ... securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow systemd
サービスマネージャーに、ブート時に IMA と EVM をサポートするパッチが適用されている。次のコマンドを使用して確認します。grep <options> pattern <files>
# grep <options> pattern <files>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 手順
現在のブートエントリーの fix モードで IMA と EVM を有効にし、次のカーネルコマンドラインパラメーターを追加することで、ユーザーが IMA 測定値を収集および更新できるようにします。
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、現在のブートエントリーの 修正 モードで 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
# 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow カーネルマスターキーを作成して、EVM 鍵を保護します。
keyctl add user kmk "$(dd if=/dev/urandom bs=1 count=32 2> /dev/null)" @u
# keyctl add user kmk "$(dd if=/dev/urandom bs=1 count=32 2> /dev/null)" @u 748544121
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmk
は、すべてカーネル領域メモリー内に保持されます。kmk
の 32 バイトの Long 値は、/dev/urandom
ファイルの乱数バイト数から生成し、ユーザーの (@u
) キーリングに配置します。鍵のシリアル番号は、前の出力の 1 行目にあります。kmk
に基づいて暗号化された EVM 鍵を作成します。keyctl add encrypted evm-key "new user:kmk 64" @u
# keyctl add encrypted evm-key "new user:kmk 64" @u 641780271
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmk
を使用して 64 バイトの long 型ユーザーキー (evm-key
) を生成してユーザー (@u
) のキーリングに配置します。鍵のシリアル番号は、前の出力の 1 行目にあります。重要ユーザーキーの名前は evm-key (EVM サブシステムが想定して使用している名前) にする必要があります。
エクスポートする鍵のディレクトリーを作成します。
mkdir -p /etc/keys/
# mkdir -p /etc/keys/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kmk
を検索し、その暗号化されていない値を新しいディレクトリーにエクスポートします。keyctl pipe $(keyctl search @u user kmk) > /etc/keys/kmk
# keyctl pipe $(keyctl search @u user kmk) > /etc/keys/kmk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow evm-key
を検索し、その暗号化された値を新しいディレクトリーにエクスポートします。keyctl pipe $(keyctl search @u encrypted evm-key) > /etc/keys/evm-key
# keyctl pipe $(keyctl search @u encrypted evm-key) > /etc/keys/evm-key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow evm-key
は、すでにカーネルのマスターキーにより暗号化されています。オプション: 新しく作成されたキーを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: システムの再起動後など、鍵がキーリングから削除されている場合は、新しいものを作成する代わりに、すでにエクスポートされている
kmk
とevm-key
をインポートできます。kmk
をインポートします。keyctl add user kmk "$(cat /etc/keys/kmk)" @u 451342217
# keyctl add user kmk "$(cat /etc/keys/kmk)" @u 451342217
Copy to Clipboard Copied! Toggle word wrap Toggle overflow evm-key
をインポートします。keyctl add encrypted evm-key "load $(cat /etc/keys/evm-key)" @u 924537557
# keyctl add encrypted evm-key "load $(cat /etc/keys/evm-key)" @u 924537557
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
EVM をアクティブ化します。
echo 1 > /sys/kernel/security/evm
# echo 1 > /sys/kernel/security/evm
Copy to Clipboard Copied! Toggle word wrap Toggle overflow システム全体のラベルを付け直します。
find / -fstype xfs -type f -uid 0 -exec head -n 1 '{}' >/dev/null \;
# find / -fstype xfs -type f -uid 0 -exec head -n 1 '{}' >/dev/null \;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告システムのラベルを変更せずに IMA と EVM を有効にすると、システム上のファイルの大部分にアクセスできなくなる可能性があります。
検証
EVM が初期化されていることを確認します。
dmesg | tail -1
# dmesg | tail -1 […] evm: key initialized
Copy to Clipboard Copied! Toggle word wrap Toggle overflow