Jump to content

Clevis (Português)

From ArchWiki

Clevis permite vincular um volume LUKS a um sistema, criando uma chave e criptografando-a usando o TPM, e selando a chave usando valores PCR que representam o estado do sistema no momento da criação do pin Clevis.

Senhas digitadas manualmente por um usuário são uma forma tradicional e amplamente utilizada para desbloquear partições LUKS criptografadas. Mas isso tem algumas desvantagens:

  • Requer intervenção manual e, portanto, não funciona com configurações que exigem inicialização automática (por exemplo, um grande server farm).
  • Um cérebro humano médio é capaz de memorizar senhas relativamente simples (~20-30 bits de entropia) que são muito mais fracas do que as chaves usadas para cifras de bloco modernas (128/256 bits).

Uma solução para isso seria criptografar dados com uma chave forte armazenada de forma segura em outro lugar, por exemplo, no seu chip TPM ou YubiKey ou em algum serviço de rede. Clevis é uma estrutura que implementa essa ideia. Ele permite criptografar (em termos de clevis bind — vincular) dados com um pin conectável (pluggable). Atualmente, o clevis implementa 3 pins:

Warning Se você usar este método no seu volume root, isso significa que, contanto que as condições mencionadas anteriormente sejam atendidas, seu computador desbloqueará automaticamente na inicialização sem a necessidade de digitar uma senha de criptografia.
  • Isso significa que o acesso aos dados não está protegido caso o hardware seja roubado.
  • Esteja ciente de que este método o torna mais vulnerável a ataques de reinicialização a frio (cold boot), pois mesmo que seu computador tenha sido desligado por um longo tempo (garantindo que a memória esteja completamente limpa), um invasor pode simplesmente ligá-lo e esperar que o TPM carregue a chave automaticamente. Isso pode ser uma preocupação para alvos de alto valor.

Instalação

Para usar o clevis, instale o pacote clevis.

Vincular alguns dados (Bind some data)

Aqui está um exemplo de vinculação de dados com TPM2:

$ clevis encrypt tpm2 '{}' <<< 'olá, mundo'
eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA

Esta longa mensagem codificada em base64 é o nosso texto criptografado com uma chave TPM interna. Ela pode ser descriptografada apenas neste computador. Tentar descriptografá-la em outro computador (ou melhor, com outro chip TPM) retornará um erro.

$ clevis decrypt tpm2 '{}' <<< 'eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI1NiIsImp3a19wcml2IjoiQU80QUlJQkxxT3FVenVDU1FmWkprNmdDN2wzMW43V3M2Y2FZd0VZS1BSR3Q0OHJEQUJBV2Z4M3pTUUNUTmtHZE9BM2FZd2RTZk9GcXZWdnVlQ3lPamFsWldCT2R4RlJKSzl5ZVRCM0pkNFktcF9HalhhNmlnLWxxNmtmMHZTWWkzOWMxVEpES1RYRVZTdnlXSlpEbGdxQ0JPMVNxeGJBd2tfSnIyRlRNY3hvNGtpSmNtMEVjbWd5dFdyME00QmcySlg4aVo3MEt1MTVjNzFORU5Ra3RjdGMtREhBVGFQcHJ2VzI2Z3d1YmUxckRfX19aV2tHaG9mX053M0M1OHlOcXF2RUpPZUwzNTZHNXJHNVVtYmUtWWV4Ujl2SEppZWlua3ZaNTJoMFVRYWVNSm9LYjJuNjlVTGZHb2J1NElTN20iLCJqd2tfcHViIjoiQUM0QUNBQUxBQUFFMGdBQUFCQUFJQ2poWDBVeTJKZVpSNU9pRU0ySktSeEtnUElYQ3dGNnRNR09NTDZ0ZnE5aiIsImtleSI6ImVjYyJ9fSwiZW5jIjoiQTI1NkdDTSJ9..1P2Emag_4k-GlhyY.MuQQYPa8QHrysZ74uA.0ddDxfZA3R-cCmaKu5yUZA'
olá, mundo

Vincular um volume LUKS (Bind a LUKS volume)

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: please use the first argument of the template to provide a brief explanation. (Discuss in Talk:Clevis (Português))
Warning Defina uma senha de backup forte caso o unsealing (remoção do selo) do TPM falhe, usando:
# cryptsetup luksAddKey /dev/sdX

Para vincular um volume LUKS ao TPM, use:

# clevis luks bind -d /dev/sdX tpm2 '{}'

onde '{}' contém a configuração: mesmo sem parâmetros, o drive não pode ser descriptografado em outro computador, a menos que o invasor saiba a senha de backup.

Note Para selar a chave LUKS contra as configurações de UEFI e a política de Secure Boot, use:
'{"pcr_ids":"1,7"}'

Se as configurações de UEFI ou Secure Boot forem modificadas, o TPM calculará valores PCR diferentes e a descriptografia falhará. Isso oferece proteção contra ataques de 'Evil Maid' (empregada malvada).

Para uma lista de parâmetros, consulte clevis-encrypt-tpm2(1) § CONFIG.

Para uma explicação simplificada do significado dos PCRs, consulte Trusted Platform Module#Accessing PCR registers.

Para uma explicação completa do significados dos PCRs, consulte a especificação TCG (§ 2.3.4).

If this fails with ERROR: pcr-input-file filesize does not match pcr set-list, you should specify a different pcr bank:

'{"pcr_bank":"sha256","pcr_ids":"1,7"}'

Em agosto de 2022, o Clevis suporta apenas os bancos sha1 (padrão) e sha256, então naturalmente a única opção diferente é sha256 - você pode verificar os bancos disponíveis e usados usando # tpm2_pcrread.

Para gerar um novo Clevis pin após alterações na configuração do sistema que resultam em valores PCR diferentes, por exemplo, atualizar o UEFI quando o PCR 0 é usado, execute

# cryptsetup luksDump /dev/sdX
Tokens:
  slot do token: clevis
        Keyslot:  keyslot

para encontrar o slot usado para o pin Clevis, então

# clevis luks regen -d /dev/sdX -s keyslot

Para remover a vinculação Clevis, execute:

# clevis luks unbind -d /dev/sdX -s keyslot 
Warning Verifique novamente se você escolheu o slot correto, ou você pode perder o acesso ao seu volume.

Você pode desbloquear um volume vinculado ao TPM usando:

# clevis luks unlock -d /dev/sdX

Para a descriptografia automatizada de volumes em /etc/crypttab, habilite clevis-luks-askpass.path.

Para a descriptografia automatizada do volume root, devemos fazer algumas alterações nos nossos geradores de Initramfs:

Hook do Mkinitcpio

Instale o pacote mkinitcpio-clevis-hookAUR. Em seguida, habilite o hook clevis editando mkinitcpio.conf:

/etc/mkinitcpio.conf
# Edite os hooks e adicione clevis antes do hook 'encrypt'. Ex:
HOOKS=(.. clevis encrypt ..)
Note Se você estiver usando plymouth, substitua o hook plymouth-encrypt por encrypt. plymouth-encrypt é relatado como problemático quando o dispositivo já está desbloqueado. Mais informações.

No final, regenere o initramfs.

Booster

Felizmente, o Booster descriptografa automaticamente volumes LUKS vinculados usando Clevis pronto para uso!

Booster é também capaz de ler os tokens LUKS, decodificar as informações do clevis, reconstruir a senha e desbloquear a partição automaticamente.

O pin Tang (vinculação de rede) requer que a rede esteja habilitada. Consulte a seção Booster#Configuration para obter mais informações sobre a configuração de rede com o booster.

Dracut

Dracut precisa dos seguintes pacotes extras:

Seguido por uma regeneração do initramfs:

# dracut -f
Note Se você pretende usar o PIN Tang do Clevis para desbloquear seu(s) drive(s), o curl deve ser incluído na imagem do kernel. Adicione um arquivo em /etc/dracut.conf.d instruindo o dracut a incluí-lo antes de executar dracut -f:
/etc/dracut.conf.d/curl.conf
install_items+=" /usr/bin/curl "

Dicas e truques

Vinculação YubiKey

Clevis permite vincular uma partição LUKS usando o modo de desafio-resposta da YubiKey. Para vincular uma partição LUKS, execute

# clevis luks bind -d /dev/sdX yubikey '{"slot":1}'

Instale o yubikey-personalization. Edite o arquivo de configuração e adicione a seguinte opção:

/etc/booster.yaml
extra_files: ykchalresp

Regenere as imagens do booster. O Booster detectará esta configuração durante a inicialização e usará a YubiKey presente para desbloquear o drive.

Veja também