RaizeSwapCriptografados
Instalando Ubuntu 6.06 com / e swap criptografados
Conteúdo |
Eis o procedimento que segui para fazer uma instalação criptografada do Ubuntu Dapper 6.06. Seguindo este procedimento, você terá um sistema com 1 partição / e 1 partição swap ambos criptografados totalmente. O processo não é tão simples como uma instalação normal pois o instalador do Ubuntu ainda não suporta criptografia, então temos que fazer uma instalação em dois estágios. Este tipo de instalação é especialmente recomendada para notebooks, pois os mesmos podem ser roubados e com eles todos os seus dados importantes (mas se seu notebook for roubado enquanto estiver em uso, ligado, toda a criptografia do mundo não fará diferença pois seus dados já estarão expostos. O mesmo vale para acessos externos via rede).
Prefácio
Este documento não se propõe a explicar o valor da sua privacidade e da criptografia. Para mais sobre este assunto, recomendo "The Eternal Value of Privacy" por Bruce Schneier e "Why I wrote PGP" por Philip Zimmermann. Tampouco entra em detalhes sobre os diferentes algoritimos e tipos de cifras, para isso, nada como Wikipedia (veja mais nas referências abaixo).
Além disso, o procedimento mostrado aqui não lhe dará o sistema mais seguro do mundo. Há que se fazer um compromisso entre segurança (ou paranóia) e usabilidade, então este texto relata o que é aceitável para mim no momento. Para mais informações sobre os níveis de segurança de um sistema Linux encriptado, leia aqui.
Tenha em mente também que um sistema de arquivos criptografado terá uma performance pior do que um normal. Nos meus testes notei que a perda de performance é pequena, em torno de 5% para um processador moderno (Pentium 4, Athlon 64) com discos rápidos, piorando apenas quando se trabalha com arquivos muito grandes. No meu entender vale a pena, é um bom compromisso pela segurança, e com o poder de processamento continuamente aumentando, isto se torna irrelevante.
Começando
Para fazer minha instalação, tive como base estes dois tutoriais: aqui e aqui.
Assumiremos neste texto que nosso HD está em /dev/sda e, ao final do processo, ficaremos com a seguinte estrutura de partições:
/dev/sda1 |
montada em /boot |
100mb |
ext3 (não encriptada) |
/dev/sda2 |
swap |
512mb |
(encriptada) |
/dev/sda3 |
montada em / |
todo o resto do HD |
ext3 (encriptada) |
Precisaremos de 2 CDs do Ubuntu 6.06: a versão "server" e a versão "alternate" ou a "desktop". Estes últimos são apenas para não termos que baixar 600+ megas de arquivos quando passarmos do terminal para um desktop gráfico completo.
Comece a instalação com o CD "server", e faça a instalação normal. Na etapa de particionamento do disco, crie a partição /dev/sda1 montada em /boot, conforme acima, porém monte o / na partição /dev/sda2 de 512mb como ext3 (não se preocupe, alteraremos depois). Crie também a partição /dev/sda3 como ext3 com o tamanho máximo restante porém não a monte em nenhum lugar. Ignore o aviso do instalador de que você não tem nenhuma partição swap, tudo bem, por ora não precisamos dela.
Instalando o software criptográfico e configurando a inicialização
Habilite o repositório Universe (e mais qualquer outro que quiser) e atualize o banco de dados de pacotes com um sudo aptitude update. Em seguida instale os pacotes: cryptsetup, hashalot e initramfs-tools (sudo aptitude install cryptsetup hashalot initramfs-tools).
Edite o arquivo /etc/kernel-img.conf, adicionando a linha abaixo ao final do mesmo:
ramdisk = /usr/sbin/mkinitramfs
Edite o arquivo /etc/mkinitramfs/modules, e inclua as seguintes linhas ao final:
dm_mod dm_crypt sha256 aes_i586
Crie o arquivo /etc/mkinitramfs/hooks/cryptoroot com o conteúdo:
PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac if [ ! -x /sbin/cryptsetup ]; then exit 0 fi . /usr/share/initramfs-tools/hook-functions mkdir ${DESTDIR}/etc/console cp /etc/console/boottime.kmap.gz ${DESTDIR}/etc/console copy_exec /bin/loadkeys /bin copy_exec /usr/bin/chvt /bin copy_exec /sbin/cryptsetup /sbin
Crie o arquivo /etc/mkinitramfs/scripts/local-top/cryptoroot com o seguinte conteúdo:
PREREQ="udev" prereqs() { echo "$PREREQ" } case $1 in # get pre-requisites prereqs) prereqs exit 0 ;; esac /bin/loadkeys /etc/console/boottime.kmap.gz modprobe -Qb dm_crypt modprobe -Qb aes_i586 modprobe -Qb sha256 if grep -q splash /proc/cmdline; then /bin/chvt 1 fi /sbin/cryptsetup luksOpen /dev/sda3 cryptoroot if grep -q splash /proc/cmdline; then /sbin/usplash -c & sleep 1 fi
Torne os dois arquivos criados executáveis:
$ sudo chmod +x /etc/mkinitramfs/hooks/cryptoroot $ sudo chmod +x /etc/mkinitramfs/scripts/local-top/cryptoroot
Por fim, atualize a imagem do initrd:
$ sudo update-initramfs -u ALL
Criando o sistema de arquivos criptografado
Agora iremos criar o sistema de arquivos criptografado em /dev/sda3 (futuro /), usando LUKS e o algoritmo AES com hashs usando SHA-256. Digite os comandos abaixo:
Desmontamos a partição, para garantir
$ sudo umount /dev/sda3
Opcional: verifique se a partição não tem erros (demorado)
$ sudo /sbin/badblocks -c 10240 -s -w -t random -v /dev/sda3
Opcional (mas recomendado): preencha a partição inicialmente com dados aleatórios, para impedir análise magnética do disco (demorado)
$ sudo dd if=/dev/urandom of=/dev/sda3
Vamos agora criar a partição LUKS criptografada e formatá-la. Estou usando uma chave de 256 bits para critografar a partição (--key-size=256), mas se você não for tão paranóico quanto eu pode relaxar isso um pouco para 192 ou 128 bits para ganhar performance. 128 bits é o que a Agência de Segurança Nacional (NSA) americana recomenda para documentos Classified. Para documentos Top-Secret ela recomenda chaves de 192 ou 256 bits.
Atenção! Escolha bem a senha (passphrase) para sua partição! Ela é o elo mais fraco da corrente, de nada adianta usar chaves de 256 bits e algoritmos avançadíssimos se sua senha é pequena ou estúpida. Minha recomendação é escolher a senha usando a metodologia Diceware (que proporciona uma boa combinação de passphrases fortes porém fáceis de lembrar), com 5 palavras no mínimo, o que lhe dará uma senha de aproximadamente 64.5 bits de entropia. Aumente o número de palavras e/ou adicione caracteres aleatórios para aumentar a força da senha.
$ sudo modprobe dm_crypt $ sudo modprobe sha256 $ sudo modprobe aes_i586 $ sudo cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 luksFormat /dev/sda3 $ sudo cryptsetup luksOpen /dev/sda3 cryptoroot
Confirme que tudo correu bem:
$ sudo cryptsetup status cryptoroot /dev/mapper/cryptoroot is active: cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/.static/dev/sda3 offset: 2056 sectors size: 20962706 sectors mode: read/write
Agora criamos o sistema de arquivos (ext3 no caso):
$ sudo mkfs.ext3 /dev/mapper/cryptoroot
E agora populamos a partição (um pouco demorado):
$ sudo mkdir /mnt/target $ sudo mount /dev/mapper/cryptoroot /mnt/target $ sudo cp -avx / /mnt/target $ sudo chown -R $(whoami):$(whoami) /mnt/target/home/$(whoami)
Edite /mnt/target/etc/fstab e troque:
/dev/sda2 / ext3 defaults,errors=remount-ro 0 1
Por:
/dev/mapper/cryptoroot / ext3 defaults,errors=remount-ro 0 1
Configurando o GRUB e testando
Edite o arquivo /boot/grub/menu.lst e adicione o seguinte ao final do mesmo (após "### END DEBIAN AUTOMAGIC KERNELS LIST"):
title Cryptotest root (hd0,0) kernel /vmlinuz-<sua versão do kernel> root=/dev/mapper/cryptoroot ro initrd /initrd.img-<sua versão do kernel> savedefault boot
PS.: você pode achar sua versão do kernel rodando uname -r ou copiando dos outros esquemas de boot no mesmo arquivo.
Agora vamos reiniciar e testar. Dê um sudo reboot e após reiniciar, quando aparecer:
GRUB Loading stage 1.5. GRUB Loading, please wait... Press ESC to enter the menu
Pressione ESC e escolha a última opção ("Cryptotest"). O kernel vai cuspir um monte de mensagems de debug, isso é normal por enquanto. Até que um momento tudo irá parar com a frase seguinte na tela:
Enter LUKS passphrase:
Digite sua senha (passphrase) da partição / criptografada e dê Enter. O sistema deve continuar a bootar e chegaremos ao prompt de comando de novo. Agora falta pouco!
Finalizando
Faça login com seu usuário normalmente. Vamos agora habilitar a partição swap criptografada. Edite o arquivo /etc/crypttab e adicione a seguinte linha:
cryptoswap /dev/sda2 /dev/urandom swap
Edite o arquivo /etc/fstab e adicione:
/dev/mapper/cryptoswap none swap sw 0 0
Rode:
$ sudo invoke-rc.d cryptdisks restart $ sudo swapon /dev/mapper/cryptoswap
Edite o arquivo /boot/grub/menu.lst e remova as linhas que adicionamos anteriormente (tudo após "## END DEBIAN AUTOMAGIC KERNELS LIST"). Em seguida ache a linha contendo:
# kopt=root=/dev/hda2 ro
E altere para:
# kopt=root=/dev/mapper/cryptoroot ro
Salve o arquivo e rode:
$ sudo update-grub
Pronto! Você já tem um sistema operacional com (quase) tudo encriptado. Só falta agora instalar o resto do Ubuntu.
Instalando o ambiente gráfico
Ponha o CD do Ubuntu versão "alternate" ou "desktop" no drive e digite:
$ sudo apt-cdrom add
Agora, instale o meta-pacote do sistema gráfico e seus programas:
$ sudo aptitude install ubuntu-desktop
Ou substitua por kubuntu-desktop, ou xubuntu-desktop ou ainda edubuntu-desktop conforme desejar. Ao final, faça login pelo GDM e vá em Sistema -> Adminstração -> Suporte a Idiomas para terminar de instalar os pacotes de linguagem para português.
Pontos fracos
O modelo proposto tem um defeito: a partição /boot, onde ficam o kernel e o initrd, não é criptografada. Se fosse, não seria possível bootar o computador sem auxílio externo (disquetes, pen drives usb, cd-roms). Assim, um atacante muito avançado de posse de seu computador poderia, em tese , alterar o seu kernel e seu initrd de alguma maneira a tentar comprometer suas chaves criptográficas.
A solução para isso é um sistema bootando de um pen drive USB externo, que irá conter o kernel e tudo mais necessário para inicializar o sistema. Este pendrive deverá ser carregado com você sempre, deverá ser ele mesmo encriptado (para o caso de perda) e você não deve deixar que o mesmo seja roubado junto com o seu computador.
De qualquer maneira, se você precisa deste nível de segurança para seus dados, você tem outras preocupações mais importantes, como escolher uma fortíssima passphrase para suas partições e quão bem você está pagando o time de guardas fortemente armados que fazem a proteção de seu computador 24 horas por dia. Mais informações aquie aqui.
TO-DO
- Inclusões, remoções e alterações de senhas (passphrases) no LUKS
- Como fazer mais de uma partição criptografada com chaves e/ou algoritmos diferentes
- Uso de pendrive USB com chave criptográfica como senha (passphrase) - como montar na inicialização?
- /boot em pendrive USB encriptado com kernel e initrd, além das chaves criptográficas para as partições no HD (dando boot no computador pelo USB - modelo mais seguro possível)
- Benchmarks de diferença de performance entre sistema normal e criptografado, com diferentes tamanhos de chave (128, 192 e 256 bits)
Referências e maiores informações
Créditos
Texto original escrito por RodrigoTassinari adaptado dos tutoriais mencionados do Wiki internacional do Ubuntu. Qualquer ajuda é apreciada, se puder contribuir, por favor faça! :o)
Wikifier: RodrigoTassinari |
Data: 10/12/2006 |
Mantenedor: RodrigoTassinari |
RaizeSwapCriptografados (last edited 2011-09-19 23:22:39 by localhost)