blog-post

Criptografar seus dados com LUKSFS e GOCRYPTFS

author image
Índice

Security - XKCD

Por que criptografar? ❔

Se você possui um conjunto de informações e dados (imposto de renda, dados bancários, fotos, documentos importantes ou sigilosos, etc) que não deveriam parar na mão de terceiros (um ladrão, um técnico de informática mal intencionado, um “amigo” querendo lhe prejudicar, etc), então você precisa criptografar seus dados.

Qual o custo de não criptografar?

Será o acesso aos seus dados e a utilização dos mesmos de modo que, por mais criativo que sejas, não terás ideia do que farão.

Qual o custo de criptografar os dados?

Terão os seguintes custos:

  • O tempo dedicado para configuração da criptografia em si (seja instalando a primeira vez ou reconfigurando);
  • Atraso na hora de ligar ou acessar os dados por ter de digitar a senha;
  • Perda de desempenho no computador, por ter de usar o processador para criptografar todos os dados.

Cuidados após criptografar

Você nunca, jamais, em hipótese alguma, deve deixar sua senha anotada em algum lugar ou revelá-la para estranhos.

Quem viveu esse problema na pele, sabe como é.

Não use a mesma senha para tudo e nem tenha padrões de senha que mudam uma palavra ou detalhe conforme o serviço usado!!

Hacking

Criptografar a nível de diretórios/arquivos 📂

Vantagem

A criptografia é a nível de sistema de arquivos, sendo em cada diretório e arquivo.

Isso permite a sincronização de apenas arquivos modificados com o armazenamento em núvem, mantendo tudo criptografado.

Desvantagem

É acessível a data de criação e modificação do arquivo, além do tamanho deste.

Usando estas informações, é possível sugerir o tipo de arquivo que possa estar criptografado.

Como fazer?

Com gocryptfs!!

O Debian utiliza uma versão anterior (2.5.1) mas pode-se pegar a versão mais recente no github releases page . Vem o binário no arquivo compactado.

Criar e montar um sistema de arquivos

Crie as pastas criptografada, que possui o conteúdo encriptado, e plana, com conteúdo legível.

mkdir criptografada plana

Inicialize a pasta criptografada.

gocryptfs -init criptografada

Monte a pasta criptografada para ter o seu conteúdo legível em plana

gocryptfs criptografada plana

Parabéns, você criou uma pasta criptografada com gocryptfs.

Para desmontar, basta executar umount plana

Criptografar a nível de disco/ponto de montagem 💽

Vantagem

Caso seu equipamento seja roubado ou acessado indevidamente, será impossível o acesso a seus dados por não ter acesso nem ao sistema operacional ou ao ponto de partição de sua home, enquanto liga o computador.

Desvantagem

Se criar um container para enviar os dados via Dropbox/Google Drive/One Drive/iCloud/pCloud/NextCloud/etc com tudo criptografado, sempre que houver uma mudança, terás que enviar tudo de novo.

Imaginando que é um container de 1GB e foi alterado 10MB. Será necessário enviar 1GB novamente para seu serviço de armazenamento em núvem.

Como fazer ? 🌱

Com LUKSFS!!

Não precisa instalar o LUKFS pois já vem por padrão no linux, chamado como cryptsetup.

Para usá-lo, criptografando seu sistema operacional, é interessante fazer (ou ter feito) a escolha da opção de particionamento com criptografia na hora de instalar sua distribuição.

Depois de feito, antes de iniciar o sistema operacional sempre será solicitada a senha para descriptar a partição. 😀

Para adicionar um novo disco ou partição criptografada, faça o seguintes passos.

Atenção: possível perda de dados Iremos apagar o disco. Tomara que você tenha feito backup.

Encontre o dispositivo de armazenamento

Com o dispositivo de armazenamento conectado, verifique qual o nome deste com:

fdisk -l

No nosso exemplo, é o /dev/sdb e é um disco de 200GB.

Criando a partição

Como root, execute:

fdisk /dev/sdb

E se tiver partições criadas? Depois de executar o fdisk /dev/sdb escolha o comando d para apagar cada partição, até não sobrar nenhuma e daí prossiga para os próximos passos.

Após, siga com o procedimento de criação da partição que deixarei o que foi feito:

Disk model: Virtual disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x462ca812

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-419430399, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-419430399, default 419430399):

Created a new partition 1 of type 'Linux' and of size 200 GiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Partição criada com sucesso.

Formatando como LUKS

Basicamente, execute como root:

cryptsetup luksFormat /dev/sdb1

Depois disso, será mostrado um alerta e pedirá que você digite YES, maiúsculo mesmo.

Será pedido a senha que será usada para a partição.

WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/sdb1:
Verify passphrase:

Feito!

Abrir o armazenamento LUKS

Para montar a partição, será necessário definir um nome para o ponto de montagem.

Chamarei de coisassecretas.

Execute o seguinte comando de montagem para que seja feito no caminho /dev/mapper/coisassecretas.

cryptsetup open --type luks /dev/sdb1 coisassecretas

Agora o caminho /dev/mapper/coisassecretas está criado e ativo.

Criando sistema de arquivos

Nesta parte você pode criar o sistema de LVM se desejar fazer várias partições e quiser a liberdade de aumentar o tamanho conforme a necessidade.

Ou… usar tudo em um ext4 (é o que farei).

Não vá se confundir. Nessa etapa é para criar a partição no /dev/mapper/coisassecretas e NÃO no /dev/sdb1.

Execute como root:

mkfs.ext4 /dev/mapper/coisassecretas

Sistema de arquivos feito!

Montando sistema de arquivos

Agora é a parte de montar em uma pasta que desejar.

No exemplo, colocarei em /mnt/coisassecretas.

mkdir /mnt/coisassecretas

mount /dev/mapper/coisassecretas /mnt/coisassecretas

Desmontando sistema de arquivos e fechando armazenamento LUKS

Imaginando que o que tinha de ser editado ou visto já finalizou, vamos desmontar o sistema de arquivos e fechar o sistema de arquivos criptografado.

Como root:

umount /mnt/coisassecretas

cryptsetup close /dev/mapper/coisassecretas

Montando sistemas de arquivos em armazenamento LUKS via fstab com senha

Adicione a seguinte linha ao /etc/fstab

/dev/mapper/coisassecretas /mnt/coisassecretas        ext4 defaults     0       0

E adicione isso ao /etc/crypttab

coisassecretas /dev/sdb1 none

Feito, agora sempre será solicitado uma senha quando ligar seu computador para desencriptar e montar a partição de seu disco.

Mas caso não queira digitar mais de uma vez a senha, siga para a próxima seção.

Montando sistemas de arquivos em armazenamento LUKS via fstab com chave

O LUKS permite guardar até 8 chaves por disco encriptado.

No caso, você precisará de uma além da que você já usava.

Como a chave será resgatada automaticamente pelo sistema, faça o seguinte procedimento.

  1. Crie uma chave aleatória com dd, no exemplo, a chave será colocada na pasta /root.
dd if=/dev/random bs=32 count=1 of=/root/chavealeatoria
  1. Adicione a chave criada como mais uma das chaves do LUKS. Será solicitada a senha do sistema de arquivos criptografado LUKS.
cryptsetup luksAddKey /dev/sdb1 /root/chavealeatoria
  1. Adicione as modificações nos devidos arquivos para montagem automática.

Acrescente as seguintes informações no arquivo /etc/crypttab.

coisassecretas /dev/sdb1 /root/chavealeatoria

Agora é só reiniciar. Se sua partição / estiver criptografada com o LUKS, só será requisitada a senha uma única vez e a segunda partição criptografada será montada automaticamente!🙂

Caso deseje checar os espaços de chaves que o LUKS possui e alguns outros detalhes, execute:

cryptsetup luksDump /dev/sdb1

Full Disk Encryption com LUKS

🌱🌱🌱🌱🌱 Já uso tem um tempo, devo acrescentar em breve. Por enquanto vou por apenas uma solução de problemas que tive de lidar.

Problema no such cryptodisk found

Essa mensagem de erro acaba funcionando apenas como warning, afinal a inicialização do sistema continua normalmente.

Para resolver esse problema basta montar a partição do boot ou boot/efi, caso já não esteja montado, e executar o comando:

sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

Fim.

Problema de perda do boot por usar o grub-install sem parâmetros

Então você executou o comando grub-install sem usar os parâmetros que explicitei antes e está aqui desesperado porque seu computador não encontra mais partição de boot.

Seus problemas se acabaram.

Inicie um sistema operacional em pendrive

Inicie uma imagem “bootável” (com um pendrive, por exemplo) do mesmo sistema operacional que usas.

Inicie o sistema operacional em modo UEFI e não no modo legado (ajusta na BIOS para não usar o modo legado).

Se você fez tudo certinho, a saída deste comando com o SO aberto, mostrará vários arquivos:

sudo ls /sys/firmware/efi/efivars

Identificando a partição criptografada

No terminal, execute este comando para verificar as partições criptografadas:

lsblk -f

Para mim, as partições criptografadas aparecem como tipo crypto 1.

Chamarei a partição criptografada root de sdX2 e o EFI de sdX1.

Montando a partição criptografada

Descriptografe a partição com o comando:

sudo cryptsetup luksOpen /dev/sdX2 cryptroot

Se, como eu, você utiliza LVM, execute este comando para poder montar a partição desejada:

sudo vgchange -ay

Agora monte a partição raiz em /mnt:

#se for com LVM
sudo mount /dev/mapper/vgname-lvname /mnt

#se NÃO for com LVM
sudo mount /dev/mapper/cryptodisk /mnt

Após isso, monte a partição de boot e a de EFI (no meu caso, era apenas EFI):

# se tinha de boot execute este comando antes
sudo mount /dev/sdXY /mnt/boot

# se tinha apenas de EFI como no meu exemplo
sudo mount /dev/sdX1 /mnt/boot/efi

Antes do chroot, execute essas montagens:

sudo mount --rbind /dev /mnt/dev
sudo mount --rbind /sys /mnt/sys

sudo mount --bind /proc /mnt/proc

Agora, sim, entre em chroot:

sudo chroot /mnt

Dentro do chroot execute o comando:

sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB

Por garantia, gere novamente o arquivo de configuração:

sudo update-grub

Agora é só sair do chroot e reiniciar! Parabéns, problema resolvido. 😉

Foto de capa

Photo by Muhammad Zaqy Al Fattah on Unsplash

Publicações Recentes

blog-post

Utilizando pipx no lugar do pip

Introdução O pipx funciona parecido com o pip, porém ele já cria ambientes isolados automaticamente (venvs). Instalação …

Quer saber mais sobre mim?

Para conversar comigo ou saber outros detalhes profissionais
me encontre no…

Linkedin
*