VM protegida

A VM protegida oferece uma integridade verificável das instâncias de VM do Compute Engine. Assim, você tem a garantia de que elas não foram comprometidas por malwares ou por rootkits no nível do kernel ou da inicialização. Para verificar a integridade da VM protegida, é necessário usar a Inicialização segura, a Inicialização medida ativada pelo módulo de plataforma confiável virtual (vTPM, na sigla em inglês) e o monitoramento de integridade.

A VM protegida é a primeira oferta da iniciativa Shielded Cloud. A iniciativa Shielded Cloud precisa fornecer uma base ainda mais segura para todo o Google Cloud (GCP), fornecendo integridade verificável e oferecendo atributos, como proteção vTPM ou bloqueio (em inglês), que ajudam a evitar a exfiltração de dados.

Este tópico descreve a VM protegida. Para informações sobre como modificar as opções de VM protegida, consulte Como modificar opções de VM protegida.

Inicialização segura

A Inicialização segura ajuda a garantir que o sistema execute apenas um software autêntico. Para isso, ela verifica a assinatura digital de todos os componentes de inicialização e interrompe o processo de inicialização se a verificação da assinatura falhar.

As instâncias de VM protegidas executam um firmware assinado e verificado usando a autoridade de certificação do Google. Assim, garantem que o firmware da instância não seja modificado e estabelecem a raiz de confiança para a inicialização segura. A Interface Unificada de Firmware Extensível (UEFI, na sigla em inglês) 2.3.1 [links em inglês] gerencia com segurança os certificados que contêm as chaves usadas pelos fabricantes de software para assinar o firmware do sistema, o carregador de inicialização do sistema e todos os binários que eles carregam. As instâncias de VM protegidas usam o firmware UEFI.

Em cada inicialização, o firmware UEFI verifica a assinatura digital de cada componente de inicialização em relação às chaves aprovadas armazenadas com segurança. Não será possível executar qualquer componente de inicialização que não esteja devidamente assinado ou que simplesmente não tenha sido assinado.

Se isso ocorrer, o registro do console serial da instância de VM terá as entradas UEFI: falha ao carregar imagem e Status: violação de segurança, além de uma descrição da opção de inicialização que falhou. Para solucionar essa falha, desative a Inicialização segura seguindo as instruções em Como modificar as opções da VM protegida para poder inicializar a instância de VM e diagnosticar e resolver o problema. Em seguida, reative a Inicialização segura.

Módulo de plataforma confiável virtual (vTPM, na sigla em inglês)

Um vTPM ou módulo de plataforma confiável (em inglês) virtualizado é um ícone de computador especializado que pode ser usado para proteger objetos, como chaves e certificados, utilizados para autenticar o acesso ao sistema. O vTPM da VM protegida é totalmente compatível com a especificação 2.0 da biblioteca do Trusted Computing Group (TPM) e usa o BoringSSL, que é validado pelo FIPS 140-2 L1 (links em inglês).

O vTPM da VM protegida ativa a Inicialização medida executando as medições necessárias para criar um valor de referência de inicialização válido, chamado valor de referência da política de integridade. O valor de referência da política de integridade é comparado com as medidas das inicializações subsequentes da VM para verificar se algo mudou.

Também é possível usar o vTPM para proteger chaves secretas por meio de proteção ou bloqueio (em inglês). Consulte o projeto Go-TPM (em inglês) nos exemplos de linguagem do GitHub para Go, que ilustram como usar um vTPM para essa finalidade.

Inicialização medida

Durante a Inicialização medida, um hash de cada componente (por exemplo, o firmware, carregador de inicialização ou kernel) é criado ao carregar o componente. Esse hash é então concatenado e refeito com os hashes de quaisquer componentes que já tenham sido carregados, como ilustrado abaixo:

Processo de Inicialização medida.

Essas informações identificam os componentes que foram carregados e a ordem de carregamento.

Na primeira vez que você inicializa uma instância de VM, a Inicialização medida cria o valor de referência da política de integridade a partir do primeiro conjunto dessas medidas e armazena esses dados com segurança. Cada vez que a instância da VM é inicializada depois disso, essas medidas são registradas novamente e armazenadas na memória segura até a próxima reinicialização. Ter esses dois conjuntos de medidas permite o monitoramento de integridade, que você pode usar para determinar se houve alterações na sequência de inicialização de uma instância de VM.

Monitoramento de integridade

O monitoramento de integridade ajuda a entender e tomar decisões sobre o estado das instâncias de VM.

O monitoramento de integridade depende das medidas criadas pela Inicialização segura, que usa registros de configuração de plataforma (PCRs, na sigla em inglês) para armazenar informações sobre os componentes e a ordem de carregamento dos componentes tanto do valor de referência da política de integridade (uma sequência de inicialização válida conhecida) quanto da sequência de inicialização mais recente.

O monitoramento de integridade compara as medidas de inicialização mais recentes com a linha de base da política de integridade e retorna um par de resultados de aprovação/reprovação, dependendo da correspondência ou não deles, um com a primeira sequência de inicialização e o outro com a sequência de inicialização posterior. A primeira inicialização é a sequência que vai desde quando o firmware UEFI inicia até o momento em que ele transmite o controle para o carregador de inicialização. A inicialização posterior é a sequência que vai desde o carregador de inicialização até o momento em que ele transmite o controle para o kernel do sistema operacional. Se alguma parte da sequência de inicialização mais recente não corresponder à linha de base, você receberá uma falha de validação de integridade.

Se a falha for esperada, por exemplo, se você aplicou uma atualização do sistema nessa instância da VM, atualize a linha de base da política de integridade. A atualização da linha de base da política de integridade define a linha de base para as medidas capturadas da sequência de inicialização mais recente. Se a falha não for esperada, pare a instância da VM e investigue o motivo.

É possível ver os relatórios de integridade no Cloud Monitoring e definir alertas sobre falhas de integridade. Você pode analisar os detalhes dos resultados de monitoramento de integridade no Cloud Logging. Para mais informações, consulte Como monitorar a integridade em instâncias de VM protegidas.

Eventos de monitoramento de integridade

A VM protegida cria entradas de registro para os seguintes tipos de evento:

  • clearTPMEvent: identifica se o vTPM foi apagado, o que exclui as chaves secretas armazenadas nele. Isso não afeta nenhum aspecto da VM protegida. Assim, você só se importará com esse evento se usar o vTPM para proteger dados confidenciais conforme descrito no Módulo de plataforma confiável virtual (vTPM, na sigla em inglês).
  • earlyBootReportEvent: identifica se a verificação de integridade da sequência de inicialização antecipada foi aprovada, além de fornecer detalhes sobre os valores de PCR do valor de referência e da sequência de inicialização mais recente, que foram comparados para gerar essa determinação.
  • lateBootReportEvent: identifica se a verificação de integridade da sequência de inicialização atrasada foi aprovada, além de fornecer detalhes sobre os valores de PCR do valor de referência e da sequência de inicialização mais recente, que foram comparados para gerar essa determinação.
  • setShieldedInstanceIntegrityPolicy: registrado toda vez que você atualiza o valor de referência da política de integridade.
  • shutdownEvent: registrado toda vez que a instância de VM é interrompida.
  • startupEvent: registrado toda vez que a instância de VM é iniciada. A informação interessante nesse evento é o valor bootCounter, que identifica quantas vezes essa instância foi reiniciada.
  • updateShieldedInstanceConfig: registrado toda vez que você ativa ou desativa uma das opções de VM protegida.

A progressão de eventos típica que você vê nos registros é startupEvent, earlyBootReportEvent, lateBootReportEvent e, por fim, shutdownEvent, todos com o mesmo valor bootCounter para identificar que descrevem a mesma sequência de inicialização da instância de VM.

Se você atualizar o valor de referência da política de integridade em resposta a uma falha de integridade esperada em uma instância de VM, verá outros eventos earlyBootReportEvent e lateBootReportEvent que descrevem os novos valores de referência da política de integridade. O exemplo a seguir mostra a sequência esperada:

  • startupEvent
  • earlyBootReportEvent que compara o valor de referência original com a sequência de inicialização mais recente (aprovada)
  • lateBootReportEvent que compara o valor de referência original com a sequência de inicialização mais recente (reprovada)
  • setShieldedInstanceIntegrityPolicy quando você atualiza o valor de referência da política de integridade, que define o valor de referência para as medidas capturadas da última sequência de inicialização.
  • earlyBootReportEvent que compara um novo valor de referência com uma sequência de inicialização mais recente (aprovada)
  • lateBootReportEvent que compara um novo valor de referência com uma sequência de inicialização mais recente (aprovada)

Windows

earlyBootReportEvent

earlyBootReportEvent contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR, na sigla em inglês) para a sequência de inicialização mais recente (link em inglês). Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento dos componentes usados pela sequência de inicialização mais recente. Eles são comparados com o valor de referência da política de integridade, capturados na seção policyMeasurements, para determinar se houve mudança na sequência de inicialização da instância da VM. A seção actualMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o código do gerenciador de inicialização UEFI e as tentativas de inicialização.
    • 2: contém o valor de PCR5, com informações sobre a tabela de partição GUID do disco. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 3: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.
  • policyEvaluationPassed: identifica se determinada seção da sequência de inicialização foi aprovada na verificação, em relação aos valores de referência da política de integridade.

  • policyMeasurements: contém os valores de PCR para os valores de referência da política de integridade. A seção policyMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o código do gerenciador de inicialização UEFI e as tentativas de inicialização.
    • 2: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.

Para saber como usar valores de PCR earlyBootReportEvent para diagnosticar uma falha na validação da integridade de inicialização, consulte Como determinar a causa da falha de validação da integridade de inicialização.

lateBootReportEvent

lateBootReportEvent contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR, na sigla em inglês) para a sequência de inicialização mais recente (link em inglês). Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento dos componentes usados pela sequência de inicialização mais recente. Eles são comparados com o valor de referência da política de integridade, capturados na seção policyMeasurements, para determinar se houve mudança na sequência de inicialização da instância da VM. A seção actualMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o código do gerenciador de inicialização UEFI e as tentativas de inicialização.
    • 2: contém o valor de PCR5, com informações sobre a tabela de partição GUID do disco. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 3: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.
    • 4: contém o valor de PCR11, com informações sobre o controle de acesso da criptografia de unidade de disco BitLocker.
    • 5: contém o valor de PCR12, com informações sobre eventos de dados. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 6: contém o valor de PCR13, com informações sobre o kernel do Windows e os drivers de inicialização.
    • 7: contém o valor de PCR14, com informações sobre as autoridades de inicialização do Windows.
  • policyEvaluationPassed: identifica se determinada seção da sequência de inicialização foi aprovada na verificação, em relação aos valores de referência da política de integridade.

  • policyMeasurements: contém os valores de PCR para os valores de referência da política de integridade. A seção policyMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o código do gerenciador de inicialização UEFI e as tentativas de inicialização.
    • 2: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.
    • 3: contém o valor de PCR11, com informações sobre o controle de acesso da criptografia de unidade de disco BitLocker.
    • 4: contém o valor de PCR13, com informações sobre o kernel do Windows e os drivers de inicialização.
    • 5: contém o valor de PCR14, com informações sobre as autoridades de inicialização do Windows.

Para saber como usar valores de PCR lateBootReportEvent para diagnosticar uma falha na validação da integridade de inicialização, consulte Como determinar a causa da falha de validação da integridade de inicialização.

Linux

earlyBootReportEvent

earlyBootReportEvent contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR, na sigla em inglês) para a sequência de inicialização mais recente (link em inglês). Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento dos componentes usados pela sequência de inicialização mais recente. Eles são comparados com o valor de referência da política de integridade, capturados na seção policyMeasurements, para determinar se houve mudança na sequência de inicialização da instância da VM. A seção actualMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o shim do sistema operacional.
    • 2: contém o valor de PCR5, com informações sobre a tabela de partição GUID do disco. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 3: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.
  • policyEvaluationPassed: identifica se determinada seção da sequência de inicialização foi aprovada na verificação, em relação aos valores de referência da política de integridade.

  • policyMeasurements: contém os valores de PCR para os valores de referência da política de integridade. A seção policyMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o shim do sistema operacional.
    • 2: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.

Para saber como usar valores de PCR earlyBootReportEvent para diagnosticar uma falha na validação da integridade de inicialização, consulte Como determinar a causa da falha de validação da integridade de inicialização.

lateBootReportEvent

lateBootReportEvent contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR, na sigla em inglês) para a sequência de inicialização mais recente (link em inglês). Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento dos componentes usados pela sequência de inicialização mais recente. Eles são comparados com o valor de referência da política de integridade, capturados na seção policyMeasurements, para determinar se houve mudança na sequência de inicialização da instância da VM. A seção actualMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o carregador de inicialização do segundo estágio e o kernel.
    • 2: contém o valor de PCR5, com informações sobre a tabela de partição GUID do disco. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 3: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.
  • policyEvaluationPassed: identifica se determinada seção da sequência de inicialização foi aprovada na verificação, em relação aos valores de referência da política de integridade.

  • policyMeasurements: contém os valores de PCR para os valores de referência da política de integridade. A seção policyMeasurements contém os seguintes elementos:

    • 0: contém o valor de PCR0, com informações sobre componentes de firmware. Esse PCR não é implementado e contém um valor estático. Ele não é usado na validação da sequência de inicialização mais recente, em relação aos valores de referência da política de integridade.
    • 1: contém o valor de PCR4, com informações sobre o carregador de inicialização do segundo estágio e o kernel.
    • 2: contém o valor de PCR7, com informações sobre a política de Inicialização segura da instância.

Para saber como usar valores de PCR lateBootReportEvent para diagnosticar uma falha na validação da integridade de inicialização, consulte Como determinar a causa da falha de validação da integridade de inicialização.

Autorização do gerenciamento de identidade e acesso

A VM protegida usa o IAM para autorização.

As operações da VM protegida usam as seguintes permissões do Compute Engine:

  • compute.instances.updateShieldedInstanceConfig: permite que o usuário mude as opções da VM protegida em uma instância de VM.
  • compute.instances.setShieldedInstanceIntegrityPolicy: permite que o usuário atualize o valor de referência da política de integridade em uma instância de VM.
  • compute.instances.getShieldedInstanceIdentity: permite que o usuário recupere informações de chaves de endosso do vTPM.

As permissões da VM protegida são concedidas aos seguintes papéis do Compute Engine:

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

Também é possível conceder permissões da VM protegida a papéis personalizados.

Restrições da política da organização para VMs protegidas

É possível definir a restrição constraints/compute.requireShieldedVmda política da organização como True para exigir que as instâncias de VM do Compute Engine criadas na sua organização sejam instâncias de VM protegida.

Saiba como definir a restrição constraints/compute.requireShieldedVm em Como usar restrições booleanas na política da organização. Você precisa ser um administrador de políticas da organização para definir uma restrição.

A seguir