Protección de SUSE Linux Micro mediante Keylime
- DESCRIPCIÓN
Keylime es una certificación de arranque remoto basada en TPM y una medida de integridad del tiempo de ejecución.
- INTENCIÓN
En este artículo se describe cómo configurar y ejecutar Keylime en SUSE Linux Micro.
- ESFUERZO
Se tardan aproximadamente 25 minutos en leer el artículo.
- OBJETIVO
Obtendrá más información sobre Keylime: cómo funciona, cómo debe configurarlo y cómo se ejecuta.
- REQUISITOS
Una instancia en ejecución de SUSE Linux Micro
1 Certificación remota mediante Keylime #
Con la creciente demanda de dispositivos de seguridad contra cambios no autorizados, el uso del mecanismo de seguridad denominado certificación remota (RA) ha experimentado un crecimiento significativo. Mediante la certificación remota, un host (cliente) puede autenticar el estado de su cadena de arranque y el software en ejecución en un host remoto (verificador). A menudo, la certificación remota se combina con el cifrado de clave pública (mediante TPM2), por lo que la información enviada solo puede ser leída por los servicios que solicitaron la certificación, y es posible verificar la validez de los datos.
La certificación remota se implementa en SUSE Linux Micro mediante Keylime.
1.1 Terminología #
La tecnología de certificación remota utiliza los siguientes términos:
- Clave de certificación (AK)
Una clave de firma de datos que demuestra que los datos provienen de un TPM real y no se han manipulado.
- Raíz de confianza para la medición
Calcula su propio hash y el hash del siguiente paso en el proceso de arranque, iniciando la cadena de mediciones.
- Clave de aprobación (EK)
Una clave de cifrado que está incrustada de forma permanente en el TPM cuando se fabrica. La parte pública de la clave y la certificación almacenada en el TPM se utilizan para reconocer un TPM auténtico.
- Arquitectura de gestión de integridad (IMA)
Un subsistema de integridad del kernel que proporciona un medio para detectar cambios dañinos en los archivos.
- Arranque medido
Método con el que cada componente de la secuencia de arranque calcula un hash del siguiente antes de delegar la ejecución del siguiente componente. El hash extiende uno o varios PCR del TPM. Se crea un evento con la información acerca de dónde tuvo lugar la medición y qué se midió. Dichos eventos se recopilan en un registro de eventos y, junto con los valores extendidos de PCR, los eventos se pueden comparar con los valores esperados que representan que el sistema está en buen estado.
- Registro de configuración de plataforma (PCR)
Una ubicación de memoria en TPM que, por ejemplo, almacena valores hash de capas de arranque. El PCR solo se puede actualizar mediante la operación no reversible:
extend
. El comandoquote
en TPM puede obtener una lista firmada de los valores actuales de PCR, y un tercero puede verificar esta cita durante el proceso de certificación.- Arranque seguro
Cada paso del proceso de arranque comprueba una firma criptográfica en el ejecutable del siguiente paso antes de lanzarlo.
- Módulo de plataforma de confianza (TPM)
Un procesador criptográfico de seguridad autónomo presente en el sistema como hardware o implementado en el firmware que sirve como raíz de confianza. El TPM proporciona un PCR para almacenar los valores hash de las capas de arranque. Un TPM típico proporciona varias funciones, como un generador de números aleatorios, contadores o un reloj local. También almacena 24 PCR agrupados por bancos para cada función de hash de cifrado compatible (SHA1, SHA256, SHA384 o SHA512).
NotaPor defecto, el uso del TPM está inhabilitado. Por lo tanto, el arranque medido no tiene lugar. Para habilitar la certificación remota, habilite el TPM en el menú de EFI/BIOS.
- Carga útil segura
Un mecanismo para entregar datos cifrados a los agentes en buen estado. Las cargas útiles se utilizan para proporcionar claves, contraseñas, certificados, configuraciones o guiones que el agente utiliza posteriormente.
1.2 ¿Qué es Keylime? #
Keylime es una solución de certificación remota que permite monitorizar el estado de los nodos remotos mediante un TPM como raíz de confianza para la medición. Con Keylime, puede realizar varias tareas, por ejemplo:
Validar los PCR extendidos durante el arranque medido.
Crear análisis y realizar afirmaciones del registro de eventos.
Realizar una afirmación del valor de cualquier PCR en el sistema remoto.
Monitorizar la validez de los archivos abiertos o ejecutados.
Entregar datos cifrados a nodos verificados mediante cargas útiles seguras.
Ejecutar guiones personalizados que se activan cuando en un equipo fallan las mediciones certificadas.
1.3 Arquitectura #
Keylime consta de un agente, un verificador, un registrador y una herramienta de línea de comandos (inquilino). Los agentes se encuentran en los sistemas que se deben certificar. El verificador y el registrador se encuentran en sistemas remotos que realizan el registro y la certificación de los agentes. Tenga en cuenta que solo la función de agente está disponible en SUSE Linux Micro. Para obtener más información acerca de cada componente, consulte las siguientes secciones.
1.3.1 Agente de Keylime #
El agente es un servicio que se ejecuta en el sistema y que se debe certificar. El agente envía el registro de eventos, los valores hash de IMA y la información sobre el arranque medido al verificador, utilizando el TPM local como certificador de la validez de los datos.
Cuando se inicia un agente nuevo, primero debe registrarse en el registrador. Para ello, el agente necesita un certificado TLS para establecer la conexión. El certificado TLS lo genera el registrador, pero debe instalarse manualmente en el agente. Después del registro, el agente envía su clave de certificación y la parte pública de la clave de aprobación al registrador. El registrador responde al agente con un desafío en un proceso denominado activación de credenciales, que valida el TPM del agente. Cuando el agente se ha registrado, está listo para inscribirse para la certificación.
1.3.2 Registrador de Keylime #
El registrador se utiliza para registrar agentes que deben estar certificados. El registrador recopila la clave de certificación del agente, la parte pública de la clave de aprobación y la certificación de la clave de aprobación, y verifica que la clave de certificación del agente pertenece a la clave de aprobación.
1.3.3 Verificador de Keylime #
El verificador realiza la certificación real de los agentes y extrae continuamente los datos de certificación requeridos de los agentes (entre otros, los valores de PCR, los registros de IMA y los registros de eventos UEFI).
2 Ejecución de la carga de trabajo de Keylime mediante Podman #
Keylime es una solución de certificación remota que permite monitorizar el estado de los nodos remotos. El verificador y el registrador son componentes esenciales de Keylime en sistemas remotos para realizar el registro y la certificación de los agentes de Keylime.
El contenedor descrito en este artículo proporciona un verificador y un registrador de servicios del plano de control, así como una herramienta de línea de comandos inquilina que forman parte del proyecto Keylime.
Antes de empezar a instalar y registrar agentes, prepare el verificador y el registrador en hosts remotos, como se describe en el siguiente procedimiento.
Identifique la imagen de la carga de trabajo de Keylime.
#
podman search keylime [...] registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-planeExtraiga la imagen del registro.
#
podman pull\ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestCree el volumen
keylime-control-plane
para hacer que la base de datos y los certificados necesarios durante el proceso de certificación sean persistentes.#
podman container runlabel install \ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestInicie el contenedor y los servicios relacionados.
#
podman container runlabel run \ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestSe crea el contenedor
keylime-control-plane
. Incluye servicios de registrador y verificador configurados y en ejecución. Internamente, el contenedor expone los puertos 8881, 8890 y 8891 al host utilizando los valores por defecto. Valide la configuración del cortafuegos para permitir el acceso a los puertos y la comunicación entre contenedores, ya que la herramienta de línea de comandos inquilina lo requiere.
Si necesita detener los servicios de Keylime, ejecute el siguiente comando:
#
podman kill keylime-control-plane-container
2.1 Monitorización de los servicios de Keylime #
Para obtener el estado de los contenedores en ejecución en el host, ejecute el siguiente comando:
#
podman ps
Para ver los registros de los servicios de Keylime, ejecute el siguiente comando:
#
podman logs keylime-control-plane-container
2.2 Ejecución de la herramienta de línea de comandos inquilina #
La herramienta de línea de comandos inquilina se incluye en el contenedor y, si el cortafuegos del host no interfiere con los puertos expuestos por los servicios de Keylime, puede ejecutarla utilizando la misma imagen, por ejemplo:
#
podman run --rm \
-v keylime-control-plane-volume:/var/lib/keylime/ \
keylime-control-plane:latest \
keylime_tenant -v 10.88.0.1 -r 10.88.0.1 --cert default -c reglist
2.3 Extracción del certificado de Keylime #
La primera vez que se ejecuta el contenedor de Keylime, sus servicios crean un certificado requerido por varios agentes. Debe extraer el certificado del contenedor y copiarlo en el directorio /var/lib/keylime/cv_ca/
del agente.
#
podman cp \
keylime-control-plane-container:/var/lib/keylime/cv_ca/cacert.crt
.
#
scp cacert.crt
AGENT_HOST:/var/lib/keylime/cv_ca/
Encontrará más información sobre la instalación del agente en la Sección 3, “Instalación del agente de Keylime”.
3 Instalación del agente de Keylime #
Keylime es una solución de certificación remota que permite monitorizar el estado de los nodos remotos. El agente de Keylime es un servicio que se ejecuta en el sistema que debe certificarse y envía el registro de eventos, los valores hash de IMA e información sobre el arranque medido al verificador.
El agente de Keylime no está incluido en SUSE Linux Micro por defecto y debe instalarlo manualmente. Para instalar el agente, haga lo siguiente:
Instale el paquete rust-keylime de la siguiente manera:
#
transactional-update pkg in rust-keylimeA continuación, rearranque el sistema.
Ajuste la configuración por defecto del agente.
Cree un directorio para almacenar un nuevo archivo de configuración para sus cambios en
/etc/keylime/agent.conf.d/
. La configuración por defecto se almacena en/usr/etc/keylime/agent.conf
, pero no se recomienda editar este archivo porque puede sobrescribirse en las próximas actualizaciones del sistema.#
mkdir -p /etc/keylime/agent.conf.dCree un nuevo archivo
/etc/keylime/agent.conf.d/agent.conf
:#
cat << EOF > /etc/keylime/agent.conf.d/agent.conf [agent] uuid = "d111ec46-34d8-41af-ad56-d560bc97b2e8"1 registrar_ip = "<REMOTE_IP>"2 revocation_notification_ip = "<REMOTE_IP>"3 EOFCambie el propietario del directorio
/etc/keylime/
akeylime:tss
:#
chown -R keylime:tss /etc/keylimeCambie los permisos del directorio
/etc/keylime/
:#
chmod -R 600 /etc/keylime
Copie los certificados generados por la CA en el nodo del agente. En el nodo del agente, haga lo siguiente:
Prepare un directorio para el certificado:
#
mkdir -p /var/lib/keylime/cv_caCopie el certificado en el agente:
#
scp CERT_SERVER_ADDRESS:/var/lib/keylime/cv_ca/cacert.crt /var/lib/keylime/cv_caCambie el propietario del certificado a
keylime:tss
:#
chown -R keylime:tss /var/lib/keylime/cv_ca
Inicie y habilite
keylime_agent.service
:#
systemctl enable --now keylime_agent.service
4 Registro del agente de Keylime #
Keylime es una solución de certificación remota que permite monitorizar el estado de los nodos remotos. El agente de Keylime es un servicio que se ejecuta en el sistema que debe certificarse y envía el registro de eventos, los valores hash de IMA e información sobre el arranque medido al verificador.
Puede registrar un nuevo agente mediante la herramienta de línea de comandos inquilina o editando la configuración del verificador. Con el inquilino en el host del verificador, ejecute lo siguiente:
#
keylime_tenant -v 127.0.0.1 \
-t AGENT \1
-u UUID \2
--cert default \
-c add
[--include PATH_TO_ZIP_FILE]3
AGENT es una dirección IP del agente que se va a registrar. | |
UUID es el identificador exclusivo del agente. | |
El archivo pasado por la opción |
Puede mostrar los agentes registrados mediante el comando reglist
en el host del verificador de la siguiente manera:
#
keylime_tenant -v 127.0.0.1 \
--cert default \
-c reglist
Para eliminar un agente registrado, especifique el agente mediante las opciones -t
y -u
, así como el comando -c
delete
de la siguiente manera:
#
keylime_tenant -v 127.0.0.1 \
-t AGENT \
-u UUID \
-c delete
5 Cargas útiles seguras de Keylime #
Keylime es una solución de certificación remota que permite monitorizar el estado de los nodos remotos.
5.1 ¿Qué es una carga útil segura? #
Una carga útil segura de Keylime permite entregar datos cifrados a agentes en buen estado. Las cargas útiles se utilizan para proporcionar claves, contraseñas, certificados, configuraciones o guiones que utiliza el agente de Keylime en una etapa posterior.
5.2 ¿Cómo funciona una carga útil segura? #
Una carga útil segura se entrega al agente en un archivo zip
que debe contener un guion de shell denominado autorun.sh
. El guion solo se ejecuta si el agente se ha registrado y verificado correctamente. Para entregar el archivo zip
, utilice la opción --include
del comando keylime_tenant
.
Por ejemplo, el guion autorun.sh
siguiente crea una estructura de directorios y copia las claves SSH. El archivo de reserva zip
relacionado debe incluir estas claves SSH.
>
cat autorun.sh
#!/bin/bash
mkdir -p /root/.ssh/
cp id_rsa* /root/.ssh/
chmod 600 /root/.ssh/id_rsa*
cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
6 Habilitación del seguimiento de IMA para Keylime #
Keylime es una solución de certificación remota que permite monitorizar el estado de los nodos remotos. La arquitectura de gestión de la integridad (IMA) es un subsistema de integridad del kernel que proporciona un medio para detectar cambios maliciosos en los archivos.
Cuando se utiliza la IMA, el kernel calcula un hash de los archivos a los que se ha accedido. El hash se utiliza para extender el PCR 10 en el TPM y también para registrar una lista de los archivos a los que se ha accedido. El verificador puede solicitar una cotización firmada al agente para que el PCR 10 obtenga los registros de todos los archivos a los que se ha accedido, incluidos los hash de archivo. A continuación, los verificadores comparan los archivos a los que se ha accedido con una lista de permisos local de archivos aprobados. Si alguno de los hash no se reconoce, se considera que el sistema es inseguro y se activa un evento de revocación.
Antes de que Keylime pueda recopilar información, es necesario habilitar IMA/EVM. Para habilitar el proceso, arranque un kernel del agente con los parámetros ima_appraise=log
y ima_policy=tcb
:
Actualice la opción
GRUB_CMDLINE_LINUX_DEFAULT
con los parámetros de/etc/default/grub
:GRUB_CMDLINE_LINUX_DEFAULT="ima_appraise=log ima_policy=tcb"
Regenere
grub.cfg
ejecutando:#
transactional-update grub.cfgRearranque el sistema.
El procedimiento anterior utiliza la directiva de IMA del kernel por defecto. Para evitar monitorizar demasiados archivos y, por lo tanto, crear registros largos, cree una nueva directiva personalizada. Encontrará más detalles en la Keylime documentation.
Para indicar los valores hash esperados, utilice la opción --allowlist
del comando keylime_tenant
al registrar el agente. Para ver los archivos excluidos u omitidos, utilice la opción --exclude
del comando keylime_tenant
:
#
keylime_tenant --allowlist
-v 127.0.0.1 \
-u UUID
7 Información adicional #
La página de inicio de Keylime está en https://keylime.dev.
La documentación más reciente de Keylime está en https://keylime.readthedocs.io/en/latest/.
Para obtener una descripción general de IMA/EVM, consulte https://en.opensuse.org/SDB:Ima_evm#Introduction.
Encontrará más información sobre cómo crear una nueva directiva de IMA del kernel en https://keylime-docs.readthedocs.io/en/latest/user_guide/runtime_ima.html.
8 Información legal #
Copyright © 2006 –2025 SUSE LLC y colaboradores. Reservados todos los derechos.
Está permitido copiar, distribuir y modificar este documento según los términos de la licencia de documentación gratuita GNU, versión 1.2 o (según su criterio) versión 1.3. Esta información de copyright y licencia deberán permanecer inalterados. En la sección titulada “GNU Free Documentation License” (Licencia de documentación gratuita GNU) se incluye una copia de la versión 1.2 de la licencia.
Para obtener información sobre las marcas comerciales de SUSE, consulte https://www.suse.com/company/legal/. Todas las marcas comerciales de otros fabricantes son propiedad de sus respectivas empresas. Los símbolos de marcas comerciales (®, ™, etc.) indican marcas comerciales de SUSE y sus filiales. Los asteriscos (*) indican marcas comerciales de otros fabricantes.
Toda la información recogida en esta publicación se ha compilado prestando toda la atención posible al más mínimo detalle. Sin embargo, esto no garantiza una precisión total. Ni SUSE LLC, ni sus filiales, ni los autores o traductores serán responsables de los posibles errores o las consecuencias que de ellos pudieran derivarse.