Implementação de um sistema de arquivos criptografado transparente ao usuário

Segurança total é algo impossível, e mesmo tendo os melhores recursos de segurança na configuração de firewalls ou permissões de acesso, os usuários não estão livres do roubo físico dos seus dados. Criptografar o sistema de arquivos da máquina é uma forma efetiva de proteger-se de roubo de dados.

[ Hits: 83.012 ]

Por: Leandro Padilha Ferreira em 01/10/2004 | Blog: http://androle.pro.br


Criando um script com todos os comandos



Facilmente pode-se criar um script que reúna todos os comandos necessários para montar ou desmontar os dispositivos criados e colocá-lo na inicialização do sistema. A distribuição Debian GNU/Linux tem a seguinte configuração de níveis de execução (run levels):
  1. Shutdown ou halted
  2. Mono-usuário
  3. Multi-usuário sem rede
  4. Multi-usuário
  5. Não usado
  6. Modo gráfico
  7. Reboot

Os scripts (ou links para os scripts) que devem ser executados em cada nível de execução encontram-se no diretório /etc/rcx.d. Por exemplo, os links para os scripts que devem ser executados no nível de execução 2 estão em /etc/rc2.d, e assim sucessivamente. Deve-se colocar o script a ser executado em /etc/init.d e depois criar um link simbólico para o script no diretório do nível de execução que queremos atingir. Há um programa chamado update-rc.d que faz isso automaticamente. O script criado para montar uma partição será chamado hda6.sh e o criado para montar o arquivo arquivo.txt como dispositivo de bloco será chamado crypto.sh. Depois de ambos configurados e feitos executáveis, armazenados em /etc/init.d/, faz-se:

# update-rc.d crypto.sh defaults
# update-rc.d hda6.sh defaults


Imediatamente tem-se os scripts sendo executados a cada inicialização ou desligamento da máquina, em qualquer nível utilizado. Para remover os links simbólicos para algum script de /etc/init.d:

# update-rc.d -f crypto.sh remove
# update-rc.d -f hda6.sh remove


Script hda6.sh


Este script irá reunir todos os comandos necessários para pedir a senha e montar a partição ao iniciar a máquina, bem como desmontá-la quando a máquina for desligada. A seguir tem-se o seu código comentado.

#!/bin/sh
#
# Monta partição criptografada hda6

# partição
PARTICAO=/dev/hda6

# dispositivo usado, /dev/loopX
DEVLOOP=/dev/loop1

# PONTOMONTAGEM de montagem
PONTOMONTAGEM=/mnt/hda6

# algoritmo de encriptação usado
ALGORITMO=blowfish

# mensagens do programa
MSGPREPAR="Preparando-se para montar $PONTOMONTAGEM"
MSGNOROOTUSER="Você deve ser o super-usuário para executar essa ação."
MSGOK="Montado OK!"
MSGERROR="Não foi possível montar $PONTOMONTAGEM"

# testa para ver se o modulo foi carregado, se não foi então carrega
lsmod | grep $ALGORITMO 1>/dev/null 2>/dev/null
if [ $? != 0 ];then
    modprobe $ALGORITMO
    sleep 1
fi

# testa para ver se o cryptoloop esta carregado, se não esta então carrega
lsmod | grep cryptoloop 1>/dev/null 2>/dev/null
if [ $? != 0 ];then
    modprobe cryptoloop
    sleep 1
fi

# se não estiver sendo executado pelo root, então sai do script
if [ "$UID" != "0" ]
then
  echo $MSGNOROOTUSER
  exit 1
fi

# Função para montar dispositivos ou partições
montar()
{
    echo $MSGPREPAR
    losetup -e $ALGORITMO $DEVLOOP $PARTICAO
    if [ $? == 0 ];then
     mount -t auto $DEVLOOP $PONTOMONTAGEM && df -Th | grep $DEVLOOP && echo \\
$MSGOK && exit 0
    fi
}

# Função para desmontar dispositivos ou partições
desmontar()
{
    umount $PONTOMONTAGEM
    losetup -d $DEVLOOP && df -Th |grep $DEVLOOP || echo "Desmontado OK!" && exit 0
    exit 1
}


case "$1" in
  start)
     montar
     ;;
  stop)
     desmontar
     ;;
  *)
     echo "Uso: /etc/init.d/hda1 {start|stop}"
     exit 1
esac

exit 0

O script agrupa todos os passos comentados antes, e faz alguns testes para carregar os módulos se estes ainda não foram carregados. O modo de uso é:

/etc/init.d/hda6.sh start|stop

O argumento "start" monta a partição e o argumento "stop" a desmonta. Com:

# update-rc.d hda6.sh defaults

o script montará, depois de pedir a senha, a partição a cada inicialização da máquina, e a desmontará no desligamento da máquina. A única coisa que o usuário deve fazer é colocar a senha quando pedido. No mais, nem notará que trata-se de uma partição criptografada. Porém, isso impede reboot remoto. É necessário estar fisicamente presente para ingressar a senha, e a cada boot o sistema vai parar nesse ponto de espera, até que uma senha seja fornecida. Se for uma senha incorreta, então a partição não será montada e o sistema continuará a inicialização normal.

Página anterior     Próxima página

Páginas do artigo
   1. Formas de proteger dados no disco rígido usando criptografia
   2. Criptografar o disco todo
   3. Criptografar uma partição
   4. Criptografar um dispositivo de bloco em um arquivo
   5. Descrição do ambiente de testes
   6. Kernel e módulos necessários
   7. Compilando um novo kernel usando o pacote kernel-package
   8. Criando uma partição criptografada
   9. Montando um arquivo como dispositivo de bloco
   10. Criando um script com todos os comandos
   11. crypto.sh
   12. Conclusões
   13. Referências
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Estrutura do Iptables

PortSentry: Melhorando a segurança do seu Linux

Procedimento para descoberta de chave WEP

ClamAV em desktop

Tutorial de Instalação do ClamAV - Anti-vírus open Source

  
Comentários
[1] Comentário enviado por fabio em 01/10/2004 - 11:06h

Isso é o que chamo de artigo, meus parabéns Leandro! :P

[2] Comentário enviado por cvs em 01/10/2004 - 11:44h

muito bom, já estava há um tempo procurando documentação a respeito disso... hehehe valeu ae :D

[3] Comentário enviado por androle em 01/10/2004 - 14:38h

Valeu fabio e cvs!

É muito bom poder colaborar com alguma coisa. Já li artigos excelentes aqui e me ajudaram muito.


[4] Comentário enviado por androle em 01/10/2004 - 20:00h

Levei um puxão de orelha do meu orientador por não comentar o motivo de ter escrito esse artigo.

Artigo desenvolvido para a disciplina de "Segurança Computacional", do curso ARL - Administração em Redes Linux. (http://ginux.comp.ufla.br/arl), cujo tutor foi o professor Joaquim Quinteiro Uchôa.

Ai está professor :-)

[5] Comentário enviado por y2h4ck em 01/10/2004 - 22:35h

Androle nao tive tempo de ler o artigo todo ( mas o farei) mas gostei muito, achei muito bem elaborado. Parabens :)


[6] Comentário enviado por engos em 05/10/2004 - 13:43h

Parabéns pelo artigo, nem sabia que isso é possível... é inacreditável o que se pode fazer com o Linux!

Só uma pergunta, não consegui entender direito como os dados ficam armazenados. Significa que se a partição ou o arquivo estiverem criptografados, mesmo que eu entre (boot) com um rescue disk e monte a partição como praxe, não conseguirei acesso aos dados?

[]s

[7] Comentário enviado por androle em 05/10/2004 - 23:41h

Olá. Obrigado.

Sim, é isso mesmo! Eu testei isso aqui. Se vc não tiver os módulos cryptoloop, loop e blowfish (ou o que vc tiver usado para criptografar), e também a senha correta, os dados ficam inacessíveis. Não tem jeito.

Basta colocar a senha errada e vc não monta a partição ou arquivo. No meu notebook eu coloquei no script uma mensagem dizendo: "Tecle ENTER agora" no momento de pedir a senha. Assim, o sistema inicializa com o /home desmontado :)

Para poder montar a partição criptografada vc precisa da senha, senão o losetup associa a partilção/arquivo ao /dev/loop(0-7), mas o mount não consegue ler a partição e não monta nada. Os teus arquivos estão lá, mas não podem ser lidos, nem pelo root nem por ninguém.

O interessante é que se vc quiser pode montar um arquivo de, digamos, 150KB, como dispositivo de bloco, gravar informações nele e enviá-lo a alguém. Ai, se a pessoa sabe a senha ela pode montá-lo normalmente. Desse modo vc pode ter pacotes criptografados enviados por email sem ter de usar gpg ou outra ferramenta do tipo. E não é muito difícil fazer um pequeno script para enviar junto com o arquivo para facilitar a montagem e extração dos dados. Claro, a senha vc tem de combinar antes com a pessoa através de algum meio seguro de comunicação.

[]' s


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts