Mini-How-To: Criptografando seus dados de forma transparente: O sistema super-seguroIntroduçãoSempre tive receio em deixar dados pessoais (e comprometedores) no meu computador. O medo é que os dados sejam interceptados em caso de roubo. Não tenho notebook, mas acredito que os usuários desse tipo de sistema estão ainda mais vulneráveis a esse classe de problema.
Para a segurança de dados, sempre optei por criptografar os arquivos mais importantes usando o algoritimo PGP. Evidentemente, isto é muito cansativo, pois cada arquivo deve ser criptografado e "descriptografado" manualmente. (Aqui, o risco maior é você mesmo esquecer a chave de um de seus arquivos e nunca mais poder acessar os seus dados.) Após algumas pesquisas, acho que a melhor forma de proteger os seus dados é criptografando uma partição inteira. Assim, tudo que for armazenado na partição será criptografado automaticamente.
Neste Mini-How-To, eu apresento os passos necessários para criptografar uma partição inteira. Isto é feito tendo em mente dois objetivos: a) montar e desmontar a partição da forma mais transparente possível e b) proteger os dados a qualquer custo. Como será visto, a proteção dos dados não envolve apenas cuidados com a partição em si, mas também com outras partes do sistema como, por exemplo, a memória virtual e o diretório /tmp.
Instalação do SoftwareO software necessário é bastante simples. Precisamos do
DM-Crypt (
http://en.wikipedia.org/wiki/DM-Crypt), que criptografa os dados antes de escrevê-lo no disco rígido, e do
pam_mount, um módulo do PAM (
http://en.wikipedia.org/wiki/Pluggable_Authentication_Modules) que permite montar partições diferentes para cada usuário e (mais importante) associa-las ao sistema
dm-crypt.
apt-get install libpam-mount cryptsetup
Habilitando a Montagem AutomáticaVocê terá que modificar a configuração do PAM para poder usar o
pam_mount. Neste mini-how-to, considerarei apenas a configuração para o console (modo texto) e o GDM (acredito que a configuração seja a mesma para o KDM).
Para o console e o GDM, acrescente as seguintes linhas ao final dos arquivos
/etc/pam.d/login e
/etc/pam.d/gdm.
auth optional /lib/security/pam_mount.so use_first_pass
session optional /lib/security/pam_mount.so
Pronto! Essas modificações irão permitir a você logar no seu sistema digitando apenas uma senha. Isto ocorre devido a opção
use_first_pass que diz ao
pam_mount para utilizar a mesma senha utilizada no login do sistema.
Preparação da PartiçãoBom... este mini-how-to trata de proteção paranóica e não de esconder dados da sua irmão mais nova. Então, antes de criptografar a partição é importante preencher a partição com dados aleatórios. Isto dificultará ao máximo a descoberta da chave de proteção utilizada na criptografia.
Existem várias formas de preencher o disco com dados aleatórios. Eu selecionei apenas três.
>> O programa
shredO
shred é um programa dos sistemas unix que elimina dados do disco rígido sobrescrevendo-os quatro vezes. É um método rápido, mas os algoritmo utilizado não usa dados aleatórios o suficiente.
>> O
/dev/urandomO
/dev/urandom parece ter a melhor relação custo/benefício. Os dados são (quase) 100% aleatórios (muito mais do que os fornecidos pelo
shred) e a operação não é tão demorada.
>> O
/dev/randomEste é o campeão de segurança. Com o
/dev/random, os dados aleatórios são retirados diretamente da "piscina de entropia" (do inglês: entropy pool) do kernel. Essa piscina é a fonte de números aleatórios do kernel. Não são números pseudo-aleatórios como nos casos anteriores. Contudo, o
/dev/random tem um grande problema! A única forma de obter dados (realmente) aleatórios é de eventos externos ao kernel. Assim, a piscina de entropia é preenchida apenas com dados oriundos de dispositivos de I/O (rede, HD, mouse, etc). Dessa forma, tal piscina fica "seca" rapidamente e deve-se esperar algum tempo até que ela esteja cheia novamente. Para entender o que estou dizendo, execute o seguinte comando.
cat /dev/random
Você verá que, em poucos segundos, a operação parece parar. Contudo, basta você mexer um pouco o mouse para que mais dados aleatórios caíam dentro da piscina de entropia e o processo possa continuar (faça
ctrl+c para interrompe-lo). Dessa forma, você deverá levar uns 300 anos para encher toda uma partição com dados aleatórios vindos do
/dev/random.
Então, para preencher a partição com dados aleatórios, utilize o comando a seguir.
dd if=/dev/urandom of=/dev/hdd1 bs=1M
Vá tomar um café enquanto fica olhando o LED do HD brilhar, pois este processo leva vários minutos.
Criando o Mapeamento para o dm-cryptAgora que o HD possui dados aleatórios, podemos habilitar o processo de criptografia da partição. Contudo, antes de iniciar, você deve criar uma chave a ser utilizada no processo. A escolha da chave é importante! Uma chave fraca tornará mais fácil a sua descoberta na "força-bruta". Não confie em você mesmo para criar tal chave. Ao invés disso, utilize dados aleatórios como segue.
export KEY=`tr -cd [:graph:] < /dev/urandom | head -c 79`
Isto cria uma chave de 79 caracteres (comando
head -c 79) através do
/dev/urandom e a armazena na variável
KEY. Tomei cuidado para utilizar na senha apenas caracteres imprimíveis (comando
tr -cd [:graph:]). Isto corresponde a utilizar uma chave de criptografia de 512 bits. (Nada mal, heim?)
Com a chave definida, podemos criar um mapeamento para a partição a ser criptografada.
echo $KEY | cryptsetup create secret /dev/hdd1
No comando anterior, foi criado um mapeamento
/dev/mapper/secret para a partição
/dev/hdd1. Agora, o novo dispositivo deve ser formatado.
mkfs.ext3 /dev/mapper/secret
Formatei com o sistema
ext3. Utilize o seu sistema favorito. Em seguida, remova o mapeamento temporariamente.
cryptsetup remove secret[/b]
Facilitando a loginSeja sincero... Você quer digitar uma chave aleatória de 79 caracteres a cada login? Se não quer, vamos guarda-la em um arquivo texto criptografado (claro que é criptografado).
echo $KEY | openssl aes-256-ecb > $HOME/.secret.key
Obs.: Quando o sistema pedir a senha, é importante digitar a mesma senha utilizada no seu login.
Sua chave será guardada em um arquivo texto (invisível)
.secret.key, no seu diretório home. (Você pode guardar tal arquivo onde quiser, mas deve ser um local que você tenha permissões de leitura e escrita.) O arquivo
.secret.key foi cifrado com o algoritmo
aes-256-ecb que utiliza uma chave de 256 bits. Você pode utilizar um outro algoritmo qualquer.
Para você conseguir alterar sua senha mais facilmente, devemos mudar as permissões do arquivo
.secret.key e fazer uma cópia
.secret.key.old.
touch $HOME/.secret.key.old
chown alexbr $HOME/.secret.key $HOME/.secret.key.old
chmod 600 $HOME/.secret.key $HOME/.secret.key.old
Nos comando anteriores, definimos as permissões para o usuário
alexbr. Evidentemente, no seu caso, deves utilizar o seu nome de usuário.
No futuro, para alterar sua senha de login, utilize o seguinte comando.
passwd && passwdehd
Isto altera a sua senha de login e a senha utilizada para criptografar o arquivo
.secret.key.old. É importante que as duas senhas sejam a mesma.
Para finalizar, altere o arquivo
/etc/security/pam_mount.conf. Inclua a linha a seguir.
volume alexbr crypt - /dev/hdd1 /home/secret cipher=aes aes-256-ecb /home/alexbr/.secret.key
Aqui, os parâmetros a serem customizados por você são o nome de usuário (
alexbr), a partição a ser criptografada (
/dev/hdd1) e o seu ponto de montagem (
/home/secret).
Não podemos esquecer também de criar o ponto de montagem da partição e dar permissões ao usuário proprietário.
mkdir /home/secret && chown alexbr:alexbr /home/secret
Aqui,
/home/secret é o ponto de montagem e deve ser substituído de acordo com suas necessidades. Também,
alexbr é um usuário válido no seu sistema.
Pronto! Sua partição criptografada está pronta para ser utilizada. Encerre sua sessão e faça login novamente. Se tudo correr bem, você a partição deve aparecer montada após o login. Agora, basta transferir seus dados mais importantes para esta partição. Não esqueça de transferir para lá os diretórios de armazenamento de suas mensagens instantâneas (
.amsn ou
.gaim), seus emails (
.mozilla-thunderbird ou
.evolution). Para isto, faça algo como o exemplo a seguir.
mv $HOME/.mozilla-thunderbird /home/secret
ln -s /home/secret/.mozilla-thunderbird $HOME/.mozilla-thunderbird
Aumentando a SegurançaO sistema só será super-seguro se os passos da próxima mensagem também forem seguidos.