VM blindada

Las máquinas virtuales (VM) blindadas te permiten verificar la integridad de tus instancias de VM de Compute Engine. De este modo, no tienes que preocuparte de la protección de tus instancias frente al software malicioso y los rootkits en los niveles de arranque y kernel. Esta integridad se consigue gracias al arranque seguro, al arranque medido con módulo de plataforma segura virtual (vTPM) y a la supervisión de integridad.

Las VM blindadas son el primer servicio de Shielded Cloud, una iniciativa que tiene como objetivo reforzar los cimientos de Google Cloud Platform (GCP) mediante la integridad verificable que proporciona y las funciones que ofrece. Por ejemplo, el sellado y el blindaje de vTPM, que ayudan a evitar la filtración externa de datos.

Arranque seguro

El arranque seguro ayuda a asegurar que el sistema solo ejecute software original. Para ello, verifica la firma digital de todos los componentes del arranque y detiene el proceso si se produce algún error en dicha verificación.

Las instancias de VM blindadas utilizan un firmware que ha firmado y verificado la autoridad de certificación de Google. De este modo, se asegura que el firmware de las instancias no se ha modificado y que el arranque seguro tiene una raíz de confianza. El firmware Unified Extensible Firmware Interface (UEFI) 2.3.1 gestiona de forma segura los certificados que contienen las claves que utilizan los fabricantes de software para firmar el firmware del sistema, el bootloader del sistema y cualquier binario que carguen. Las instancias de VM blindadas usan firmware de UEFI.

En cada inicio, el firmware de UEFI coteja la firma digital de cada componente del arranque con un almacén seguro de claves aprobadas. De esta forma, los componentes que no estén debidamente firmados no se ejecutarán.

Si esto ocurre, la instancia de máquina virtual mostrará un estado de error en la consola de GCP. Además, el registro de la consola en serie tendrá una entrada con las cadenas UEFI: Fail to load image y Status: Security Violation, que aparecerá junto con una descripción de la opción de arranque que no se ejecutó. Para solucionar el error, inhabilita el arranque seguro siguiendo las instrucciones que encontrarás en Modificar las opciones de VM blindadas. De esta forma, podrás iniciar la instancia de máquina virtual, diagnosticar el error, resolverlo y, finalmente, volver a habilitar el arranque seguro.

Módulo de plataforma segura virtual

Un vTPM, o módulo de plataforma segura virtual, es un chip informático especializado que puedes utilizar para proteger los objetos con los que autenticas el acceso a tu sistema, como claves y certificados. El vTPM para VM blindadas es totalmente compatible con la versión 2.0 de la especificación de la biblioteca Trusted Computing Group (TPM) y utiliza BoringSSL, que está validado según el estándar FIPS 140-2 de nivel 1.

El vTPM para VM blindadas habilita el arranque medido realizando las mediciones necesarias con el objetivo de crear un valor de referencia correcto para el arranque. Dicho valor, que se denomina valor de referencia de la política de integridad, se compara con las mediciones de los arranques posteriores de las máquinas virtuales para determinar si se ha producido algún cambio.

También puedes usar el vTPM para proteger secretos mediante el blindaje o el sellado. Consulta el proyecto Go-TPM en GitHub, donde encontrarás ejemplos en lenguaje Go que muestran cómo utilizar un vTPM con este propósito.

Arranque medido

Durante el arranque medido, se crea un hash de cada componente que se carga (por ejemplo, el firmware, el bootloader o el kernel), y dicho hash se concatena y se vuelve a combinar con los hashes de los componentes que se hayan cargado. A continuación se ilustra todo el proceso:

Proceso de arranque medido

Esta información describe tanto los componentes que se cargaron como el orden en que sucedió:

Cuando inicias una instancia de máquina virtual por primera vez, el arranque medido crea un valor de referencia de la política de integridad a partir del primer conjunto de mediciones y almacena los datos de forma segura. Estas mediciones volverán a realizarse después de cada arranque y se almacenarán en una memoria segura hasta el próximo reinicio. Con estos dos conjuntos de mediciones se habilita la supervisión de integridad, que te permite determinar si se han producido cambios en la secuencia de arranque de una instancia de máquina virtual.

Supervisión de integridad

Con la supervisión de integridad puedes consultar el estado de tus instancias de máquina virtual y hacer los cambios que consideres oportunos.

Se trata de un proceso basado en las mediciones que ha creado el arranque medido. Utiliza los registros de configuración de la plataforma (PCR) para almacenar la información de los componentes y del orden de carga, tanto del valor de referencia de la política de integridad (una secuencia de arranque correcta) como de la secuencia de arranque más reciente.

La supervisión de integridad compara las mediciones de arranque más recientes con las correspondientes al valor de referencia de la política de integridad. Si ambas coinciden, el sistema devolverá un resultado positivo; de lo contrario, devolverá un error. Esta comparación se realiza sobre la secuencia de arranque temprano y sobre la secuencia de arranque tardío. El arranque temprano es la secuencia de arranque que abarca el proceso desde que se inicia el firmware de UEFI hasta que el control pasa al bootloader. El arranque tardío comprende el desarrollo hasta que el control pasa del bootloader al kernel del sistema operativo. Si las mediciones de alguna de estas etapas no se corresponden con las del valor de referencia, se producirá un fallo en la validación de integridad.

Si se espera que tenga lugar un fallo (por ejemplo, si has actualizado el sistema de la instancia de máquina virtual), deberías actualizar el valor de referencia de la política de integridad. Cuando lo hagas, el valor adoptará las mediciones registradas en la secuencia de arranque más reciente. Si no es previsible, deberías detener la instancia de máquina virtual e investigar la causa del fallo.

En Stackdriver Monitoring, puedes consultar los informes de integridad y configurar alertas sobre fallos de integridad. Para revisar los resultados de la supervisión de integridad, accede a Stackdriver Logging. Para obtener más información, consulta el artículo sobre supervisión de integridad para instancias de máquina virtual blindada.

Eventos de la supervisión de integridad

Las VM blindadas crean entradas de registro cuando se producen los siguientes tipos de eventos:

  • clearTPMEvent: indica si el vTPM se ha borrado, en cuyo caso se eliminan todos los secretos que almacenaba. Este evento no afecta a ningún aspecto de la VM blindada. Por tanto, solo deberás preocuparte si utilizas el vTPM para blindar datos sensibles, como se describe en la sección Módulo de plataforma segura virtual (vTPM).
  • earlyBootReportEvent: indica si la secuencia de arranque temprano superó la comprobación de integridad. Además, proporciona detalles sobre los valores PCR del valor de referencia y de la secuencia de arranque más reciente que se compararon para realizar esa determinación.
  • lateBootReportEvent: indica si la secuencia de arranque tardío superó la comprobación de integridad. Además, proporciona detalles sobre los valores PCR del valor de referencia y de la secuencia de arranque más reciente que se compararon para realizar esa determinación.
  • setShieldedInstanceIntegrityPolicy: aparece en el registro cada vez que actualizas el valor de referencia de la política de integridad.
  • shutdownEvent: aparece en el registro cada vez que se detiene la instancia de máquina virtual.
  • startupEvent: aparece en el registro cada vez que se inicia la instancia de máquina virtual. La información más importante de este evento es el valor bootCounter, que indica cuántas veces se ha reiniciado la instancia.
  • updateShieldedInstanceConfig: aparece en el registro cada vez que habilitas o inhabilitas una de las opciones de VM blindada.

La progresión de eventos que verás normalmente es startupEvent, earlyBootReportEvent, lateBootReportEvent y, por último, shutdownEvent. Todos tendrán el mismo valor bootCounter para indicar que describen la misma secuencia de arranque de la instancia de máquina virtual.

Si actualizas el valor de referencia de la política de integridad para corregir un fallo de integridad previsible en una instancia de máquina virtual, verás también los eventos earlyBootReportEvent y lateBootReportEvent, que describen las nuevas mediciones del valor de referencia de la política de integridad. A continuación, se muestra un ejemplo de la secuencia que debería aparecer:

  • startupEvent
  • earlyBootReportEvent: compara el valor de referencia original con el correspondiente a la última secuencia de arranque (las mediciones coinciden).
  • lateBootReportEvent: compara el valor de referencia original con el correspondiente a la última secuencia de arranque (las mediciones no coinciden).
  • setShieldedInstanceIntegrityPolicy: cuando actualizas el valor de referencia de la política de integridad, que establece el valor según las mediciones registradas en la secuencia de arranque más reciente.
  • earlyBootReportEvent: compara el nuevo valor de referencia con el correspondiente a la última secuencia de arranque (las mediciones coinciden).
  • lateBootReportEvent: compara el nuevo valor de referencia con el correspondiente a la última secuencia de arranque (las mediciones coinciden).

Windows

earlyBootReportEvent

La información más importante de earlyBootReportEvent se encuentra en la sección earlyBootReportEvent, que cuenta con los siguientes elementos y secciones:

  • actualMeasurements: contiene los valores del registro de configuración de la plataforma (PCR) de la última secuencia de arranque. Con estos valores se identifican los componentes que se usaron en la última secuencia de arranque, así como su orden de carga, y se comparan con el valor de referencia de la política de integridad (cuyos valores se almacenan en la sección policyMeasurements) para determinar si se ha producido algún cambio en la secuencia de arranque de la instancia de máquina virtual. La sección actualMeasurements contiene los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre el código del gestor de arranque de UEFI y sobre los intentos de arranque.
    • 2: contiene el valor de PCR5, que incluye información sobre la tabla de particiones GUID del disco. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 3: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.
  • policyEvaluationPassed: indica si una determinada sección de la secuencia de arranque ha superado la verificación del valor de referencia de la política de integridad.

  • policyMeasurements: contiene los valores PCR del valor de referencia de la política de integridad. La sección policyMeasurements incluye los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre el código del gestor de arranque de UEFI y sobre los intentos de arranque.
    • 2: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.

Si quieres obtener más información sobre cómo usar los valores PCR de earlyBootReportEvent para diagnosticar los fallos de validación de integridad, consulta la sección acerca de cómo determinar la causa de los fallos de validación de integridad.

lateBootReportEvent

La información más importante de lateBootReportEvent se encuentra en la sección lateBootReportEvent, que cuenta con los siguientes elementos y secciones:

  • actualMeasurements: contiene los valores del registro de configuración de la plataforma (PCR) de la última secuencia de arranque. Con estos valores se identifican los componentes que se usaron en la última secuencia de arranque, así como su orden de carga, y se comparan con el valor de referencia de la política de integridad (cuyos valores se almacenan en la sección policyMeasurements) para determinar si se ha producido algún cambio en la secuencia de arranque de la instancia de máquina virtual. La sección actualMeasurements contiene los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre el código del gestor de arranque de UEFI y sobre los intentos de arranque.
    • 2: contiene el valor de PCR5, que incluye información sobre la tabla de particiones GUID del disco. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 3: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.
    • 4: contiene el valor de PCR11, que incluye información sobre el control de acceso de Cifrado de unidad BitLocker.
    • 5: contiene el valor de PCR12, que incluye información sobre eventos de datos. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 6: contiene el valor de PCR13, que incluye información sobre el kernel de Windows y los controladores de arranque.
    • 7: contiene el valor de PCR14, que incluye información sobre las autoridades de arranque de Windows.
  • policyEvaluationPassed: indica si una determinada sección de la secuencia de arranque ha superado la verificación del valor de referencia de la política de integridad.

  • policyMeasurements: contiene los valores PCR del valor de referencia de la política de integridad. La sección policyMeasurements incluye los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre el código del gestor de arranque de UEFI y sobre los intentos de arranque.
    • 2: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.
    • 3: contiene el valor de PCR11, que incluye información sobre el control de acceso de Cifrado de unidad BitLocker.
    • 4: contiene el valor de PCR13, que incluye información sobre el kernel de Windows y los controladores de arranque.
    • 5: contiene el valor de PCR14, que incluye información sobre las autoridades de arranque de Windows.

Si quieres obtener más información sobre cómo usar los valores PCR de lateBootReportEvent para diagnosticar los fallos de validación de integridad, consulta la sección acerca de cómo determinar la causa de los fallos de validación de integridad.

Linux

earlyBootReportEvent

La información más importante de earlyBootReportEvent se encuentra en la sección earlyBootReportEvent, que cuenta con los siguientes elementos y secciones:

  • actualMeasurements: contiene los valores del registro de configuración de la plataforma (PCR) de la última secuencia de arranque. Con estos valores se identifican los componentes que se usaron en la última secuencia de arranque, así como su orden de carga, y se comparan con el valor de referencia de la política de integridad (cuyos valores se almacenan en la sección policyMeasurements) para determinar si se ha producido algún cambio en la secuencia de arranque de la instancia de máquina virtual. La sección actualMeasurements contiene los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre las correcciones de compatibilidad del sistema operativo.
    • 2: contiene el valor de PCR5, que incluye información sobre la tabla de particiones GUID del disco. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 3: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.
  • policyEvaluationPassed: indica si una determinada sección de la secuencia de arranque ha superado la verificación del valor de referencia de la política de integridad.

  • policyMeasurements: contiene los valores PCR del valor de referencia de la política de integridad. La sección policyMeasurements incluye los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre las correcciones de compatibilidad del sistema operativo.
    • 2: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.

Si quieres obtener más información sobre cómo usar los valores PCR de earlyBootReportEvent para diagnosticar los fallos de validación de integridad, consulta la sección acerca de cómo determinar la causa de los fallos de validación de integridad.

lateBootReportEvent

La información más importante de lateBootReportEvent se encuentra en la sección lateBootReportEvent, que cuenta con los siguientes elementos y secciones:

  • actualMeasurements: contiene los valores del registro de configuración de la plataforma (PCR) de la última secuencia de arranque. Con estos valores se identifican los componentes que se usaron en la última secuencia de arranque, así como su orden de carga, y se comparan con el valor de referencia de la política de integridad (cuyos valores se almacenan en la sección policyMeasurements) para determinar si se ha producido algún cambio en la secuencia de arranque de la instancia de máquina virtual. La sección actualMeasurements contiene los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre el kernel y el bootloader de la segunda fase.
    • 2: contiene el valor de PCR5, que incluye información sobre la tabla de particiones GUID del disco. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 3: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.
  • policyEvaluationPassed: indica si una determinada sección de la secuencia de arranque ha superado la verificación del valor de referencia de la política de integridad.

  • policyMeasurements: contiene los valores PCR del valor de referencia de la política de integridad. La sección policyMeasurements incluye los siguientes elementos:

    • 0: contiene el valor de PCR0, que incluye información sobre componentes del firmware. Este PCR no se implementa, sino que contiene un valor estático. No se utiliza para validar la última secuencia de arranque en comparación con el valor de referencia de la política de integridad.
    • 1: contiene el valor de PCR4, que incluye información sobre el kernel y el bootloader de la segunda fase.
    • 2: contiene el valor de PCR7, que incluye información sobre la política de arranque seguro de la instancia.

Si quieres obtener más información sobre cómo usar los valores PCR de lateBootReportEvent para diagnosticar los fallos de validación de integridad, consulta la sección acerca de cómo determinar la causa de los fallos de validación de integridad.

Autorización de Gestión de Identidades y Accesos de Cloud

Las VM blindadas usan Cloud IAM para realizar la autorización.

Las operaciones de las VM blindadas utilizan los siguientes permisos de Compute Engine:

  • compute.instances.updateShieldedInstanceConfig: permite al usuario cambiar las opciones de VM blindada en una instancia de máquina virtual.
  • compute.instances.setShieldedInstanceIntegrityPolicy: permite al usuario actualizar el valor de referencia de la política de integridad en una instancia de máquina virtual.
  • compute.instances.getShieldedInstanceIdentity: permite al usuario mostrar información sobre las claves de aprobación del vTPM.

Los permisos de las VM blindadas se conceden a las siguientes funciones de Compute Engine:

  • roles/compute.instanceAdmin.v1
  • roles/compute.securityAdmin

También puedes conceder permisos a los roles personalizados.

Restricciones de la política de organización para VM blindadas

Puedes establecer la restricción de la política de organización constraints/compute.requireShieldedVm en True, de modo que cualquier instancia de máquina virtual de Compute Engine que se cree en tu organización deberá ser una instancia de VM blindada.

Obtén más información sobre cómo configurar la restricción constraints/compute.requireShieldedVm en la sección acerca de cómo usar restricciones booleanas en la política de organización. Para poder establecer una restricción, necesitas ser administrador de la política de organización.

Siguientes pasos

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...