Altere a senha em um sistema de arquivos LUKS sem conhecer a senha

27

Eu tenho um servidor Debian Wheezy que está sendo executado há algum tempo com uma unidade criptografada. A senha da unidade criptografada ( /dev/sda5 ) foi perdida quando meu arquivo de senha criptografada foi corrompido.

Gostaria de poder reinicializar este servidor, mas isso, é claro, exigirá essa senha. Como a unidade está claramente descriptografada, existe uma maneira de alterar a senha sem conhecer a antiga?

cryptsetup luksChangeKey /dev/sda5 requer a senha do volume.

Eu poderia naturalmente rsync all off e reconstruir, mas eu gostaria de evitar isso. Eu olhei através da memória ( #cat /dev/mem | less ), mas não consegui encontrá-la (o que é uma coisa muito boa!).

    
por Ethan 13.10.2014 / 23:05

1 resposta

37

Sim, você pode fazer isso acessando a chave mestra enquanto o volume é descriptografado.

O rápido e sujo para adicionar uma nova frase-senha:

device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)

device e volume_name devem ser definidos adequadamente.
volume_name é o nome do volume descriptografado, aquele que você vê em /dev/mapper .

Explicação:

Os volumes LUKS criptografam seus dados com uma chave mestra. Cada frase secreta adicionada simplesmente armazena uma cópia dessa chave mestra criptografada com essa frase secreta. Então, se você tiver a chave mestra, basta usá-la em um novo slot de chave.

Vamos separar o comando acima.

$ dmsetup table --showkeys $volume_name

Isso despeja um monte de informações sobre o volume ativamente descriptografado. A saída é assim:

0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096

O campo # 5 é a chave mestra.

$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p

Não mostrará a saída disso como dados binários, mas o que isso faz é pegar a chave mestra do volume e depois convertê-la em dados binários brutos, necessários posteriormente.

$ cryptsetup luksAddKey $device --master-key-file <(...)

Isso está dizendo cryptsetup para adicionar uma nova chave para o volume. Normalmente, essa ação requer uma chave existente, no entanto, usamos --master-key-file para informar que queremos usar a chave mestra. A <(...) é a substituição do comando shell & redirecionamento. Basicamente, ele executa tudo internamente, envia a saída para um pipe e, em seguida, substitui o <(...) por um caminho para esse pipe.

Assim, o comando inteiro é apenas um verso para condensar várias operações.

    
por 13.10.2014 / 23:56

Tags