Autenticação de dois fatores Yubikey Criptografia de disco completo via LUKS

27

Recentemente, adquiri um Yubikey Neo - um pequeno dispositivo de autenticação de segundo fator. Ele se destina principalmente ao uso com Senhas de uso único e o protocolo U2F emergente - mas, desde a versão 2 do Yubikey, ele também suporta a autenticação de resposta a desafios HMAC-SHA1. O HMAC-SHA1 combina uma chave secreta (armazenada dentro do Yubikey) e a combina com uma senha para gerar uma resposta.

Como posso combinar o Yubikey com a instalação do Ubuntu FDE para usar o 2FA com meu disco rígido criptografado?

seanlano
fonte

Respostas:

30

Um grupo chamado PrivacyIdea criou um pequeno pacote para adicionar uma rotina de resposta a desafios do HMAC-SHA1 no initramfs, o que significa que o Ubuntu pode consultar um desafio para passar para o Yubikey e usar a resposta para desbloquear o volume LUKS. Na maioria das vezes, estou seguindo estas instruções , com alguns comentários adicionais. O processo é realmente muito fácil de fazer.

Eu testei isso no Ubuntu 14.04, 16.04 e 18.04; usando um Yubikey Neo. Ele deve funcionar com qualquer Yubikey recente, com firmware 2.0+ e com qualquer versão do Ubuntu após 14.04. Eu também testei o Ubuntu 19.04 com um Yubikey 5C, algum trabalho adicional foi necessário, mas pode ser feito para funcionar. Também pode haver outros dispositivos de resposta a desafios HMAC-SHA1 de hardware com os quais isso funciona, mas não conheço nenhum que exista. Como sempre, verifique se você tem um backup dos seus dados antes de continuar - não deve haver nenhum problema aqui, mas sempre há a chance de isso destruir tudo o que está no seu computador. Estas instruções são fornecidas sem garantia.

Atualização: Desde o Ubuntu 16.04, os pacotes necessários estão nos repositórios principais e não é necessário PPA.

Adicione um comentário se você tiver dúvidas!


0. Pré-requisitos

Para que isso funcione, você já precisará ter a criptografia de disco completo do LUKS configurada e funcionando. Você pode fazer isso selecionando a opção apropriada ao instalar o Ubuntu. Para segurança máxima, você deve ter uma senha muito forte escolhida durante a instalação. Se a sua senha não estiver correta, altere-a para uma melhor antes de continuar ( instruções mais detalhadas aqui ).

O método abaixo não substitui nenhuma senha existente, mas adiciona outra senha a um dos slots LUKS. Portanto, se você perder o Yubikey, ainda poderá desbloquear o computador usando qualquer senha existente - sugiro que você anote e esconda-o em algum lugar seguro - você também precisará dele algumas vezes durante este procedimento. Sua nova senha de desafio do Yubikey ainda deve ser razoavelmente forte, mas não precisa ser tão longa quanto a senha usada durante a instalação do Ubuntu.


1. Adicione o PPA do PrivacyIdea e instale o pacote

No Ubuntu 14.04

Abra um terminal e execute o seguinte comando:

sudo add-apt-repository ppa:privacyidea/privacyidea 

Pressione Enter quando solicitado e execute:

sudo apt-get update

Em seguida, instale o pacote com:

sudo apt-get install yubikey-luks

No Ubuntu 16.04, 18.04

Não há necessidade de um PPA, você pode instalar o pacote com:

sudo apt-get install yubikey-luks

No Ubuntu 19.04

Veja esta resposta para saber como criar o yubikey-lukspacote a partir da fonte para o Ubuntu 19.04.


2. Instale o software Yubikey

Se você estiver usando a funcionalidade HMAC-SHA1 do Yubikey para outra coisa, poderá pular esta seção. Ele apagará qualquer configuração no segundo slot Yubikey, portanto , não execute esta etapa se você usar o HMAC-SHA1 para outros fins com este Yubikey.

Você precisará configurar o Yubikey para funcionar com o Ubuntu instalando o software necessário, a partir do PPA da Yubico no Ubuntu 14.04 ou do repositório principal do Ubuntu na 16.04 e posterior.

No Ubuntu 14.04

Se você não tiver feito isso antes, adicione o PPA e instale o pacote com:

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization

No Ubuntu 16.04, 18.04 (e posterior)

sudo apt-get install yubikey-personalization

3. Inicialize o slot Yubikey para HMAC-SHA1

Agora precisamos programar o segundo slot do Yubikey com uma configuração HMAC-SHA1. Isso apagará sua configuração de slot anterior, que está vazia por padrão. Novamente, se você estiver usando o HMAC-SHA1 para outra coisa , não emita este comando - ele apagará sua configuração. Você pode usar com segurança a mesma chave secreta dentro do Yubikey para esta configuração do LUKS e para seus outros usos. (Por exemplo, com outro computador usando LUKS + Yubikey).

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

O terminal exibirá algumas informações sobre as alterações feitas. Você não precisa anotar isso, mas ele mostrará a chave secreta usada pelo Yubikey no algoritmo HMAC-SHA1 para calcular a resposta quando houver um desafio.


4. Inscreva o Yubikey no slot LUKS

Agora vamos editar a configuração LUKS para acrescentar a resposta do Yubikey como uma das chaves de descriptografia.

A partição que precisamos especificar depende se você está usando o BIOS ou UEFI para inicializar sua máquina. Para BIOS, o volume criptografado está em, /dev/sda5por padrão, para UEFI, está em /dev/sda3. Você pode verificar isso abrindo o disksutilitário e confirmando o caminho da partição - ela deve ser sda3ou sda5. NOTA: Em computadores mais novos com discos NVMe, o caminho será semelhante /dev/nvme0n1p3.

Execute isso em um terminal:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7

Isso será gravado no slot 7 da configuração do LUKS, siga as instruções no instalador (elas variam um pouco dependendo da versão que você está executando).

Então você está pronto! Você poderá reiniciar o computador e, se o seu Yubikey estiver inserido, poderá digitar sua senha de desafio e usar o Yubikey como um segundo fator para desbloquear a partição LUKS e inicializar o sistema. Depois de descriptografar o disco rígido, você pode remover o Yubikey.

Se você perder o seu Yubikey, ainda poderá digitar sua senha secreta original (possivelmente muito longa) para descriptografar o disco rígido e, em seguida, poderá seguir este procedimento novamente para registrar um novo Yubikey.


Alterando a senha do desafio de criptografia

Alterar a senha posteriormente é bastante simples, basta usar este comando para redefinir a chave secreta. Não é totalmente necessário redefinir a chave secreta, mas não fará mal. Lembre-se de que isso destruirá a chave secreta anterior, não faça isso se você usar o HMAC-SHA1 para outra coisa com este Yubikey. (Por exemplo, com outro computador usando LUKS + Yubikey).

 ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Em seguida, semelhante à Etapa 4 , acima, para registrar uma nova senha no slot de chave LUKS, exceto opte por limpar o Slot 7 com este comando:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c

Quando solicitado Enter any remaining passphrase, use sua senha de backup - não a senha de desafio do Yubikey. Em seguida, insira uma nova senha de desafio do Yubikey duas vezes e, finalmente, você precisará digitar a senha de backup uma última vez.

Agora, sua antiga senha do desafio Yubikey foi removida e apenas a nova senha descriptografará o disco rígido. Sua senha de backup anterior ainda será a mesma. Você pode alterar essa senha, seguindo os links na Etapa 0 .


Nota sobre implicações de segurança

Adicionar um Yubikey adicionará um certo nível de segurança ao seu sistema - alguém precisa conhecer a frase secreta do desafio e ter o seu Yubikey para desbloquear o disco rígido (ou encontrar a senha inicial, que você está usando agora como backup) . No entanto, é tecnicamente viável para um invasor descriptografar o disco rígido se ele souber a frase secreta do seu desafio (por exemplo, "navegando" enquanto você digita) e pode obter acesso ao seu Yubikey apenas por um curto período de tempo. Usando a senha de desafio, eles poderiam obter a resposta do Yubikey e armazená-lo e usá-lo para descriptografar o disco rígido a qualquer momento sem o Yubikey. Ou, novamente, se um invasor ou um malware conhecesse sua senha e pudesse executar o código em uma máquina conectada ao seu Yubikey, eles também poderiam emitir o desafio e armazenar a resposta. Portanto, ainda é extremamente importante estar vigilante ao inserir a senha do desafio e garantir que você sempre tenha o Yubikey em um local seguro. Você também deve sempre conectá-lo a uma máquina em que confie. Se você perder o controle do seu Yubikey e suspeitar que alguém o esteja usando para tentar aprender a chave de descriptografia, execute as etapas 2 e 3 novamente para redefinir a chave secreta dentro do Yubikey e escolher uma nova senha de desafio. Observe que se um adversário conseguiu aprender uma de suas frases secretas (a resposta HMAC-SHA1 do Yubikey ou seu backup), ele pode fazer um backup da chave mestra LUKS e usá-la para descriptografar seu disco rígido, mesmo que você muda a senha no futuro. e para garantir que você sempre tenha o Yubikey em um local seguro. Você também deve sempre conectá-lo a uma máquina em que confia. Se você perder o controle do seu Yubikey e suspeitar que alguém o esteja usando para tentar aprender a chave de descriptografia, execute as etapas 2 e 3 novamente para redefinir a chave secreta dentro do Yubikey e escolher uma nova senha de desafio. Observe que se um adversário conseguiu aprender uma de suas frases secretas (a resposta HMAC-SHA1 do Yubikey ou seu backup), ele pode fazer um backup da chave mestra LUKS e usá-la para descriptografar seu disco rígido, mesmo que você altera a senha no futuro. e para garantir que você sempre tenha o Yubikey em um local seguro. Você também deve sempre conectá-lo a uma máquina em que confia. Se você perder o controle do seu Yubikey e suspeitar que alguém o esteja usando para tentar aprender a chave de descriptografia, execute as etapas 2 e 3 novamente para redefinir a chave secreta dentro do Yubikey e escolher uma nova senha de desafio. Observe que se um adversário conseguiu aprender uma de suas frases secretas (a resposta HMAC-SHA1 do Yubikey ou seu backup), ele pode fazer um backup da chave mestra LUKS e usá-la para descriptografar seu disco rígido, mesmo que você altera a senha no futuro. execute as etapas 2 e 3 novamente para redefinir a chave secreta dentro do Yubikey e escolha uma nova senha de desafio. Observe que se um adversário conseguiu aprender uma de suas frases secretas (a resposta HMAC-SHA1 do Yubikey ou seu backup), ele pode fazer um backup da chave mestra LUKS e usá-la para descriptografar seu disco rígido, mesmo que você altera a senha no futuro. execute as etapas 2 e 3 novamente para redefinir a chave secreta dentro do Yubikey e escolha uma nova senha de desafio. Observe que se um adversário conseguiu aprender uma de suas frases secretas (a resposta HMAC-SHA1 do Yubikey ou seu backup), ele pode fazer um backup da chave mestra LUKS e usá-la para descriptografar seu disco rígido, mesmo que você altera a senha no futuro.A página de manual do cryptsetup explica isso, consulte a seção luksHeaderBackup . Se você suspeitar que isso aconteceu, deverá criar um volume LUKS totalmente novo para proteger seus dados.

seanlano
fonte
Atualização: Eu também tentei isso com o 15.04, parece que o PPA não possui uma compilação do pacote necessário, então tenho que alterar a linha DEB nas fontes de software para usar o repositório "confiável" em vez de "vívido" " Depois de fazer essa alteração, minha configuração do LUKS + Yubikey agora funciona no 15.04.
Seanlano 20/09/2015
4
Não use mais o repositório de privacidade! O pacote agora está contido no debian upstream!
Cornelinux 31/08/16
1
Existe uma maneira de evitar o login sem o yubikey: altere a senha do luks toda vez que o usuário efetuar login. Há implementação para o Gentoo aqui: github.com/flowolf/initramfs_ykfde Ele pode ser adaptado para o Ubuntu em pouco tempo.
Unnamed_1 4/04
1
Eu acho que o mesmo procedimento funciona para a nova versão 18.04 LTS?
Mark Veenstra
2
Eu tentei com o Ubuntu 18.04 e funciona bem.
jetole
0

Atualização para o Ubuntu 19.04:

Parece que a partir do Ubuntu 19.04 (e talvez 18.10, eu não tentei esse lançamento), cryptsetupmudou apenas o suficiente para quebrar como yubikey-lukscostumava funcionar. Essa confirmação do repositório upstream parece implementar uma correção, mas o repositório original não parece ter sido atualizado desde outubro de 2018. Encontrei esse fork do repositório que possui a correção, além de alguns outros itens de arrumação - instalado e conseguiu criar um pacote que funciona em 19.04.

Como não consegui encontrar uma compilação existente da bifurcação atualizada, o método para começar a yubikey-lukstrabalhar envolve obter o código-fonte e criar o pacote DEB localmente e instalá-lo.

Siga as etapas na minha resposta anterior , exceto substitua a etapa 1 pela abaixo:


1. Busque a fonte yubikey-luks, construa e instale o pacote

Instale dependências de compilação com:

sudo apt install dh-exec devscripts expect yubikey-personalization

Em seguida, baixe e extraia o arquivo de origem:

mkdir ~/tmp
cd ~/tmp
wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
unzip yubikey-luks.zip
cd yubikey-luks-*

Crie o pacote com:

make builddeb NO_SIGN=1

Em seguida, instale-o:

sudo dpkg -i DEBUILD/yubikey-luks_*.deb

Continue seguindo o restante das etapas na minha primeira resposta.

Esperamos que até 19.10 a versão yubikey-luksno arquivo principal do Ubuntu possa ser atualizada para que a construção manual não seja necessária.

Como bônus, a versão mais recente possui um arquivo de configuração, que pode ser encontrado em /etc/ykluks.cfg. A mensagem mostrada na inicialização pode ser configurada neste arquivo.

seanlano
fonte