domingo, 3 de fevereiro de 2008

Criando uma instalação segura do Ubuntu - Primeira parte

O propósito deste post é reunir, de maneira organizada, um conjunto de dicas que irá tornar a distribuição Ubuntu 7.10 Gutsy Gibbon, do sistema Linux, mais segura. Algumas dicas de otimização também serão incluídas, mas o foco será segurança. O post irá cobrir a instalação do sistema operacional por completo, em uma máquina exclusivamente Linux.


Instalação do Sistema Operacional

1. Escolha um dos mirrors e selecione a imagem de instalação alternate apropriada para a sua arquitetura. Até a presente data, ainda são notadas incompatibilidades de instabilidades de alguns pacotes adicionais disponíveis nos repositórios para as versões 64 bits do sistema. Então, se você pretende ter maior compatibilidade, facilidade de uso, e opção de programas adicionais, recomendo instalar a versão 32 bits, mesmo possuindo um processador com arquitetura 64 bits.
Exemplo da imagem mais comum:
ubuntu-7.10-alternate-i386.iso

Não esqueça de baixar também o arquivo MD5SUMS.

2. Após completar o download, usar o comando abaixo para checar a integridade do arquivo:
# md5sum ubuntu-7.10-desktop-i386.iso
Compare o resultado com a lista MD5SUMS que você baixou, estando correto você já pode gravar o CD.

3. Reinicie a máquina, com o CD no drive e com o Bios configurado para inicializar pelo CD. Uma vez na tela de opções de instalação do CD alternate, para segurança extra, selecione e execute a opção Check CD for Defects. Isso irá realizar uma busca por erros no CD, para garantir que todos os dados tenham sido gravados corretamente. Terminada a busca, prossiga com a instalação do sistema operacional, selecionando a primeira opção do menu.

4. Particionamento dos discos: aqui começa a verdadeira diversão. Nesta tela, durante a instalação do sistema, você irá selecionar a opção Guided - use entire disk and setup encrypted LVM - que significa o seguinte: todo o disco-rígido será utilizado, qualquer partição anteriormente existente será apagada e os dados serão perdidos, e serão criadas 3 partições: uma com os arquivos necessários para inicializar o sistema (grub, etc), uma com o sistema e os arquivos do usuário (home, etc), e uma partição swap. Apenas a partição necessária para a inicialização do sistema é que não será encriptada; as demais serão. A organização fica dessa maneira:
/dev/hda1/boot (ext3) - arquivos necessários para a inicialização
/dev/hda2 (extendido / encriptado)
&&/dev/mapper/root (ext3 encriptado em hda2)
&&/dev/mapper/swap (swap encriptado em hda2)
Precisando fazer operações nas partições, você pode usar o comando mount no terminal, após a instalação do sistema, para verificar como elas ficaram organizadas e seus respectivos nomes (hdax é meramente ilustrativo aqui).
Você pode, também, durante a instalação do sistema, editar manualmente a organização das partições, podendo criar partições separadas para o home ou para o que você quiser. A opção padrão, no meu caso, é adequada.

5. Lhe será pedido para escolher uma senha (passphrase) para poder acessar as partições encriptadas durante o boot do sistema. Lembre-se de que, sem essa senha, você ficará completamente impedido de acessar qualquer arquivo nestas partições, nem mesmo inicializando pelo modo de segurança (que também irá lhe pedir uma senha), nem usando um Live CD a recuperação será possível. Desta maneira, escolha uma senha que você será capaz de se lembrar e que, ao mesmo tempo, é segura: não faz sentido instalar um sistema super seguro e escolher uma senha fraca. A senha pode ser uma única palavra ou mesmo uma frase. Minhas dicas para você são estas: escolha uma senha que possua, no mínimo, 12 caracteres; que possua letras minúsculas e maiúsculas e números. Sinais gráficos como !, @, #, $, %, etc também podem ser usados. Não use palavras de nenhuma língua, como "caramujo" ou "pinetree", não use dados pessoais.
Uma boa dica de memorização: pense numa frase que você não irá se esquecer, escolha a primeira letra de cada palavra da frase, adicione um número no início da frase e um sinal no final da frase. Um exemplo: Meu pequeno cachorrinho Rex é muito brabo e feliz! - esta frase criaria uma senha assim: MpcRémbef! (já com um sinal de pontuação no final). Adicione um número à frente, por exemplo 86, e a senha criada será: 86MpcRémbef! - uma senha fácil de lembrar, com 12 caracteres, incluíndo letras maiúsculas (2) e minúsculas, acento, números (2) e sinal.
A importância disso é que, usando um método brute force (força bruta, tentando uma combinação por vez), um computador normal é capaz de gerar cerca de 400.000 combinações por segundo. Se uma senha possui apenas letras minúsculas, tudo o que o computador terá de gerar são combinações de letras minúsculas. Se a senha possui letras minúsculas e maiúsculas, o número de combinações já dobra. Se a senha possui letras minúsculas, maiúsculas, sinais gráficos, acentuação e números... Bom, ai o número de combinações, dependendo do tamanho da senha, fica enorme, assim como o tempo, o custo e o trabalho necessários para descobri-la.
Um bom lugar para descobrir o quanto uma senha é forte, e para obter mais dicas sobre senhas, é no site CertainKey.

6. Escolhida a senha das partições, a instalação deve prosseguir normalmente. Quando for configurar um usuário, escolha um nome não muito óbvio, pois o user name é também um dos passos a serem descobertos quando alguém quer invadir a sua privacidade; e considere a possibilidade de não utilizar a mesma senha que você usa para as partições, pois a senha de usuário é utilizada por diversas vezes seguidas, para executar comandos administrativos no terminal e tarefas de manutenção no modo gráfico, em ambos os casos com o sistema já inicializado, muitas vezes conectado à Internet. Quanto mais vezes você tiver que digitar uma senha, e quanto mais coisas o seu computador estiver executando enquanto você a digita, mais suscetível a ser descoberta ela será. Use as mesmas dicas do passo 5 para escolher uma senha de usuário.

7. Uma vez configurada a conta de usuário, a instalação deve prosseguir normalmente.

Terminada a instalação, quando o sistema for inicializado, você verá que é necessário, ainda enquanto o sistema estiver carregando os drivers, digitar uma senha. Sem essa senha, qualquer pessoa só terá acesso aos dados do /boot (arquivos de inicialização do sistema), e a mais nada. Se a pessoa tentar algum outro modo de inicialização, também terá de fornecer essa senha, acabando assim com o problema de inicializar no modo de texto, ou de segurança, como root. Se a pessoa inicializar o computador com um Live CD, não poderá acessar as partições se não tiver as senhas. Se alguém tentar acessar diretamente os arquivos da partições, por meios mais sofisticados, não irá conseguir pois estes estão encriptados com AES.
Lembre-se: o que vale pros outros, vale para você também. Se perder a senha, já era...


Anexo 1: trocando de senha

Após terminada a instalação, se você quiser, poderá trocar a senha do Luks (programa que gerencia as partições encriptadas, ou mesmo adicionar novas senhas.
Adicionar novas senhas? Para quê? Bom, quanto mais senhas você tiver para acessar uma mesma coisa, menos seguro será tal acesso, isso é certo. Mas digamos que você tenha a infelicidade de precisar dividir o computador com alguém. Será melhor que essa pessoa acesse o Luks por uma senha diferente da sua, facilitando assim, uma eventual situação em que você tenha que interromper o acesso dessa pessoa ao seu computador. Para isso o Luks permite a criação de até 15 senhas diferentes.
O procedimento para trocar uma senha antiga por uma nova é o seguinte: 1. você cria e insere a senha nova; 2. você elimina a senha antiga. Sempre nessa ordem.
As senhas são armazenadas em slots.
A primeira coisa que você vai fazer é descobrir como foram nomeadas as suas partições. Para isso você vai usar o comando mount.
Tendo descoberto qual o nome das partições, você usará o seguinte comando para descobrir quais slots já estão usados:
# sudo cryptsetup luksDump [partição]
Onde está [partição] vai o nome da sua partição sem as chaves. Exemplo: # sudo cryptsetup luksDump hda3

Será exibida uma lista onde, sendo que você nunca criou uma senha nova, constará apenas o slot 0 (zero) como usado. É naquele slot que fica armazenada a senha que você criou durante a instalação do sistema.

Para adicionar uma nova senha, use o seguinte comando:
# sudo cryptsetup luksAddKey [partição]
Após criada a nova senha, sugiro que você reinicie o computador e teste a nova senha antes de apagar a antiga.

Tendo reiniciado o computador com a nova senha, para ter certeza de que ela estava funcionando, você irá digitar novamente o comando luksDump, como foi ensinado acima, e irá notar que agora o slot 0 e o slot 1 estão ocupados. É evidente que a senha que você criou na instalação do sistema está no slot 0 e que a senha nova está no slot 1.

Para remover uma das senhas, o comando é o seguinte:
# sudo cryptsetup luksDelKey [partição] [slot]
Exemplo: #sudo cryptsetup luksDelKey hda3 0 (esse comando irá deletar a senha do slot 0)

Com isso você terá um sistema operacional em que todos os arquivos, inclusive os da memória de troca, são encriptados; e saberá alterar a senha ou acrescentar uma senha para alguém com quem você compartilhe o computador, caso seja necessário.
Os procedimentos acima eliminam o acesso sem senha ao root por pessoas que tenham acesso físico à máquina, algo que, na minha concepção, era um grande problema no Ubuntu. Agora mesmo que alguém possua acesso físico a máquina, não poderá acessar coisa algum, de maneira nenhuma, sem a senha que dá acesso aos discos. Quanto mais segura a sua senha, mais seguros estarão os teus dados.

Observações sobre o Luks: minha máquina é bastante modesta, tratando-se de um celeron com apenas 512 MB RAM e um HDD de 5200 RPM. Ainda assim, para minhas aplicações do dia a dia (internet, office, alguma edição de imagens e vetores), não notei nenhum problema de desempenho usando um sistema de arquivos completamente encriptado.

Fonte consultada: ArchWiki


Anexo 2: Senhas da BIOS e outras senhas de hardware

Senhas da BIOS são úteis apenas para uma única coisa: proteger a BIOS de modificações nas suas configurações por pessoas não autorizadas. E só. Mesmo para isso, tal senha é bastante falha, pois toda BIOS pode ser "zerada", normalmente por jumpeamento na placa mãe ou mesmo por curto na própria BIOS. Em nenhum caso uma senha na BIOS irá proteger os dados armazenados no computador, de uma pessoa que tenha acesso físico a máquina. Tal pessoa teria várias opções tais como: 1. zerar a BIOS; 2. substituir o ROM da BIOS por outro idêntico; 3. remover a mídia de armazenamento dos dados e usar outra máquina para acessá-los; 4. etc...
Para a BIOS, recomendo a utilização de uma senha simples, diferente daquela utilizada para a inicialização do sistema (Luks) e para a conta do usuário. O motivo para isso é que a senha da BIOS precisa ser armazenada em algum lugar da BIOS, e não se sabe - pelo menos eu não sei - até que ponto tal senha fica seguramente armazenada.

Outras senhas de hardware: veio ao meu conhecimento, recentemente, no fórum Ubuntu BR, que é possível gravar uma senha de acesso ao hardware, usando um patch - ou extensão - na BIOS, no caso o ATA Security eXtension BIOS (ATASX BIOS). Esse patch pode ser integrado por meio do ROM da própria BIOS ou do ROM da placa de rede, desde que esta dê suporte ao Boot Over Lan. Em ambos os casos, o programa (extensão) que provê a segurança, fica armazenado em uma peça de hardware diferente de onde os dados serão armazenados. Tal proteção se estende até onde uma pessoa possa simplesmente remover a placa de rede ou substituir a BIOS do computador. Ambos procedimentos bastante fáceis de serem usados.
E ainda que tal extensão faça alguma modificação no ROM do próprio HDD, ainda assim seria possível recuperar os dados dele, sem senha alguma, bastando trocar a sua placa, um procedimento utilizado para recuperar dados de HDDs queimados.
Por ser um tanto redundante esse tipo de segurança em um sistema já criptografado, e por ser menos seguro do que a criptografia em si, eu não recomendo e não vejo necessidade de utilizar tais extensões de BIOS.
Outro contra destas medidas extras é o número de passwords que você irá necessitar memorizar e digitar toda vez que for ligar o computador, tornando o processo lento e monótono, para dizer o mínimo.
Ao meu ver, basta uma password de setup na BIOS, com a intenção de apenas proteger, ainda que levemente, alterações na configuração da mesma. Uma senha que eu usaria na minha BIOS seria algo tão simples quanto o aniversário da minha mãe ou do meu pai.

Nenhum comentário: