Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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)
    …​

手順

  1. IMA および EVM を有効にするためにシステムを準備します。

    1. 以下のカーネルコマンドラインパラメーターを追加します。

      # 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) 測定ポリシーと評価手順を使用するようになります。評価手順では、以前および現在の測定が一致しないファイルへのアクセスを禁止します。

    2. 変更を有効にするために再起動します。
    3. オプションで、カーネルコマンドラインに新しいパラメーターが含まれることを確認します。

      # 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
  2. EVM の公開鍵および非公開鍵のペアを作成し、設定します。

    1. EVM の新規のキーリングを作成します。

      # evm_kr_id=$(keyctl newring _evm @u)

      このコマンドは _evm キーリングを作成し、これを @u システムユーザーキーリングに割り当てます。次に、_evm のキーリング ID が evm_kr_id 変数に割り当てられ、これにより次回の処理がより容易になります。

    2. オプションで、新たに作成されたキーリングを表示します。

      # keyctl show
      Session Keyring
      1025767139 --alswrv   0     0  keyring: _ses
      548660789 --alswrv   0 65534   \_ keyring: _uid.0
      456142548 --alswrv   0     0       \_ keyring: _evm
    3. キーのディレクトリーを作成します。

      # mkdir -p /etc/keys/
    4. 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)
    5. 以前に作成した /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
    6. 公開鍵を専用の EVM キーリングにインポートします。

      # evmctl import --rsa /etc/keys/pubkey.pem $evm_kr_id
      1054989579

      このコマンドは、/etc/keys/pubkey.pem 公開鍵を _evm キーリングにインポートします。次に、_evm キーリングがカーネルキーリングに割り当てられます。鍵のシリアル番号は、先の例の 2 行目にあります。

    7. オプションで、新たにインポートされた鍵を表示します。

      # 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 コマンドを使用して、ファイルの拡張属性の内容にデジタル署名するために使用できます。拡張属性は後でカーネルによって検証されます。

    8. カーネルマスターキーを作成して、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) キーリングに配置します。

  3. kmk 鍵をもとに暗号化された EVM 鍵を作成します。

    # keyctl add encrypted evm-key "new user:kmk 64" @u
    351426499

    kmk を使用して 64 バイトのユーザーキー (evm-key) を生成してユーザー (@u) のキーリングに配置します。鍵のシリアル番号は、先の例の 2 行目にあります。

    重要

    ユーザーキーに evm-key という名前を付ける必要があります。これは、EVM サブシステムが予想し、使用する名前であるためです。

  4. EVM をアクティベートします。

    # echo 1 > /sys/kernel/security/evm
  5. EVM が初期化されていることを確認します。

    dmesg | tail -1
    […​] EVM: initialized