11.5. Arquitectura de medición de la integridad y módulo de verificación ampliado
La arquitectura de medición de integridad (IMA) y el módulo de verificación extendido (EVM) pertenecen al subsistema de integridad del kernel y mejoran la seguridad del sistema de varias maneras. La siguiente sección describe cómo activar y configurar IMA y EVM para mejorar la seguridad del sistema operativo.
Requisitos previos
Compruebe que el sistema de archivos
securityfs
está montado en el directorio/sys/kernel/security/
y que el directorio/sys/kernel/security/integrity/ima/
existe.# mount … securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) …
Compruebe que el gestor de servicios
systemd
ya está parcheado para soportar IMA y EVM en el momento del arranque:# 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)
Procedimiento
Añade los siguientes parámetros de la línea de comandos del kernel:
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_policy=appraise_tcb ima_appraise=fix evm=fix"
El comando habilita IMA y EVM en el modo fix para la entrada de arranque actual y permite a los usuarios recopilar y actualizar las mediciones de IMA.
El parámetro de la línea de comandos del kernel
ima_policy=appraise_tcb
garantiza que el kernel utilice la política de medición predeterminada de Trusted Computing Base (TCB) y el paso de evaluación. La parte de evaluación prohíbe el acceso a los archivos cuyas medidas anteriores y actuales no coinciden.- Reinicie para que los cambios surtan efecto.
Opcionalmente, verifique que los parámetros han sido añadidos a la línea de comandos del kernel:
# 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
Crear una clave maestra del núcleo para proteger la clave EVM:
# keyctl add user kmk dd if=/dev/urandom bs=1 count=32 2> /dev/null @u 748544121
La clave maestra del kernel (
kmk
) se mantiene enteramente en la memoria del espacio del kernel. El valor de 32 bytes de longitud de la clave maestra del núcleokmk
se genera a partir de bytes aleatorios del archivo/dev/urandom
y se coloca en el llavero del usuario (@u
). El número de serie de la llave está en la segunda línea de la salida anterior.Crear una clave EVM encriptada basada en la clave
kmk
:# keyctl add encrypted evm-key "new user:kmk 64" @u 641780271
El comando utiliza
kmk
para generar y cifrar una clave de usuario de 64 bytes de longitud (llamadaevm-key
) y la coloca en el llavero del usuario (@u
). El número de serie de la clave está en la segunda línea de la salida anterior.ImportanteEs necesario nombrar la clave de usuario como evm-key porque ese es el nombre que espera el subsistema EVM y con el que trabaja.
Crear un directorio para las claves exportadas:
# mkdir -p /etc/keys/
Busque la clave
kmk
y exporte su valor a un archivo:# keyctl pipe
keyctl search @u user kmk
> /etc/keys/kmk *El comando coloca el valor no encriptado de la llave maestra del kernel (
kmk
) en un archivo de ubicación previamente definida (/etc/keys/
).Busque la clave de usuario
evm-key
y exporte su valor a un archivo:# keyctl pipe
keyctl search @u encrypted evm-key
> /etc/keys/evm-keyEl comando coloca el valor encriptado de la clave del usuario
evm-key
en un archivo de ubicación arbitraria. Elevm-key
ha sido encriptado por la llave maestra del kernel anteriormente.Opcionalmente, puede ver las llaves recién creadas:
# 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
Debería poder ver una salida similar.
Activar el EVM:
# echo 1 > /sys/kernel/security/evm
Opcionalmente, verifique que el EVM ha sido inicializado:
# dmesg | tail -1 […] evm: key initialized
Recursos adicionales
- Para más información sobre el subsistema de integridad del kernel, consulte Sección 11.1, “El subsistema de integridad del núcleo”.
- Para más información sobre la arquitectura de medición de la integridad, consulte Sección 11.2, “Arquitectura de medición de la integridad”.
- Para más información sobre el módulo de verificación ampliado, consulte Sección 11.3, “Módulo de verificación ampliado”.
- Para más información sobre la creación de claves encriptadas, consulte Sección 11.4, “Claves de confianza y encriptadas”.