Linux: LUKS e vários discos rígidos

11

Eu tenho um sistema Debian Linux (amd64) instalado em um dispositivo criptografado do sistema RAID-1 (LVM on LUKS) e terei um RAID-6 de> = 4 discos onde colocarei meus dados (LUKS e talvez LVM).

Eu acho que a idéia básica é desbloquear a partição criptografada do sistema (na inicialização no local ou via ssh) e armazenar um arquivo de chave em / etc / crypttab para a partição criptografada RAID-6. Isso representa um risco à segurança? Quero dizer ... é muito inútil se alguém puder entrar no meu sistema local / remotamente e acho que existem muitos serviços em execução em servidores vulneráveis ​​ao "enraizamento" (por exemplo, SSH). Existe uma alternativa (além de desbloquear a partição via SSH, o que pode ser um problema, porque, por exemplo, as operações de backup são iniciadas antes mesmo da montagem da partição de dados).

Em outra máquina, usarei vários discos com LUKS + greyhole (sem RAID-6) para backups e será muito difícil desbloquear 10 discos inserindo 10 vezes a mesma senha ...

user51166
fonte
Se alguém puder invadir seu sistema e se tornar root, não precisará obter a chave da sua partição criptografada. Não faz sentido protegê-lo da raiz (e isso não é possível sem hardware especial, como um TPM ou executando em uma máquina virtual).
Gilles 'SO- stop be evil'
Desculpe ? Mesmo que eu seja root, tenho que fornecer o arquivo-chave / senha para desbloquear as partições LUKS. Suponho que você queira dizer que, se alguém se tornar root, ele terá acesso total aos meus dados criptografados. Infelizmente, isso é simplesmente verdade porque uma vez que a partição criptografada é montada, não faz diferença se ela é criptografada ou não. Qual seria a vantagem de uma máquina virtual? Então, por que a criptografia deve ajudar? A única solução é negar o acesso ao root via SSH e serviços similares? Mas ainda assim, se um hacker entra no sistema como um usuário normal, ele normalmente tem acesso de leitura a todos os arquivos, não é?
user51166
1
Exatamente, se alguém é root no seu sistema, ele tem acesso a tudo. Uma VM pode significar que eles têm acesso a tudo na VM. O único uso de criptografia é se alguém rouba seu hardware.
Gilles 'SO- stop be evil'
Sim, bem ... nesse caso, podemos argumentar que a única maneira quase segura de armazenar dados é em um computador criptografado desconectado de toda a rede e integrado ao prédio. Ainda assim, alguém poderia vir com um teclado e roubar seus dados sem reiniciar o sistema. Eu também poderia isolar meus sistemas da Internet, pois ele será um servidor de backup, portanto, basta o acesso à LAN. Então, novamente ... se uma VPN for usada ou uma das máquinas da LAN for infectada, a máquina de backup também será exposta. O que você faria para resolver esses problemas?
user51166
veja também unix.stackexchange.com/a/110102/50601
Tim Abell

Respostas:

7

Você pode usar /lib/cryptsetup/scripts/decrypt_derivedno seu crypttabpara usar automaticamente a chave de um disco para outro.

O decrypt_derived script faz parte do pacote cryptsetup do Debian.

Pequeno exemplo para adicionar a chave de sda6crypt para sda5:

/lib/cryptsetup/scripts/decrypt_derived sda6crypt > /path/to/mykeyfile
cryptsetup luksAddKey /dev/sda5 /path/to/mykeyfile
ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab
shred -u /path/to/mykeyfile # remove the keyfile

Como hoje em dia é muito difícil excluir um arquivo, verifique se / path / to / mykeyfile está em uma unidade criptografada ( sda6cryptseria no meu exemplo uma boa solução).

Em geral, você pode adicionar uma camada de segurança adicional usando a criptografia do sistema de arquivos do espaço do usuário, por exemplo, via encfs.

jofel
fonte
Dessa forma, não seria necessário armazenar o arquivo de chaves no disco. Isso seria legal. No entanto, você acha que vale a pena (ou seja, armazenar o arquivo de chave no dispositivo raiz criptografado é "suficientemente seguro")? Estou pedindo uma opinião, pois tenho algumas dúvidas. Obrigado pela sugestão.
user51166
A solução com decrypt_derivedtem a única vantagem, que não há arquivo de chave. Se alguém puder obter acesso root, você normalmente estará perdido de qualquer maneira. Ler um arquivo-chave pode ser um pouco mais fácil para um invasor do que executar um script. Para obter mais segurança, você pode fortalecer seu sistema usando, por exemplo, TOMOYO Linux, AppAmor, SMACK, SELinux, grsecurity, ... mas isso requer esforços adicionais. E a questão de se vale a pena é mais importante. Não se esqueça de ter um backup da chave ou de uma chave separada para o caso em que a unidade falha onde a chave é derivada / armazenada.
Jofel
Eu planejava usar o grsecurity ou softwares semelhantes também (não no início, mas quando tiver tempo, eu o protegerei). Estou pensando em usar apenas senhas e não arquivos-chave, se possível. Bem, a senha será armazenada na RAM, então acho que você pode discutir sobre isso também.
user51166
Não há uma boa maneira de excluir um arquivo de chave em qualquer lugar, exceto sobrescrever todo o sistema de arquivos (e talvez nem isso mesmo se o disco falhar). Um sistema de arquivos com registro em diário não torna as coisas notavelmente piores.
Gilles 'SO- stop be evil'
@Gilles Como não sou especialista em excluir arquivos com segurança, editei minha resposta. Eu recomendo agora armazenar o arquivo de chave na unidade criptografada.
Jofel
1

Com base na resposta jofels, aqui está o mesmo exemplo, mas sem ter que armazenar a chave em um arquivo. A chave é passada em um pipe nomeado, que não armazena nada no disco.

Você pode usar /lib/cryptsetup/scripts/decrypt_derivedno seu crypttab para usar automaticamente a chave de um disco para outro. O decrypt_derivedscript faz parte do pacote cryptsetup do Debian.

Exemplo modificado para adicionar a chave de sda6crypt para sda5:

mkfifo fifo
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > fifo &
cryptsetup luksAddKey /dev/sda5 fifo
rm fifo

ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,initramfs,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab

A keyscriptopção só funciona se crypttabfor processada pelas ferramentas originais de configuração de criptografia do Debian, a reimplementação do systemd atualmente não a suporta. Se o seu sistema usa systemd (que é a maioria dos sistemas), você precisa da initramfsopção para forçar o processamento do initrd pelas ferramentas de configuração de criptografia, antes de o systemd iniciar.

JanKanis
fonte