Ir al contenidoIr a la navegación de la página: página anterior [tecla de acceso p]/página siguiente [tecla de acceso n]
documentation.suse.com / Protección de SUSE Linux Micro mediante Keylime

Protección de SUSE Linux Micro mediante Keylime

Fecha de publicación: 20 Mar 2025
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 comando quote 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).

Nota
Nota

Por 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.

Nota
Nota

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.

  1. Identifique la imagen de la carga de trabajo de Keylime.

    # podman search keylime
    [...]
    registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane
  2. Extraiga la imagen del registro.

    # podman pull\
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest
  3. Cree 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:latest
  4. Inicie el contenedor y los servicios relacionados.

    # podman container runlabel run \
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest

    Se 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.

Sugerencia
Sugerencia

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/
Sugerencia
Sugerencia

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:

  1. Instale el paquete rust-keylime de la siguiente manera:

    # transactional-update pkg in rust-keylime

    A continuación, rearranque el sistema.

  2. Ajuste la configuración por defecto del agente.

    1. 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.d
    2. Cree 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
       EOF

      1

      El identificador exclusivo se genera cada vez que se ejecuta el agente. Sin embargo, puede definir un valor específico mediante esta opción.

      2

      Dirección IP del registrador.

      3

      Dirección IP del verificador.

    3. Cambie el propietario del directorio /etc/keylime/ a keylime:tss:

      # chown -R keylime:tss /etc/keylime
    4. Cambie los permisos del directorio /etc/keylime/:

      # chmod -R 600 /etc/keylime
  3. Copie los certificados generados por la CA en el nodo del agente. En el nodo del agente, haga lo siguiente:

    1. Prepare un directorio para el certificado:

      # mkdir -p /var/lib/keylime/cv_ca
    2. Copie el certificado en el agente:

      # scp CERT_SERVER_ADDRESS:/var/lib/keylime/cv_ca/cacert.crt /var/lib/keylime/cv_ca
    3. Cambie el propietario del certificado a keylime:tss:

      # chown -R keylime:tss /var/lib/keylime/cv_ca
  4. 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

1

AGENT es una dirección IP del agente que se va a registrar.

2

UUID es el identificador exclusivo del agente.

3

El archivo pasado por la opción include se utiliza para entregar datos de carga útil secreta al agente. Para obtener información detallada, consulte la Sección 5, “Cargas útiles seguras de Keylime”.

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:

  1. 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"
  2. Regenere grub.cfg ejecutando:

    # transactional-update grub.cfg
  3. Rearranque 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