VM protegida

A VM protegida oferece uma integridade verificável às suas instâncias de VM do Compute Engine. Dessa forma, você tem certeza de que suas instâncias não foram comprometidas por malwares ou rootkits no nível do kernel ou da inicialização. A integridade verificável da VM protegida é alcançada por meio do uso da Inicialização segura, da Inicialização medida ativada pelo módulo de plataforma confiável virtual (vTPM, na sigla em inglês) e do monitoramento de integridade.

A VM protegida é a primeira oferta da iniciativa Cloud protegido. Essa iniciativa fornecerá uma base ainda mais segura para todo o Google Cloud Platform (GCP), oferecendo integridade verificável e recursos, como proteção ou bloqueio de vTPM, que ajudam a evitar a exportação de dados.

Inicialização segura

A Inicialização segura ajuda a garantir que o sistema execute apenas um software autêntico por meio da verificação da assinatura digital de todos os componentes de inicialização e da interrupção do 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, garantindo que o firmware da instância não seja modificado e estabelecendo a raiz de confiança para a Inicialização segura. A Inicialização segura usa o firmware UEFI (Unified Extensible Firmware Interface) 2.3.1, que armazena com segurança 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. Durante a sequência de inicialização, o firmware UEFI verifica a assinatura digital de cada componente de inicialização em um banco de dados de chaves aprovadas. Qualquer componente de inicialização que não esteja devidamente assinado ou que simplesmente não tenha sido assinado não poderá ser executado.

Se isso ocorrer, a instância da VM mostrará um estado de erro no Console do GCP, e o registro do console serial da instância da VM terá uma entrada que contém as strings 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 a falha, desative a Inicialização segura usando as instruções em Como modificar as opções da VM protegida para poder inicializar a instância de VM, diagnostique e resolva o problema e, em seguida, reative a Inicialização segura.

Módulo de plataforma confiável virtual (vTPM)

Um vTPM ou módulo de plataforma confiável virtualizado é um chip de computador especializado que você pode usar para proteger objetos, como chaves e certificados, usados para autenticar o acesso ao seu 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.

O vTPM da VM protegida ativa a Inicialização medida executando as medidas necessárias para criar uma linha de base de inicialização conhecida, chamada linha de base da política de integridade. A linha de base da política de integridade é comparada com as medidas das inicializações subsequentes da VM para determinar se algo mudou.

Também é possível usar o vTPM para proteger chaves secretas por meio de blindagem ou bloqueio. Consulte o projeto Go-TPM nos exemplos de linguagem do GitHub para Go, que ilustram como usar um vTPM para essa finalidade.

Para ativar a blindagem, receba os certificados de chave de endosso do vTPM. Você pode usar esses certificados para criptografar dados de modo que somente o vTPM possa lê-los e verificar as assinaturas feitas pelo vTPM. Para mais informações, consulte Como receber certificados de chave de endosso de vTPM.

Inicialização medida

Durante a Inicialização medida, um hash de cada componente (por exemplo, o firmware, carregador de inicialização ou kernel) é criado quando o componente é carregado. 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 a linha de base 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 suas 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 da linha de base da política de integridade (uma sequência de inicialização válida conhecida) e a 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 Stackdriver Monitoring e definir alertas sobre falhas de integridade. Você pode analisar os detalhes dos resultados de monitoramento de integridade no Stackdriver 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 limpo, o que exclui as chaves secretas armazenadas nele. Isso não afeta nenhum aspecto da VM protegida. Portanto, você só se importará com esse evento se usar o vTPM para proteger dados confidenciais conforme descrito em Módulo de plataforma confiável virtual (vTPM).
  • earlyBootReportEvent: identifica se a verificação de integridade da primeira sequência de inicialização foi aprovada e fornece detalhes sobre os valores de PCR da linha de base 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 mais recente foi aprovada e fornece detalhes sobre os valores de PCR da linha de base e da sequência de inicialização mais recente, que foram comparados para gerar essa determinação.
  • setShieldedVmIntegrityPolicy: registrado toda vez que você atualiza a linha de base 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 neste evento é o valor de bootCounter, que identifica quantas vezes a instância foi reiniciada.
  • updateShieldedVmConfig: registrado toda vez que você ativa ou desativa uma das opções da VM protegida.

A progressão de eventos típica que você vê nos registros é startupEvent, earlyBootReportEvent, lateBootReportEvent e, em algum momento, shutdownEvent, todos com o mesmo valor de bootCounter para identificá-los como descrevendo a mesma sequência de inicialização da instância de VM.

Se você atualizar a linha de base da política de integridade em resposta a uma falha de integridade esperada em uma instância de VM, verá eventos earlyBootReportEvent e lateBootReportEvent adicionais, que descrevem as novas medidas da linha de base da política de integridade. O exemplo a seguir mostra a sequência esperada:

  • startupEvent
  • earlyBootReportEvent que compara a linha de base original à sequência de inicialização mais recente (aprovada)
  • lateBootReportEvent que compara a linha de base original à sequência de inicialização mais recente (reprovada)
  • setShieldedVmIntegrityPolicy quando você atualiza a linha de base da política de integridade, que define a linha de base para as medidas capturadas da última sequência de inicialização
  • earlyBootReportEvent que compara a nova linha de base à sequência de inicialização mais recente (aprovada)
  • lateBootReportEvent que compara a nova linha de base à sequência de inicialização mais recente (aprovada)

Windows

earlyBootReportEvent

As informações importantes em earlyBootReportEvent estão na seção earlyBootReportEvent, que contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR) para a sequência de inicialização mais recente. Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento do componente usados pela sequência de inicialização mais recente. Eles são comparados com a linha de base da política de integridade (cujos valores são capturados na seção policyMeasurements) para determinar se houve alguma alteração na sequência de inicialização da instância de 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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ções GUID do disco. Ele não é usado ao validar a sequência de inicialização mais recente em relação à linha de base 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 à linha de base da política de integridade.

  • policyMeasurements: contém os valores de PCR da linha de base 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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.

Consulte Como determinar a causa de uma falha na validação da integridade de inicialização para saber como usar os valores de PCR earlyBootReportEvent para diagnosticar uma falha desse tipo.

lateBootReportEvent

As informações importantes em lateBootReportEvent estão na seção lateBootReportEvent, que contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR) para a sequência de inicialização mais recente. Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento do componente usados pela sequência de inicialização mais recente. Eles são comparados com a linha de base da política de integridade (cujos valores são capturados na seção policyMeasurements) para determinar se houve alguma alteração na sequência de inicialização da instância de 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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ções GUID do disco. Ele não é usado ao validar a sequência de inicialização mais recente em relação à linha de base 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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 à linha de base da política de integridade.

  • policyMeasurements: contém os valores de PCR da linha de base 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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.

Consulte Como determinar a causa de uma falha na validação da integridade de inicialização para saber como usar os valores de PCR de lateBootReportEvent para diagnosticar uma falha desse tipo.

Linux

earlyBootReportEvent

As informações importantes em earlyBootReportEvent estão na seção earlyBootReportEvent, que contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR) para a sequência de inicialização mais recente. Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento do componente usados pela sequência de inicialização mais recente. Eles são comparados com a linha de base da política de integridade (cujos valores são capturados na seção policyMeasurements) para determinar se houve alguma alteração na sequência de inicialização da instância de 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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ções GUID do disco. Ele não é usado ao validar a sequência de inicialização mais recente em relação à linha de base 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 à linha de base da política de integridade.

  • policyMeasurements: contém os valores de PCR da linha de base 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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.

Consulte Como determinar a causa de uma falha na validação da integridade de inicialização para saber como usar os valores de PCR earlyBootReportEvent para diagnosticar uma falha desse tipo.

lateBootReportEvent

As informações importantes em lateBootReportEvent estão na seção lateBootReportEvent, que contém as seguintes seções e elementos:

  • actualMeasurements: contém os valores do registro de configuração da plataforma (PCR) para a sequência de inicialização mais recente. Os valores de PCR identificam os componentes de inicialização e a ordem de carregamento do componente usados pela sequência de inicialização mais recente. Eles são comparados com a linha de base da política de integridade (cujos valores são capturados na seção policyMeasurements) para determinar se houve alguma alteração na sequência de inicialização da instância de 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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ções GUID do disco. Ele não é usado ao validar a sequência de inicialização mais recente em relação à linha de base 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 à linha de base da política de integridade.

  • policyMeasurements: contém os valores de PCR da linha de base 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 ao validar a sequência de inicialização mais recente em relação à linha de base 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.

Consulte Como determinar a causa de uma falha na validação da integridade de inicialização para saber como usar os valores de PCR de lateBootReportEvent para diagnosticar uma falha desse tipo.

Autorização do Cloud Identity and Access Management

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

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

  • compute.instances.updateShieldedVmConfig: permite ao usuário alterar as opções da VM protegida em uma instância de VM.
  • compute.instances.setShieldedVmIntegrityPolicy: permite ao usuário atualizar a linha de base da política de integridade em uma instância de VM.

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.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…