Menu Close

Red Hat Training

A Red Hat training course is available for RHEL 8

24.3.2.7. 무결성 측정 아키텍처 및 확장 검증 모듈 활성화

무결성 측정 아키텍처(IMA) 및 EVM(확장 검증 모듈)은 커널 무결성 하위 시스템에 속하고 다양한 방법으로 시스템 보안을 강화합니다. 다음 섹션에서는 운영 체제의 보안을 개선하기 위해 IMA 및 EVM을 활성화하고 구성하는 방법을 설명합니다.

사전 요구 사항

  • 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)

절차

  1. 다음 커널 명령줄 매개변수를 추가합니다.

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

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

    The ima_policy=appraise_tcb 커널 명령줄 매개 변수는 커널이 기본 MTCB(신뢰할 수 있는 컴퓨팅 기반) 측정 정책 및 평가 단계를 사용하도록 합니다. 평가 부분은 이전 및 현재 측정값이 일치하지 않는 파일에 대한 액세스를 금지합니다.

  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

    명령은 이전에 정의된 위치(/etc/keys/)의 파일에 커널 마스터 키(kmk)의 암호화되지 않은 값을 배치합니다.

  8. evm-key 사용자 키를 검색하고 해당 값을 파일로 내보냅니다.

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

    명령은 사용자 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

    비슷한 출력이 표시됩니다.

  10. EVM을 활성화합니다.

    # echo 1 > /sys/kernel/security/evm
  11. 선택적으로 EVM이 초기화되었는지 확인합니다.

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