Full Disk Encryption com autenticação de dois fatores para o Ubuntu: Como?

9

Informações básicas

Sou um novato do Linux recentemente desmembrado do Windows. Atualmente estou usando o Ubuntu 11.04 sem criptografia completa de disco. Apenas meu diretório pessoal é criptografado e com o eCryptFS. Ultimamente, comecei a perceber que a criptografia não é tão transparente quanto deveria ser. O VMWare, por exemplo, às vezes tem problemas com máquinas virtuais armazenadas no meu diretório pessoal criptografado, então eu simplesmente movi as máquinas virtuais para um local não criptografado e as vinculei a partir do meu diretório pessoal criptografado. Mas isso é além do ponto: eu percebi que não é muito seguro deixar o sistema descriptografado, já que um sistema operacional de código aberto como o Ubuntu é muito fácil de modificar para divulgar informações que devem manter em segredo.

Objetivo

Eu gostaria de poder trabalhar com criptografia de disco completo em conjunto com um dispositivo de chave e uma senha para autenticação de pré-inicialização.

Requisitos / Detalhes

  1. O disco inteiro deve ser criptografado. No mínimo, o disco consiste em partições individuais, todas criptografadas. Se é possível esconder até mesmo as partições com criptografia, eu vou para isso. Quanto mais transparente for a criptografia, melhor; Eu não deveria ter que usar meu computador de forma diferente ou configurar qualquer outra coisa.
  2. O dispositivo usado para desbloquear e inicializar a partição criptografada deve ser um pequeno dispositivo portátil externo. Isso serve a dois propósitos: o carregador de boot tem muito menos probabilidade de ser alterado para fins mal-intencionados, pois fica comigo quando não está em uso; e os arquivos de chave para descriptografar o disco não serão encontrados em nenhum lugar do próprio disco criptografado de nenhuma forma.
  3. Os arquivos principais devem ser criptografados com uma senha. Se eu perder meu computador e meu dispositivo USB, os dados e o sistema operacional ainda estarão seguros. Se eu perder a chave USB ou estiver comprometida, posso criar outra limpa a partir de um backup. Nenhuma informação é divulgada nos dois casos. É claro que, se eu perder meu computador, isso é irrelevante.

Sim, observei guias de muitos lugares, mas o problema é que eles não atendem a todos os requisitos (especialmente o número 3). Tenho certeza de que meus requisitos são comuns o suficiente para que alguém já tenha tentado e implementado com sucesso essa configuração. Ficaria muito grato se qualquer profissional do Linux pudesse compartilhar uma solução.

    
por Kevin Li 02.07.2011 / 09:04

2 respostas

2

Há uma maneira simples de ter a criptografia completa de disco que requer a presença de um pen drive específico e sua senha para inicializar.

O que você faz é desanexar o cabeçalho LUKS do seu disco rígido totalmente criptografado e armazená-lo no seu pen drive.

Suponho que você já tenha a seguinte configuração:

# /dev/sda1 is the boot partition (100MB)
# /dev/sda2 is the encrypted partition
parted /dev/sda mklabel msdos
parted /dev/sda -- mkpart primary ext2 1M 200M
parted /dev/sda -- mkpart primary ext4 200M -100M
cryptsetup luksFormat /dev/sda2

Crie uma cópia do cabeçalho luks e apague-o do dispositivo local:

mkdir /media/ramdisk && mount -t tmpfs -osize=20m,rw tmpfs /media/ramdisk
cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/ramdisk/header.img
dd if=/dev/urandom of=/dev/sda2 bs=1M count=2

Execute a última etapa várias vezes se você for alvo de uma agência de alto orçamento. Eu também criei um ramdisk para manter o cabeçalho temporariamente para que ele não permaneça depois.

Com seu dispositivo usb em / dev / sdb, crie uma partição de 2MB e carregue o cabeçalho nele:

parted /dev/sdb -- mklabel MSDOS
parted /dev/sdb -- mkpart primary 1M 3M
dd if=/media/ramdisk/header.img of=/dev/sdb1

Agora, tudo em / dev / sda2 se parece com dados aleatórios, e você tem seu cabeçalho em / dev / sdb1. Para acessar manualmente a unidade criptografada, você usa:

cryptsetup luksOpen --header /dev/sdb1 /dev/sda2 rootfs
mount /dev/mapper/rootfs /target

O próximo passo é fazer com que seu processo de inicialização solicite que o pendrive seja inserido na inicialização. Eu achei mais fácil apenas assumir que vai estar lá e falhar de outra forma. Primeiro, descubra o id e o UUID dos seus dispositivos:

find -L /dev/disk/by-id/ -samefile /dev/sdb1
/dev/disk/by-id/usb-Generic-_Compact_Flash-part1
find -L /dev/disk/by-id/ -samefile /dev/sda2
/dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2

blkid /dev/sdb1
/dev/sdb1: UUID="63347546-2db3-4bc1-9414-1142739a4c9f" TYPE="crypto_LUKS"

Em seguida, edite sua linha /etc/crypttab para ficar assim:

root /dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2 none luks,header=/dev/disk/by-id/usb-Generic-_Compact_Flash-part1

(Você pode precisar de este patch para obter suporte para a opção header em crypttab )

Por último, mas não menos importante, atualize seu initram:

update-initramfs -u

Você poderia levar isso um passo adiante e, na verdade, ter o todo partição de inicialização carregada na unidade USB . O autor deste artigo estava neste site fazendo um follow-up .

Existem muitos abordagens diferentes você pode tirar um>, com diferentes graus de segurança e conviniência.

Uma nota específica sobre segurança: se sua frase secreta for comprometida, qualquer pessoa com uma cópia do cabeçalho poderá descriptografar os dados, mesmo se você alterar a senha mais tarde.

    
por 02.07.2015 / 21:04
1

Eu sei que o TrueCrypt está disponível para OSX, Windows e Linux. Você é capaz de fazer dois níveis de criptografia para toda a unidade. Eu usei no Debian com criptografia de disco completo AES. Requer a senha na inicialização para acessar os dados no disco rígido.

    
por 02.07.2011 / 13:36