8.5. Integrity Measurement Architecture および Extended Verification Module の有効化
Integrity Measurement Architecture (IMA) および Extended Verification Module (EVM) は、さまざまな方法でシステムセキュリティーを強化するカーネル整合性サブシステムのコンポーネントです。IMA および EVM を設定すると、ファイルに署名できるため、システムのセキュリティーを強化できます。
前提条件
-
ima-evm-utils
パッケージおよびkeyutils
パッケージがシステムにインストールされている。 -
securityfs
ファイルシステムが/sys/kernel/security/
ディレクトリーにマウントされます。 /sys/kernel/security/ima/
ディレクトリーが存在する。# mount … securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) …
手順
IMA および EVM を有効にするためにシステムを準備します。
以下のカーネルコマンドラインパラメーターを追加します。
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=fix ima_appraise_tcb evm=fix"
このコマンドは、現在のブートエントリーの fix モードで IMA および EVM を有効にし、ユーザーが IMA 測定を収集し、更新できるようにします。
ima_appraise_tcb
カーネルコマンドラインパラメーターにより、カーネルは、デフォルトの TCB (Trusted Computing Base) 測定ポリシーと評価手順を使用するようになります。評価手順では、以前および現在の測定が一致しないファイルへのアクセスを禁止します。- 変更を有効にするために再起動します。
オプションで、カーネルコマンドラインに新しいパラメーターが含まれることを確認します。
# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-3.10.0-1136.el7.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 ima_appraise=fix ima_appraise_tcb evm=fix
EVM の公開鍵および非公開鍵のペアを作成し、設定します。
EVM の新規のキーリングを作成します。
# evm_kr_id=$(keyctl newring _evm @u)
このコマンドは
_evm
キーリングを作成し、これを@u
システムユーザーキーリングに割り当てます。次に、_evm
のキーリング ID がevm_kr_id
変数に割り当てられ、これにより次回の処理がより容易になります。オプションで、新たに作成されたキーリングを表示します。
# keyctl show Session Keyring 1025767139 --alswrv 0 0 keyring: _ses 548660789 --alswrv 0 65534 \_ keyring: _uid.0 456142548 --alswrv 0 0 \_ keyring: _evm
キーのディレクトリーを作成します。
# mkdir -p /etc/keys/
1024 ビットの RSA 秘密鍵を
/etc/keys/privkey.pem
ファイルに生成します。# openssl genrsa -out /etc/keys/privkey.pem 1024 Generating RSA private key, 1024 bit long modulus .......++++++ ...++++++ e is 65537 (0x10001)
以前に作成した
/etc/keys/privkey.pem
秘密鍵を使用して、対応する RSA 公開鍵を/etc/keys/pubkey.pem
ファイルに派生させます。# openssl rsa -pubout -in /etc/keys/privkey.pem -out /etc/keys/pubkey.pem writing RSA key
公開鍵を専用の EVM キーリングにインポートします。
# evmctl import --rsa /etc/keys/pubkey.pem $evm_kr_id 1054989579
このコマンドは、
/etc/keys/pubkey.pem
公開鍵を_evm
キーリングにインポートします。次に、_evm
キーリングがカーネルキーリングに割り当てられます。鍵のシリアル番号は、先の例の 2 行目にあります。オプションで、新たにインポートされた鍵を表示します。
# keyctl show Session Keyring 1025767139 --alswrv 0 0 keyring: _ses 548660789 --alswrv 0 65534 \_ keyring: _uid.0 456142548 --alswrv 0 0 \_ keyring: _evm 1054989579 --alswrv 0 0 \_ user: FA0EF80BF06F80AC
注記この非対称鍵のペアは、
evmctl sign
コマンドを使用して、ファイルの拡張属性の内容にデジタル署名するために使用できます。拡張属性は後でカーネルによって検証されます。カーネルマスターキーを作成して、EVM 鍵を保護します。
# dd if=/dev/urandom bs=1 count=32 2>/dev/null | keyctl padd user kmk-user @u
カーネルマスターキー (
kmk
) はすべて、カーネル領域メモリーに保持されます。カーネルマスターキーkmk
の 32 バイトの Long 値は、/dev/urandom
ファイルの乱数バイト数から生成し、ユーザーの (@u
) キーリングに配置します。
kmk
鍵をもとに暗号化された EVM 鍵を作成します。# keyctl add encrypted evm-key "new user:kmk 64" @u 351426499
kmk
を使用して 64 バイトのユーザーキー (evm-key
) を生成してユーザー (@u
) のキーリングに配置します。鍵のシリアル番号は、先の例の 2 行目にあります。重要ユーザーキーに evm-key という名前を付ける必要があります。これは、EVM サブシステムが予想し、使用する名前であるためです。
EVM をアクティベートします。
# echo 1 > /sys/kernel/security/evm
EVM が初期化されていることを確認します。
dmesg | tail -1 […] EVM: initialized