Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Protegendo o SLE Micro com o Keylime

Protegendo o SLE Micro com o Keylime

Data de Publicação: 12/12/2024
O QUE É?

Keylime é um atestado de boot remoto com base no TPM e uma medida de integridade de runtime.

POR QUÊ?

O artigo descreve como configurar e executar o Keylime no SLE Micro.

DEDICAÇÃO

A leitura do artigo leva aproximadamente 25 minutos.

META

Você saberá mais sobre o Keylime: como ele funciona, como você deve configurá-lo e como ele é executado.

REQUISITOS
  • Uma instância em execução do SLE Micro

1 Atestado remoto usando Keylime

Com a crescente demanda de dispositivos de proteção contra mudanças não autorizadas, o uso do mecanismo de segurança chamado atestado remoto (RA, Remote Attestation) tem apresentado um aumento significativo. Usando o RA, um host (cliente) pode autenticar seu status de cadeia de boot e executar o software em um host remoto (verificador). Geralmente, o RA é combinado com a criptografia de chave pública (usando o TPM2), portanto, as informações enviadas apenas podem ser lidas pelos serviços que solicitaram o atestado, e a validade dos dados pode ser verificada.

O atestado remoto no SLE Micro é implementado pelo Keylime.

1.1 Terminologia

A tecnologia de atestado remoto usa os seguintes termos:

Chave de atestado (AK, Attestation Key)

Uma chave de assinatura de dados que prova que os dados vêm de um TPM real e não foram violados.

Raiz de confiança de núcleo para medição

Calcula o próprio hash e o hash da próxima etapa do processo de boot, iniciando a cadeia de medidas.

Chave de endosso (EK, Endorsement Key)

Uma chave de criptografia que é permanentemente incorporada ao TPM quando ele é fabricado. A parte pública da chave e a certificação armazenada no TPM são usadas para reconhecer um TPM genuíno.

Arquitetura de gerenciamento de integridade (IMA, Integrity Management Architecture)

Um subsistema de integridade do kernel que fornece um meio de detectar mudanças maliciosas nos arquivos.

Boot medido

Um método com o qual cada componente na sequência de inicialização calcula um hash do próximo componente antes de delegar a execução do próximo componente. O hash estende um ou vários PCRs do TPM. Um evento é criado com as informações sobre onde foi feita a medição e o que foi medido. Esses eventos são coletados em um registro de eventos e, junto com os valores estendidos do PCR, é possível compará-los com os valores esperados que representam um sistema saudável.

Registro de Configuração de Plataforma (RCP, Platform Configuration Register)

Um local de memória no TPM que, por exemplo, armazena hashes de camadas de inicialização. O PCR pode ser atualizado apenas usando a operação irreversível: extend. É possível obter uma lista assinada dos valores atuais do PCR por meio do comando quote no TPM, e essa cota pode ser verificada por terceiros durante o processo de atestado.

Boot seguro

Cada etapa do processo de inicialização verifica uma assinatura criptográfica no executável da etapa seguinte antes de iniciá-lo.

Trusted Platform Module (TPM)

Um processador criptográfico de segurança independente presente no sistema como hardware ou implementado no firmware que serve como uma raiz de confiança. O TPM fornece um PCR para armazenar os hashes das camadas de inicialização. Um TPM comum inclui várias funções, como um gerador de números aleatórios, contadores ou um relógio local. Ele também armazena 24 PCRs agrupados por bancos para cada função de hash criptográfico suportada (SHA1, SHA256, SHA384 ou SHA512).

Nota
Nota

Por padrão, o uso do TPM está desabilitado. Portanto, o boot medido não ocorre. Para habilitar o atestado remoto, habilite o TPM no menu EFI/BIOS.

Carga útil segura

Um mecanismo para fornecer dados criptografados a agentes íntegros. As cargas úteis são usadas para fornecer chaves, senhas, certificados, configurações ou scripts que são usados posteriormente pelo agente.

1.2 O que é Keylime?

Keylime é uma solução de atestado remoto que permite monitorar a integridade dos nós remotos usando um TPM como raiz de confiança para medição. Com o Keylime, você pode executar várias tarefas, por exemplo:

  • Validar os PCRs estendidos durante o boot medido.

  • Criar análises e fazer asserções do registro de eventos.

  • Fazer asserção do valor de qualquer PCR no sistema remoto.

  • Monitorar a validade de arquivos abertos ou executados.

  • Fornecer dados criptografados a nós verificados por meio de cargas úteis seguras.

  • Executar scripts personalizados que são acionados quando há falha na máquina ao fazer as medições atestadas.

1.3 Arquitetura

O Keylime consiste em um agente, um verificador, um registrador e uma ferramenta de linha de comando (locatário). Os agentes estão nos sistemas que precisam ser atestados. O verificador e o registrador estão em sistemas remotos que executam o registro e o atestado dos agentes. Lembre-se de que apenas a função de agente está disponível no SLE Micro. Para obter detalhes sobre cada componente, consulte as seções a seguir.

1.3.1 Agente do Keylime

O agente é um serviço executado no sistema que precisa ser atestado. O agente envia o registro de eventos, os hashes da IMA e as informações sobre o boot medido para o verificador, usando o TPM local como certificador da validade dos dados.

Quando um novo agente é iniciado, ele precisa primeiro se registrar no registrador. Para isso, o agente precisa de um certificado TLS para estabelecer a conexão. O certificado TLS é gerado pelo registrador, mas precisa ser instalado manualmente no agente. Após o registro, o agente enviará a chave de atestado e a parte pública da chave de endosso para o registrador. O registrador responde ao agente com um desafio em um processo chamado ativação de credencial, que valida o TPM do agente. Após o registro do agente, ele estará pronto para ser registrado no atestado.

1.3.2 Registrador do Keylime

O registrador é usado para registrar os agentes que devem ser atestados. O registrador coleta a chave de atestado do agente, a parte pública da chave de endosso e a certificação da chave de endosso e verifica se a chave de atestado do agente pertence à chave de endosso.

1.3.3 Verificador do Keylime

O verificador realiza o atestado real dos agentes e extrai continuamente os dados de atestado necessários dos agentes (entre outros, os valores do PCR, os registros da IMA e os registros de eventos do UEFI).

2 Executando a carga de trabalho do Keylime com o Podman

Keylime é uma solução de atestado remoto que permite monitorar a saúde dos nós remotos. O verificador e o registrador são componentes essenciais do Keylime em sistemas remotos que realizam o registro e o atestado dos agentes do Keylime.

Nota
Nota

O contêiner descrito neste artigo inclui os serviços de plano de controle verificador e registrador, e uma ferramenta de linha de comando (CLI, Command-Line Tool) de locatário, que fazem parte do projeto Keylime.

Antes de iniciar a instalação e o registro dos agentes, prepare o verificador e o registrador nos hosts remotos, conforme descrito no procedimento a seguir.

  1. Identifique a imagem da carga de trabalho do Keylime.

    # podman search keylime
    [...]
    registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane
  2. Extraia a imagem do registro.

    # podman pull\
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest
  3. Crie o volume keylime-control-plane para manter o banco de dados e os certificados necessários durante o processo de atestado.

    # podman container runlabel install \
      registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latest
  4. Inicie o contêiner e os serviços relacionados.

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

    O contêiner keylime-control-plane é criado. Ele inclui os serviços “registrador” e “verificador” configurados e em execução. Internamente, o contêiner expõe as portas 8881, 8890 e 8891 ao host usando os valores padrão. Valide a configuração do firewall para permitir o acesso às portas e a comunicação entre os contêineres, pois a CLI de locatário exige isso.

Dica
Dica

Se você precisar parar os serviços do Keylime, execute o seguinte comando:

# podman kill keylime-control-plane-container

2.1 Monitorando os serviços do Keylime

Para obter o status dos contêineres em execução no host, execute o seguinte comando:

# podman ps

Para ver os registros dos serviços do Keylime, execute o seguinte comando:

# podman logs keylime-control-plane-container

2.2 Executando a CLI de locatário

A ferramenta CLI de locatário está incluída no contêiner e, se o firewall do host não interferir nas portas expostas pelos serviços do Keylime, você poderá executá-la usando a mesma imagem, por exemplo:

# 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 Extraindo o certificado do Keylime

Na primeira vez que o contêiner do Keylime é executado, seus serviços criam um certificado exigido por vários agentes. Você precisa extrair o certificado do contêiner e copiá-lo para o diretório /var/lib/keylime/cv_ca/ do agente.

# podman cp \
keylime-control-plane-container:/var/lib/keylime/cv_ca/cacert.crt
.# scp cacert.crt
AGENT_HOST:/var/lib/keylime/cv_ca/
Dica
Dica

Encontre mais detalhes sobre a instalação do agente na Seção 3, “Instalando o agente do Keylime”.

3 Instalando o agente do Keylime

Keylime é uma solução de atestado remoto que permite monitorar a saúde dos nós remotos. O agente do Keylime é um serviço executado no sistema que precisa ser atestado e que envia o registro de eventos, os hashes da IMA e as informações sobre o boot medido para o verificador.

O agente do Keylime não faz parte do SLE Micro por padrão, e você precisa instalá-lo manualmente. Para instalar o agente, faça o seguinte:

  1. Instale o pacote rust-keylime da seguinte maneira:

    # transactional-update pkg in rust-keylime

    Em seguida, reinicialize o sistema.

  2. Ajuste a configuração padrão do agente.

    1. Crie um diretório para armazenar um novo arquivo de configuração para suas mudanças em /etc/keylime/agent.conf.d/. A configuração padrão é armazenada em /usr/etc/keylime/agent.conf, mas não recomendamos a edição desse arquivo porque ele pode ser sobregravado nas próximas atualizações do sistema.

      # mkdir -p /etc/keylime/agent.conf.d
    2. Crie um novo arquivo /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

      O identificador exclusivo é gerado sempre que o agente é executado. No entanto, você pode definir um valor específico por meio dessa opção.

      2

      Endereço IP do registrador.

      3

      Endereço IP do verificador.

    3. Mude o proprietário do diretório /etc/keylime/ para keylime:tss:

      # chown -R keylime:tss /etc/keylime
    4. Mude as permissões no diretório /etc/keylime/:

      # chmod -R 600 /etc/keylime
  3. Copie os certificados gerados pela CA para o nó do agente. No nó do agente, faça o seguinte:

    1. Prepare um diretório para o certificado:

      # mkdir -p /var/lib/keylime/cv_ca
    2. Copie o certificado para o agente:

      # scpCERT_SERVER_ADDRESS:/var/lib/keylime/cv_ca/cacert.crt /var/lib/keylime/cv_ca
    3. Mude o proprietário do certificado para keylime:tss:

      # chown -R keylime:tss /var/lib/keylime/cv_ca
  4. Inicie e habilite o keylime_agent.service:

    # systemctl enable --now keylime_agent.service

4 Registrando o agente do Keylime

Keylime é uma solução de atestado remoto que permite monitorar a saúde dos nós remotos. O agente do Keylime é um serviço executado no sistema que precisa ser atestado e que envia o registro de eventos, os hashes da IMA e as informações sobre o boot medido para o verificador.

Você pode registrar um novo agente usando o locatário da CLI ou editando a configuração do verificador. Usando o locatário no host do verificador, execute o seguinte:

# keylime_tenant -v 127.0.0.1 \
  -tAGENT \1
  -u UUID \2
  --cert default \
  -c add
  [--include PATH_TO_ZIP_FILE]3

1

AGENT é um endereço IP do agente a ser registrado.

2

UUID é o identificador exclusivo do agente.

3

O arquivo passado pela opção include é usado para enviar os dados da carga útil secreta ao agente. Para obter informações detalhadas, consulte a Seção 5, “Cargas úteis seguras do Keylime”.

Você pode listar os agentes registrados usando o comando reglist no host do verificador da seguinte maneira:

# keylime_tenant -v 127.0.0.1 \
  --cert default \
  -c reglist

Para remover um agente registrado, especifique-o usando as opções -t e -u e o comando -c delete da seguinte maneira:

# keylime_tenant -v 127.0.0.1 \
  -tAGENT \
 -u UUID \
  -c delete

5 Cargas úteis seguras do Keylime

Keylime é uma solução de atestado remoto que permite monitorar a saúde dos nós remotos.

5.1 O que é uma carga útil segura?

Uma carga útil segura do Keylime permite enviar dados criptografados a agentes íntegros. As cargas úteis são usadas para fornecer chaves, senhas, certificados, configurações ou scripts que são usados pelo agente do Keylime em uma fase posterior.

5.2 Como funciona uma carga útil segura?

Uma carga útil segura é enviada ao agente em um arquivo zip que deve conter um script de shell chamado autorun.sh. O script será executado apenas se o agente tiver sido registrado e verificado apropriadamente. Para enviar o arquivo zip, use a opção --include do comando keylime_tenant.

Por exemplo, o script autorun.sh a seguir cria uma estrutura de diretórios e copia as chaves SSH nela. O arquivo zip relacionado deve incluir essas chaves 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 Habilitando o monitoramento da IMA para Keylime

Keylime é uma solução de atestado remoto que permite monitorar a saúde dos nós remotos. A Arquitetura de gerenciamento de integridade (IMA, Integrity Management Architecture) é um subsistema de integridade do kernel que fornece um meio de detectar mudanças maliciosas nos arquivos.

Ao usar a IMA, o kernel calcula um hash dos arquivos acessados. Em seguida, o hash é usado para estender o PCR 10 no TPM e também para registrar uma lista dos arquivos acessados. O verificador pode solicitar uma cotação assinada ao agente para o PCR 10 para obter os registros de todos os arquivos acessados, incluindo os hashes dos arquivos. Em seguida, os verificadores comparam os arquivos acessados com uma lista de permissão local de arquivos aprovados. Se qualquer um dos hashes não for reconhecido, o sistema será considerado inseguro, e um evento de revogação será acionado.

Antes que o Keylime possa coletar informações, o IMA/EVM precisa ser habilitado. Para habilitar o processo, inicialize um kernel do agente com os parâmetros ima_appraise=log e ima_policy=tcb:

  1. Atualize a opção GRUB_CMDLINE_LINUX_DEFAULT com os parâmetros em /etc/default/grub:

    GRUB_CMDLINE_LINUX_DEFAULT="ima_appraise=log ima_policy=tcb"
  2. Gere novamente o grub.cfg executando:

    # transactional-update grub.cfg
  3. Reinicialize o sistema.

O procedimento acima usa a política IMA do kernel padrão. Para evitar o monitoramento de muitos arquivos e, deste modo, a criação de registros longos, crie uma nova política personalizada. Encontre mais detalhes em Keylime documentation.

Para indicar os hashes esperados, use a opção --allowlist do comando keylime_tenant ao registrar o agente. Para ver os arquivos excluídos ou ignorados, use a opção --exclude do comando keylime_tenant:

# keylime_tenant --allowlist
    -v 127.0.0.1 \
    -uUUID

7 Para obter mais informações