Criar imagens protegidas personalizadas

Este tópico descreve como preparar o disco, gerar certificados de segurança e ativar as funcionalidades necessárias do sistema operativo (SO) para criar uma imagem protegida personalizada.

Por predefinição, a VM protegida suporta o SO otimizado para contentores, várias distribuições do Linux e várias versões do Windows Server. No entanto, se precisar de imagens personalizadas para a sua aplicação, pode continuar a tirar partido da VM protegida.

A preparar o disco

A VM protegida baseia-se no firmware compatível com a interface de firmware extensível unificada (UEFI) para suportar funcionalidades como o arranque seguro. A VM protegida requer um esquema de GUID Partition Table (GPT); o registo de arranque principal (MBR) não é suportado.

O disco tem de ter, pelo menos, duas partições:

  • Partição de sistema EFI (ESP): 100 megabytes (MB) são suficientes para esta partição e é apenas uma sugestão. Pode criar uma partição maior se necessário. O único requisito para a ESP é que deve ser formatada com um sistema de ficheiros de tabela de alocação de ficheiros (FAT).
  • Partição do SO: o resto do disco. Esta partição contém o SO de arranque (Linux ou Windows). Não existe restrição quanto ao tamanho desta partição.

Pode criar mais partições de dados conforme necessário.

Copiar o SO para a partição do SO

Assim que o disco estiver formatado e com partições corretamente, copie os ficheiros do SO para a partição do SO. O SO tem um carregador de arranque que tem de estar localizado num caminho válido no ESP, conforme especificado na especificação UEFI: \EFI\Boot\bootx64.efi. Tenha em atenção que pode ser necessário copiar o carregador de arranque do SO para a localização indicada.

Para o Windows, existe um comando denominado bcdboot que pode ser usado para copiar o carregador de arranque do SO para a localização correta, além de outras ações que o Windows requer (como copiar o armazenamento BCD). Para mais informações, consulte as opções de linha de comandos do BCDBoot no Microsoft Hardware Dev Center.

Quando usa imagens de VMs protegidas, também pode tirar partido de duas funcionalidades de segurança adicionais: o Trusted Platform Module (TPM) virtual (vTPM) e a monitorização da integridade. As secções seguintes descrevem as vantagens destas funcionalidades e os requisitos do SO.

Módulo Trusted Platform virtual (vTPM)

Um módulo Trusted Platform é um dispositivo especializado para proteger objetos, como chaves e certificados, que usa para autenticar o acesso ao seu sistema. Nas imagens de VMs protegidas, são usadas versões virtualizadas de dispositivos TPM para ativar o arranque medido. Em resumo, o arranque medido garante a integridade do caminho de carregamento crítico do arranque e dos controladores do kernel. O vTPM e o arranque medido são abordados mais detalhadamente na documentação das VMs protegidas.

Para tirar partido do vTPM e do arranque medido, é necessário um controlador. As versões mínimas do SO com suporte do TPM 2.0 são:

  • Windows Server 2012
  • Versão 3.20 do Linux
  • Red Hat Enterprise Linux 7.3

Monitorização da integridade

A monitorização da integridade oferece uma forma de compreender e tomar decisões sobre o estado das suas instâncias de VM. A monitorização usa os dados gerados pelo Measured Boot para criar relatórios sobre a instância da VM. A documentação da VM protegida tem mais informações sobre a monitorização da integridade e a automatização das respostas a falhas de validação da integridade.

Para suportar a funcionalidade de monitorização da integridade da VM protegida, a imagem tem de produzir sinais de integridade:

  • O Windows gera sinais de integridade por predefinição.
  • O Linux tem de ter o módulo Integrity Measurement Architecture (IMA) instalado e ativado. O módulo tem de ter CONFIG_IMA_MEASURE_PCR_IDX definido como 10. Este é o valor predefinido para o módulo IMA.

Importar a imagem de disco para o Compute Engine

Depois de preparar a imagem, tem de a carregar para o Compute Engine. Para ver os passos necessários para carregar a imagem para o Trusted Cloud by S3NS, consulte o artigo Importar imagens de disco de arranque para o Compute Engine.

Configurar certificados para o arranque seguro

Quando adiciona uma imagem de VM protegida, é transmitido um conjunto de certificados e bases de dados públicos de arranque seguro para o Compute Engine. Estes ficheiros são armazenados nas variáveis UEFI correspondentes e usados para estabelecer relações de confiança entre a plataforma, o firmware e o SO. Os certificados são certificados X.509 codificados com Distinguished Encoding Rules (DER). As bases de dados podem ser um certificado ou um ficheiro binário não processado. Existem quatro valores no total:

  • Chave da plataforma (pk): uma chave usada para estabelecer a relação de confiança entre o proprietário da plataforma e o firmware. Só pode especificar uma chave da plataforma, e tem de ser um certificado X.509 válido.
  • Chave de troca de chaves (kek): uma chave usada para estabelecer uma relação de confiança entre o firmware e o SO. Pode especificar várias chaves para este valor.
  • Base de dados de chaves proibidas (dbx): uma base de dados de certificados que foram revogados e que farão com que o sistema pare de arrancar se um ficheiro de arranque for assinado com um deles. Pode especificar um ou vários valores para este valor.
  • Base de dados de chaves (db): uma base de dados de certificados fidedignos que podem ser usados para assinar ficheiros de arranque. Pode especificar um ou vários valores para este valor.

A especificação UEFI contém mais informações acerca destes valores e do respetivo funcionamento.

No exemplo seguinte, o OpenSSL é usado para criar as chaves e os certificados de arranque seguro.

  • Gere um par de chaves RSA de 2048 bits

    openssl genrsa -out secure-boot-key.rsa 2048
    
  • Gere um certificado X.509 autoassinado a partir da chave no formato DER

    openssl req -new -x509 -sha256 \
        -subj '/CN=secure-boot' \
        -key secure-boot-key.rsa \
        -outform DER \
        -out secure-boot-cert.pem
    

Adicionar a imagem protegida a Trusted Cloud by S3NS

Com a imagem e os certificados carregados, já pode adicionar a imagem ao Compute Engine. A imagem pode ser adicionada através da CLI Google Cloud ou da API Compute Engine.

gcloud

Adicione a imagem personalizada ao Compute Engine:

gcloud compute images create [IMAGE_NAME] \
    --source-disk [SOURCE_DISK] \
    --source-disk-zone [ZONE] \
    --platform-key-file= \
    --key-exchange-key-file= \
    --signature-database-file=, \
    --forbidden-database-file= \
    --guest-os-features="UEFI_COMPATIBLE[,WINDOWS]"

where:

  • [IMAGE_NAME] é o nome da nova imagem.
  • [SOURCE_DISK] é o disco a partir do qual quer criar a nova imagem.
  • [ZONE] é a zona onde o disco está localizado.

A opção WINDOWS para guest-os-features só é necessária quando usa uma imagem do Windows. Para mais informações sobre como criar uma imagem, consulte a referência gcloud create.

REST

Siga as instruções para criar uma imagem a partir de um disco persistente mas especifique o initial_state_config no corpo do pedido.

...
"sourceDisk": "/zones/[ZONE]/disks/[SOURCE_DISK]",

"initial_state_config": {
    "pk": {
        "content": [KEY],
        "fileType": [BIN,X509]
    },
    "keks": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbxs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ],
    "dbs": [
        {
            "content": [KEY],
            "fileType": [BIN,X509]
        },
        ...
    ]
}

Certificados predefinidos

Tenha em atenção que pk, keks, dbxs e dbs são campos opcionais. Se fornecer uma configuração do estado inicial, alguns ou todos estes campos podem ser anulados. Quando é criada uma nova instância a partir da imagem,o Trusted Cloud fornece um valor predefinido para PK, KEK, db e dbx, a menos que tenha sido definido um valor personalizado em qualquer campo não definido. Se não fornecer uma configuração de estado inicial (ou seja, a configuração está em falta e não apenas vazia), a imagem tem a configuração de estado inicial da imagem de origem.

Os valores predefinidos destes campos são:

  • PK: O certificado associado à chave privada predefinida criada pela Google.
  • KEK: o certificado KEK da Microsoft predefinido. Transferir da Microsoft: MicCorKEKCA2011_2011-06-24.crt
  • dbx: a lista de revogação DBX predefinida da Microsoft. Transfira a partir do Unified Extensible Firmware Interface Forum: ficheiro da lista de revogação da UEFI
  • db: Os dois certificados seguintes:
    • O Microsoft Windows Production PCA 2011 com um hash de certificado SHA-1 de 58 0a 6f 4c c4 e4 b6 69 b9 eb dc 1b 2b 3e 08 7b 80 d0 67 8d. Transferir da Microsoft: MicWinProPCA2011_2011-10-19.crt
    • A Microsoft Corporation UEFI CA 2011 com um hash do certificado SHA-1 de 46 de f6 3b 5c e6 1c f8 ba 0d e2 e6 63 9c 10 19 d0 ed 14 f3. Transferir da Microsoft: MicCorUEFCA2011_2011-06-27.crt

Tenha cuidado, uma vez que a adição dos seus próprios certificados substitui os predefinidos, em vez de os unir aos que fornece.