Red Hat Training

A Red Hat training course is available for RHEL 8

29.5. IMA 및 EVM 활성화

무결성 측정 아키텍처(IMA) 및 EVM(확장 확인 모듈)을 활성화하고 구성하여 운영 체제의 보안을 개선할 수 있습니다.

사전 요구 사항

  • Secure Boot는 일시적으로 비활성화되어 있습니다.

    참고

    Secure Boot가 활성화되면 ima_appraise=fix 커널 명령줄 매개변수가 작동하지 않습니다.

  • securityfs 파일 시스템은 /sys/kernel/security/ 디렉터리에 마운트되고 /sys/kernel/security/integrity/ima/ 디렉터리가 있습니다. mount 명령을 사용하여 securityfs 가 마운트된 위치를 확인할 수 있습니다.

    # mount
    ...
    securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
    ...
  • systemd 서비스 관리자는 부팅 시 IMA 및 EVM을 지원하도록 패치됩니다. 다음 명령을 사용하여 확인합니다.

    # grep <options> pattern <files>

    예를 들면 다음과 같습니다.

    # dmesg | grep -i -e EVM -e IMA -w
    [ 0.598533] ima: No TPM chip found, activating TPM-bypass!
    [ 0.599435] ima: Allocated hash algorithm: sha256
    [ 0.600266] ima: No architecture policies found
    [ 0.600813] evm: Initialising EVM extended attributes:
    [ 0.601581] evm: security.selinux
    [ 0.601963] evm: security.ima
    [ 0.602353] evm: security.capability
    [ 0.602713] evm: HMAC attrs: 0x1
    [ 1.455657] systemd[1]: systemd 239 (239-74.el8_8) 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)
    [ 2.532639] systemd[1]: systemd 239 (239-74.el8_8) 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)

    절차

    1. 현재 부팅 항목에 대한 수정 모드에서 IMA 및 EVM을 활성화하고 사용자가 다음 커널 명령줄 매개변수를 추가하여 IMA 측정값을 수집하고 업데이트할 수 있습니다.

      # grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"

      이 명령을 사용하면 현재 부팅 항목에 대한 수정 모드에서 IMA 및 EVM을 활성화하고 사용자가 IMA 측정값을 수집하고 업데이트할 수 있습니다.

      ima_policy=appraise_tcb 커널 명령줄 매개 변수를 사용하면 커널이 기본 trusted Computing Base(ECDHEB) 측정 정책 및 평가 단계를 사용합니다. 평가 단계는 이전 및 현재 측정값이 일치하지 않는 파일에 대한 액세스를 금지합니다.

    2. 재부팅하여 변경 사항을 적용합니다.
    3. 선택 사항: 매개변수가 커널 명령줄에 추가되었는지 확인합니다.

      # 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
    4. 커널 마스터 키를 생성하여 EVM 키를 보호합니다.

      # keyctl add user kmk "$(dd if=/dev/urandom bs=1 count=32 2> /dev/null)" @u
      748544121

      kmk 는 커널 공간 메모리에 전적으로 유지됩니다. kmk 의 32바이트 긴 값은 /dev/urandom 파일에서 임의의 바이트에서 생성되고 사용자(@u) 인증 키에 배치됩니다. 키 일련 번호는 이전 출력의 첫 번째 행에 있습니다.

    5. kmk 를 기반으로 암호화된 EVM 키를 만듭니다.

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

      명령은 kmk 를 사용하여 64바이트 긴 사용자 키( evm-key)를 생성하고 암호화하여 사용자(@u) 인증 키에 배치합니다. 키 일련 번호는 이전 출력의 첫 번째 행에 있습니다.

      중요

      이 이름은 EVM 하위 시스템 이름이 필요하며 작업 중이므로 사용자 키의 이름을 evm-key 로 지정해야 합니다.

    6. 내보낸 키의 디렉터리를 만듭니다.

      # mkdir -p /etc/keys/
    7. kmk 를 검색하고 암호화되지 않은 값을 새 디렉터리로 내보냅니다.

      # keyctl pipe $(keyctl search @u user kmk) > /etc/keys/kmk
    8. evm-key 를 검색하고 암호화된 값을 새 디렉터리로 내보냅니다.

      # keyctl pipe $(keyctl search @u encrypted evm-key) > /etc/keys/evm-key

      evm-key 는 이전에 커널 마스터 키로 암호화되었습니다.

    9. 선택 사항: 새로 생성된 키를 확인합니다.

      # 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
    10. 선택 사항: 예를 들어 시스템을 재부팅한 후 인증 키에서 키가 제거된 경우 새 키를 생성하는 대신 이미 내보낸 kmkevm-key 를 가져올 수 있습니다.

      1. kmk 를 가져옵니다.

        # keyctl add user kmk "$(cat /etc/keys/kmk)" @u
        451342217
      2. evm-key 를 가져옵니다.

        # keyctl add encrypted evm-key "load $(cat /etc/keys/evm-key)" @u
        924537557
    11. EVM을 활성화합니다.

      # echo 1 > /sys/kernel/security/evm
    12. 전체 시스템의 레이블을 다시 지정합니다.

      # find / -fstype xfs -type f -uid 0 -exec head -n 1 '{}' >/dev/null \;
      주의

      시스템의 레이블을 다시 지정하지 않고 IMA 및 EVM을 활성화하면 시스템의 대부분의 파일에 액세스할 수 없게 될 수 있습니다.

검증

  • EVM이 초기화되었는지 확인합니다.

    # dmesg | tail -1
    […​] evm: key initialized