Protegendo o SLE Micro com o Keylime
- 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 comandoquote
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).
NotaPor 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.
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.
Identifique a imagem da carga de trabalho do Keylime.
#
podman search keylime [...] registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-planeExtraia a imagem do registro.
#
podman pull\ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestCrie 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:latestInicie o contêiner e os serviços relacionados.
#
podman container runlabel run \ registry.opensuse.org/devel/microos/containers/containerfile/opensuse/keylime-control-plane:latestO 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.
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/
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:
Instale o pacote rust-keylime da seguinte maneira:
#
transactional-update pkg in rust-keylimeEm seguida, reinicialize o sistema.
Ajuste a configuração padrão do agente.
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.dCrie 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 EOFMude o proprietário do diretório
/etc/keylime/
parakeylime:tss
:#
chown -R keylime:tss /etc/keylimeMude as permissões no diretório
/etc/keylime/
:#
chmod -R 600 /etc/keylime
Copie os certificados gerados pela CA para o nó do agente. No nó do agente, faça o seguinte:
Prepare um diretório para o certificado:
#
mkdir -p /var/lib/keylime/cv_caCopie o certificado para o agente:
#
scpCERT_SERVER_ADDRESS:/var/lib/keylime/cv_ca/cacert.crt /var/lib/keylime/cv_caMude o proprietário do certificado para
keylime:tss
:#
chown -R keylime:tss /var/lib/keylime/cv_ca
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
AGENT é um endereço IP do agente a ser registrado. | |
UUID é o identificador exclusivo do agente. | |
O arquivo passado pela opção |
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
:
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"
Gere novamente o
grub.cfg
executando:#
transactional-update grub.cfgReinicialize 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 #
A página inicial do Keylime está em https://keylime.dev.
A documentação mais recente do Keylime está em https://keylime.readthedocs.io/en/latest/.
Para obter uma visão geral de alto nível do IMA/EVM, acesse https://en.opensuse.org/SDB:Ima_evm#Introduction.
Encontre mais detalhes sobre como criar uma nova política IMA do kernel em https://keylime-docs.readthedocs.io/en/latest/user_guide/runtime_ima.html.
8 Informações legais #
Copyright © 2006-2024 SUSE LLC e colaboradores. Todos os direitos reservados.
Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença GNU de Documentação Livre, Versão 1.2 ou (por sua opção) versão 1.3; com a Seção Invariante sendo estas informações de copyright e a licença. Uma cópia da versão 1.2 da licença está incluída na seção intitulada “GNU Free Documentation License” (Licença GNU de Documentação Livre).
Para ver as marcas registradas da SUSE, visite https://www.suse.com/company/legal/. Todas as marcas comerciais de terceiros pertencem a seus respectivos proprietários. Os símbolos de marca registrada (®, ™ etc.) indicam marcas registradas da SUSE e de suas afiliadas. Os asteriscos (*) indicam marcas registradas de terceiros.
Todas as informações deste manual foram compiladas com a maior atenção possível aos detalhes. Entretanto, isso não garante uma precisão absoluta. A SUSE LLC, suas afiliadas, os autores ou tradutores não serão responsáveis por possíveis erros nem pelas consequências resultantes de tais erros.