Alterar senha em um sistema de arquivos LUKS sem saber a senha


30

Eu tenho um servidor Debian Wheezy que está em execução há um tempo com uma unidade criptografada. A senha da unidade criptografada ( /dev/sda5) foi perdida quando meu arquivo de senha criptografada foi corrompido.

Eu gostaria de poder reiniciar este servidor, mas é claro que exigirá essa senha. Como a unidade está claramente em um estado descriptografado, existe uma maneira de alterar a senha sem conhecer a antiga?

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

É claro que eu poderia rsyncreconstruir tudo, mas gostaria de evitar isso. Procurei na memória ( #cat /dev/mem | less), mas não consegui encontrá-la (o que é uma coisa muito boa!).


2
Hmmmm .... Qual seria o sentido de ter um sistema de arquivos criptografado se fosse tão fácil obter acesso a ele sem a senha?
Mdpc

7
@mdpc: Sua brincadeira não faz sentido. Ele tem acesso ao sistema de arquivos, porque ele tinha a senha quando o servidor foi inicializado pela última vez.
G-Man diz 'Reinstate Monica'

2
Só porque você tinha a senha (e ela foi corrompida) não invalida meu comentário. Em geral, se você esquecer a senha de qualquer tipo de material criptografado, ela deverá ser perdida para sempre, caso contrário, qual foi o sentido de criptografá-la?
Mdpc # 13/14

3
@mdpc No presente, ele tem acesso atual ao sistema de arquivos.
Patrick

Respostas:


40

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

A rápida e suja para adicionar uma nova senha:

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

devicee volume_namedeve ser definido adequadamente.
volume_nameé o nome do volume descriptografado, o que você vê /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. Portanto, se você possui 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 descriptografado ativamente. 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 vai mostrar a saída disso, pois são 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 ao cryptsetup para adicionar uma nova chave ao volume. Normalmente, essa ação requer uma chave existente, no entanto, usamos --master-key-filepara dizer que queremos usar a chave mestra.
A <(...)substituição e redirecionamento do comando is shell Basicamente, executa tudo o que está dentro, envia a saída para um canal e, em seguida, substitui o <(...)por um caminho para esse canal.

 

Portanto, todo o comando é apenas uma linha para condensar várias operações.


Não tenho certeza se estou fazendo algo errado, mas meu LUKS não mostra uma string como a que você está mostrando no exemplo. É um pequeno número pequeno de 9 dígitos. Também o meu aparece como "8: 3 linear".
slm

@slm Se estiver sendo exibido linear, não será um volume LUKS aberto (valor incorreto volume_nameno comando fornecido). Um volume LUKS aberto terá cryptno terceiro campo. Em cryptsetup luksOpen /dev/foo bar, o volume_namevalor seria bar.
Patrick

Tenho agora. Há um volume sob o /dev/mappernome luks-...... Esse é o volume que você precisa usar, não o volume lógico mapeado do LVM.
slm

1
Parece que nas versões recentes do dmsetup o formato de dmsetup tablefoi alterado. Pelo menos para mim, a chave mestra é mostrada na coluna $6.
Karol Babioch

@KarolBabioch você provavelmente não especificou o nome do volume?
Frostschutz 11/04/2015
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.