8.5. 무결성 측정 아키텍처 및 확장 검증 모듈 활성화
무결성 측정 아키텍처(IMA) 및 EVM(Extended verification module)은 다양한 방식으로 시스템 보안을 향상시키는 커널 무결성 하위 시스템의 구성 요소입니다. IMA 및 EVM을 구성하면 파일에 서명하여 시스템 보안을 강화할 수 있습니다.
사전 요구 사항
-
ima-evm-utils
및keyutils
패키지가 시스템에 설치됩니다. -
securityfs
파일 시스템은/sys/kernel/security/
디렉토리에 마운트됩니다. /sys/kernel/security/ima/
디렉토리가 있습니다.mount
# mount … securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) …
Copy to Clipboard Copied!
절차
IMA 및 EVM을 사용하도록 시스템을 준비합니다.
다음 커널 명령줄 매개변수를 추가합니다.
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=fix ima_appraise_tcb evm=fix"
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=fix ima_appraise_tcb evm=fix"
Copy to Clipboard Copied! 명령을 사용하면 현재 부팅 항목에 대한 수정 모드에서 IMA 및 EVM을 사용할 수 있으며 사용자가 IMA 측정을 수집 및 업데이트할 수 있습니다.
ima_appraise_tcb
커널 명령행 매개변수를 사용하면 커널에서 기본 Trusted Computing Base(TCB) 측정 정책 및 appraisal 단계를 사용합니다. 이전 측정 및 현재 측정이 일치하지 않는 파일에 대한 접근을 금지하는 단계 (Arraisal step forbids access to files whose prior and current measurements do not match.)- 변경 사항을 적용하려면 재부팅합니다.
선택적으로 커널 명령줄에 새 매개변수가 포함되어 있는지 확인합니다.
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
# 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
Copy to Clipboard Copied!
EVM의 공용 및 개인 키 쌍을 만들고 설정합니다.
EVM의 새 인증 키를 만듭니다.
evm_kr_id=$(keyctl newring _evm @u)
# evm_kr_id=$(keyctl newring _evm @u)
Copy to Clipboard Copied! 이 명령은
_evm
인증 키를 생성하여@u
시스템 사용자 인증 키에 연결합니다. 그런 다음 나중에 더 편리하게 처리하기 위해_evm
의 인증 키 ID가evm_kr_id
변수에 할당됩니다.선택적으로 새로 생성된 인증 키를 확인합니다.
keyctl show
# keyctl show Session Keyring 1025767139 --alswrv 0 0 keyring: _ses 548660789 --alswrv 0 65534 \_ keyring: _uid.0 456142548 --alswrv 0 0 \_ keyring: _evm
Copy to Clipboard Copied! 키의 디렉터리를 생성합니다.
mkdir -p /etc/keys/
# mkdir -p /etc/keys/
Copy to Clipboard Copied! /etc/keys/privkey.pem
파일에 1024비트 RSA 개인 키를 생성합니다.openssl genrsa -out /etc/keys/privkey.pem 1024
# openssl genrsa -out /etc/keys/privkey.pem 1024 Generating RSA private key, 1024 bit long modulus .......++++++ ...++++++ e is 65537 (0x10001)
Copy to Clipboard Copied! 이전에 생성된
/etc/keys/privkey.pem
개인 키를 사용하여 해당 RSA 공개 키를/etc/keys/pubkey.pem
파일로 가져옵니다.openssl rsa -pubout -in /etc/keys/privkey.pem -out /etc/keys/pubkey.pem
# openssl rsa -pubout -in /etc/keys/privkey.pem -out /etc/keys/pubkey.pem writing RSA key
Copy to Clipboard Copied! 공개 키를 전용 EVM 인증 키로 가져옵니다.
evmctl import --rsa /etc/keys/pubkey.pem $evm_kr_id
# evmctl import --rsa /etc/keys/pubkey.pem $evm_kr_id 1054989579
Copy to Clipboard Copied! 명령은
/etc/keys/pubkey.pem
공개 키를_evm
인증 키로 가져옵니다. 그런 다음_evm
인증 키가 커널 인증 키에 연결됩니다. 키 일련 번호는 이전 예제의 두 번째 줄에 있습니다.선택적으로 새로 가져온 키를 확인합니다.
keyctl show
# 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
Copy to Clipboard Copied! 참고이 symmetric 키 쌍을 사용하여 eRuntimeConfig sign 명령을 사용하여 파일의 확장된 속성의 내용을 디지털
서명하는
데 사용할 수 있습니다. 확장 속성은 나중에 커널에서 확인합니다.EVM 키를 보호하기 위해 커널 마스터 키를 생성합니다.
dd if=/dev/urandom bs=1 count=32 2>/dev/null | keyctl padd user kmk-user @u
# dd if=/dev/urandom bs=1 count=32 2>/dev/null | keyctl padd user kmk-user @u
Copy to Clipboard Copied! 커널 마스터 키(
kmk
)는 전적으로 커널 공간 메모리에 유지됩니다. 커널 마스터 키kmk
의 32바이트 긴 값은/dev/urandom
파일에서 임의의 바이트에서 생성되며 사용자(@u
) 인증 키에 배치됩니다.
kmk
키를 기반으로 암호화된 EVM 키를 만듭니다.keyctl add encrypted evm-key "new user:kmk 64" @u
# keyctl add encrypted evm-key "new user:kmk 64" @u 351426499
Copy to Clipboard Copied! 명령은
kmk
를 사용하여 64바이트 사용자 키(evm-key
)를 생성하고 암호화하며 사용자(@u
) 인증 키에 배치합니다. 키 일련 번호는 이전 예제의 두 번째 줄에 있습니다.중요이는 EVM 하위 시스템에서 예상하고 함께 작동하는 이름이므로 사용자 키 evm-key 의 이름을 지정해야 합니다.
EVM을 활성화합니다.
echo 1 > /sys/kernel/security/evm
# echo 1 > /sys/kernel/security/evm
Copy to Clipboard Copied! EVM이 초기화되었는지 확인합니다.
dmesg | tail -1 […] EVM: initialized
dmesg | tail -1 […] EVM: initialized
Copy to Clipboard Copied!