12.13. Encriptando partições de um disco

Contribuição de Lucky Green.

O FreeBSD oferece excelentes proteções em tempo de uso para controlar acesso não autorizado aos dados. Permissões de arquivos e Controle de Acesso Mandatório (MAC) (Mandatory Access Control, veja Seção 10.12) ajudam a prevenir acessos não autorizados de terceiros tentando acessar os dados enquanto o sistema operacional está ativo e o computador ligado. Entretanto, as proteções fornecidas pelo sistema operacional são irrelevantes se um atacante tem acesso físico ao computador, podendo, simplesmente, mover os dispositivos para um outro sistema para copiar e analisar os dados significantes.

Não nos preocupando de como o atacante adquiriu acesso e apossou-se do disco rígido ou de como ele desligou o computador, a Encriptação de Disco Baseada em Geometria (gbde, GEOM Based Disk Encryption) pode proteger os dados nos sistemas de arquivos contra o mais motivado dos atacantes com recursos significantes. Em contrapartida aos desajeitados métodos de encriptação utilizado em arquivos individuais, o gbde encripta, de maneira transparente, todo o sistema de arquivos. Nenhum texto sem encriptação chega a ser armazenado no disco rígido.

12.13.1. Ativando o gbde no kernel

  1. Torne-se o usuário root

    Configurar o gbde requer privilégios de superusuário.

    % su -
    Password:
    
  2. Verifique a versão do sistema operacional

    O gbde(4) requer a utilização do FreeBSD 5.0 ou versão superior.

    # uname -r
    5.0-RELEASE
    
  3. Adicione o suporte ao gbde(4) no arquivo de configuração do kernel

    Utilizando seu editor de textos favorito, adicione a seguinte linha no seu arquivo de configuração de kernel:

    options GEOM_BDE

    Após configurar, recompile e instale kernel do FreeBSD. Este processo está descrito em Capítulo 9.

    Reinicie utilizando o novo kernel.

12.13.2. Preparando a encriptação do disco rígido

O exemplo que segue assume que você adicionou um novo disco rígido no seu sistema e este terá uma partição encriptada. Esta partição será montada como /private. O gbde também pode ser utilizado para encriptar o /home e o /var/mail, mas isso requer instruções mais complexas que excedem o escopo desta introdução.

  1. Adicionando um novo disco rígido

    Instale o novo disco no sistema como explicado em Seção 12.3. Para o propósito deste exemplos, uma nova partição foi adicionada a este disco como /dev/ad4s1c. Os dispositivos /dev/ad0s1* representam partições padrões do FreeBSD no sistema do exemplo.

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4
    
  2. Crie um diretório para o gbde armazenar seus arquivos de trava

    # mkdir /etc/gbde
    

    Os arquivos de trava do gbde contém informações que o gbde precisa para acessar partições encriptadas. Sem ter acesso aos arquivos de trava o gbde não será capaz de desencriptar os dados contidos na partição encriptada sem intervenção manual significanete, o que não é suportado pelo programa. Cada partição encriptada usa arquivos de travas separados.

  3. Inicialize a partição gbde

    Uma partição gbde deve ser iniciada antes de poder ser utilizada. Este processo precisa ser realizado pelo menos uma vez:

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c
    

    O gbde(8) abrirá seu editor, permitindo que você configure diversas opções fornecidas num modelo. Para utilizar com UFS1 ou UFS2, configure o sector_size para 2048:

    $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $
    #
    # Sector size is the smallest unit of data which can be read or written.
    # Making it too small decreases performance and decreases available space.
    # Making it too large may prevent filesystems from working.  512 is the
    # minimum and always safe.  For UFS, use the fragment size
    #
    sector_size     =       2048
    [...]
    

    O gbde(8) perguntará duas vezes a frase de encriptação utilizada para assegurar os dados. A frase de encriptação deve ser a mesma em ambas as vezes. As habilidades do gbde para proteger seus dados depende inteiramente da qualidade da frase de encriptação que você escolhe. [1]

    O comando gbde init cria um arquivo de trava para a sua partição gbde que neste exemplo é armazenado como /etc/gbde/ad4s1c.

    CuidadoOs arquivos de trava do gbde devem ser copiados junto ao backup do conteúdo das partições encriptadas. Apagando um arquivo de trava sozinho pode não prevenir que um atacante determinado consiga desencriptar a partição gbde, sem o arquivo de trava, mesmo o proprietário dos dados não conseguirá acessar os dados na partição encriptada sem uma quantidade significante de trabalho que é totalmente isento suporte, tanto do gbde(8) quanto de seu desenvolvedor.

  4. Anexando a partição encriptada ao kernel

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    Você será solicitado a fornecer a frase de encriptação que você selecionou durante a incialização da partição encriptada. O novo dispositivo encriptado será mostrado em /dev como /dev/device_name.bde:

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4        /dev/ad4s1c.bde
    
  5. Criar um sistema de arquvos encriptado no dispositivo

    Uma vez que o dispositivo encriptado foi anexado ao kernel, você pode criar um sistema de arquivos nele. Para criar um sistema de arquivos no dispositivo encriptado use o newfs(8). Considerando ainda que é muito mais rápido de iniciar um novo sistema de arquivos UFS2 que um velho UFS1, utilizando o newfs(8) com a opção -O2 é uma recomendação.

    Nota: A opção -O2 é o padrão para o FreeBSD 5.1-RELEASE e versões mais novas.

    # newfs -U -O2 /dev/ad4s1c.bde
    

    Nota: O comando newfs(8) deve ser executado na partição gbde anexada que é identificada pela extensão *.bde no nome do dispositivo.

  6. Montar a partição encriptada

    Crie um ponto de montagem para o sistema de arquivos encriptado.

    # mkdir /private
    

    Monte o sistema de arquivos encriptado.

    # mount /dev/ad4s1c.bde /private
    
  7. Verifique se o sistema de arquivos encriptado está utilizável

    O sistema de arquivos encriptado agora deve poder ser visível na listagem do comando df(1) e deve estar disponível para uso.

    % df -H
    Filesystem        Size   Used  Avail Capacity  Mounted on
    /dev/ad0s1a      1037M    72M   883M     8%    /
    /devfs            1.0K   1.0K     0B   100%    /dev
    /dev/ad0s1f       8.1G    55K   7.5G     0%    /home
    /dev/ad0s1e      1037M   1.1M   953M     0%    /tmp
    /dev/ad0s1d       6.1G   1.9G   3.7G    35%    /usr
    /dev/ad4s1c.bde   150G   4.1K   138G     0%    /private
    

12.13.3. Montando um sistema de arquivos encriptado existente

Após cada início do sistema, qualquer sistema de arquivos encriptado deve ser reanexado ao kernel, verificado se possui erros, e montado, isso tudo antes do sistema de arquivos poder ser utilizado. Os comandos necessário devem ser executados pelo usuário root.

  1. Anexar uma partição gbde ao kernel

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    Você será solicitado a fornecer a frase de encriptação que você selecionou durante a inicialização da partição gbde encriptada.

  2. Checar erros no sistema de arquivos

    Considerando que os sistemas de arquivos encriptados ainda não podem ser listados no /etc/fstab para a montagem automática, o sistema de arquivos deve ser checado através da execução manual do fsck(8) antes de ser montado.

    # fsck -p -t ffs /dev/ad4s1c.bde
    
  3. Montar um sistema de arquivos encriptado

    # mount /dev/ad4s1c.bde /private
    

    O sitema de arquivos encriptado agora está disponível para o uso.

12.13.3.1. Montagem automática de sistemas de arquivos encriptados

É possível criar um script que automaticamente, anexe, verifique, e monte a partição encriptada, mas por motivos de segurança o script não deve conter a frase de encriptação do gbde(8). Ao invés de fazer isso, é recomendado que este script seja executado manualmente enquanto se provê a frase de encriptação via console ou ssh(1).

12.13.4. Proteções de encriptação empregadas pelo gbde

O gbde(8) encripta um setor utilizando AES de 128-bit em modo CBC. Cada setor do disco é encriptado com uma chave AES diferente. Para mais informações sobre o projeto de encriptação do gbde, incluindo como as chaves para os setores são derivadas da frase encriptação fornecida pelo usuário, veja a página de manual do gbde(4).

12.13.5. Informações de compatibilidade

O sysinstall(8) é incompatível com dispositivos encriptados do gbde. Todos os dispositivos *.bde devem ser desconectados do kernel antes da execução do sysinstall(8) ou haverá uma parada de execução durante a fase inicial do programa onde é feita uma pesquisa sobre os dispositivos disponíveis. Para desconectar o dispositivo encriptado utilizado no exemplo dado, use o seguinte comando:

# gbde detach /dev/ad4s1c

Note também que como o vinum(4) não utiliza o subsistema geom(4), ele também não possibilita o uso do gbde com volumes vinum.

Notas

[1]

Para dicas em como selecionar uma frase de encriptação segura e fácil de lembrar, veja o website Diceware Passphrase.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.