Queimando discos com um sistema de arquivos criptográfico Escondendo o jogo CAPA Um disco rígido criptografado no seu servidor não serve de nada se os dados confidenciais de CDs ou DVDs caírem nas mãos erradas. Mostraremos algumas soluções convenientes para criptografar seus dados em mídias removíveis. por Matthias Jansen D av T alvez você já armazene seus dados importantes em uma área criptografada do disco rígido. Se você ainda não faz isso, é bom começar logo após terminar de ler esta revista. Se você usa seus dados também fora do trabalho e de casa, pode ser bom guardar uma “foto” deles num CD ou copiar seus arquivos para um pendrive. Mas é importante preocupar-se com o risco de carregar seus dados com você por aí. Pendrives são usados exatamente como discos rígidos externos, então proteger um pendrive com criptografia é bastante fácil. Criptografar CDs e DVDs é mais difícil, mas ainda há algumas opções. Este artigo explora duas úteis técnicas para armazenar dados criptografados num CD ou DVD. O jeito mais fácil de guardar dados criptografados num CD é usar o GPG ou outra ferramenta semelhante para criptografar os arquivos individualmente e guardá-los normalmente na mídia. Essa solução funciona com vários aplicativos, e oferece um nível adequado de segurança, mas os riscos aparecem quando se olha de perto. Um usuário conseguiria descriptografar manualmente o arquivo e guardar temporariamente o texto em um local gravável. Como ambos os atos de cifrar e decifrar o arquivo por criptografia são feitos de forma casual, sem os benefícios de um sistema de arquivos criptografado para garantir a segurança, essa opção poderia resultar em várias versões do arquivo separadas – alguns criptografados e outros descriptografados. Além da desvantagem das múltiplas rodadas de cifragem e decifragem, essa solução também desperdiça espaço em disco. Uma solução mais simples – a de despejar o conteúdo do dispositivo de blocos criptografado em um disco – também parece ser utilizável. Infelizmente, par- G ide u gl ielm o w –w x w.s c.h u tições de menos de 8 GB (ou seja, que caberiam em um DVD de dupla camada) são raras hoje em dia. Portanto, é necessário distribuir a partição ao longo de diversos discos. Para ler a imagem, o usuário tem que juntar novamente os pedaços. Mais uma vez, essa solução desperdiça espaço em disco, embora ao menos evite o problema de múltiplos ciclos de cifragem e decifragem. Este artigo examina outras duas soluções para o problema da criptografia de CDs e DVDs. A primeira técnica utiliza uma extensão criptográfica da ferramenta cdrecord. O outro método usa o AES Pipe, uma ferramenta que oferece criptografia AES a uma corrente de dados arbitrários. Essas técnicas oferecem criptografia transparente para o acesso de leitura, e são quase tão rápidas quanto um sistema de arquivos criptografado, embora não seja possível modificar o CD depois. Exemplo 1: Patch de criptografia 01 02 03 04 05 44 wget ‘ftp://ftp.berlios.de/pub/cdrecord/cdrtools-2.01.tar.bz2’ wget ‘http://burbon04.gmxhome.de/linux/files/cdrtools-2.01-encrypt-1.0rc2.diff.gz’ tar xjvf cdrtools-2.01.tar.bz2 cd cdrtools-2.01 zcat ../cdrtools-2.01-encrypt-1.0rc2.diff.gz | patch -p1 http://www.linuxmagazine.com.br CDs e DVDs | CAPA Exemplo 2: OSS DVD e criptografia 01 02 03 04 05 06 07 wget ‘ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-2.01.01a05.tar.bz2’ wget ‘http://www.crashrecovery.org/oss-dvd/cdrtools-2.01.01a05-ossdvd.patch.bz2’ wget ‘http://crashrecovery.org/oss-dvd/cdrtools-2.01.01a01-encrypt-1.0rc1.diff.gz’ tar xjvf cdrtools-2.01.01a05.tar.bz2 cd cdrtools-2.01.01 bzcat ../cdrtools-2.01.01a05-ossdvd.patch.bz2 | patch -p1 zcat ../cdrtools-2.01.01a01-encrypt-1.0rc1.diff.gz | patch -p1 Rápido como um raio Exemplo 3: Variante antiga A primeira solução criptografa os dados 01 # mkisofs -J -R ~/dados/ | cdrecord dev=/dev/hda -encrypt -encstyle=old -encpass=<SENHA> diretamente enquanto grava a mídia 02 [...] com a ferramenta cdrecord. Maximi03 NOTE: this version of cdrecord is an inofficial (modified) release of lian Decker escreveu um patch [1] 04 cdrecord and thus may have bugs that are not present in the 05 original version. Please send bug reports and support requests to para o programa de gravação de CDs 06 <burbon04 at gmx.de>. For more information please see de Jörg Schilling para que ele supor07 http://burbon04.gmxhome.de/linux/CDREncryption.html. The original tasse essa forma de criptografia. O 08 author should not be bothered with problems of this version. trecho contido no exemplo 1 mostra 09 [...] como aplicar o patch. O executável 10 Starting to write CD/DVD at speed 48 in real TAO mode for single 11 session. Last chance to quit; resultante permite que os usuários 12 starting real write 0 seconds. Operation starts. forneçam uma chave para a sessão de 13 Turning BURN-Free off gravação atual. A ferramenta utiliza 14 Using aes-256-cbc encryption with plain password, plain IV. (e.g. criptografia AES de 256 bits em modo 15 cryptoloop >2.4.22, 2.6). CBC (veja o Glossário). 16 [...] 17 Track 01: Total bytes read/written: 42958848/42958848 (20976 A versão GPL do cdrecord queima 18 sectors). CDs, mas não DVDs. São necessários 19 # mount -t iso9660 /dev/cdrom /media/crypt -o encryption=aes256 dois patches para lidar com DVDs, e 20 # ls /media/crypt ambos devem ser modificados para a 21 cat.mpeg funny_cats.wmv versão 2.01.01a05 do cdrecord (do ramo 22 newsreportfromIraq.wmv 23 Karate_Beetle.avi German_Engineering_Arab_Technology.wmv alpha da ferramenta). 24 sexy_nutcracker.mpg O suporte a OSS DVD [2] acres25 felina_in_the_snow.mpg noteastgermany.mpg centa um recurso para gravar DVDs, 26 Languageproblems.mpg e um outro patch de criptografia, disponível no mesmo servidor, oferece a ele a capacidade de criptografia Ela usa o CBC para combinar 16 desses (exemplo 2). Nos dois casos, o patch criptográfico es- pacotes e criar um bloco de 512 bytes, e A necessidade de aplicar patches tende a função write_track_data() (figura depois para combinar quatro desses bloao cdrecord é a única desvantagem 1). Essa função grava o buffer interno num cos para criar um de 2048 bytes, que o dessa solução. A boa notícia para os CD ou DVD. O patch usa a implemen- cdrecord finalmente grava no CD. usuários do Gentoo Linux é que eles tação GPL de AES feita pelo Dr. B. R. A restrição a unidades de 512 bytes só precisam ativar o termo USE on- Gladman [3] para cifrar dados, dividin- restringe a solução ao modo 1 do CD, the-fly-crypt ao fazer o emerge de app- do-os em pacotes de 256 bits (32 bytes) que armazena blocos de exatamente 2048 cdr/cdrtools. cada, e aplicando uma chave de 256 bits. bytes. O modo 2 utiliza blocos de 2352 - Gravação críptica mkisofs cdrecord write_track_data() -encrypt? não write_buf() CD/DVD sim enc_buf() Figura 1 Dependendo do parâmetro -encrypt, a versão com patches do cdrecord passará os dados através de uma etapa de criptografia antes de gravá-los no CD. Pacotes necessários Forma de criptografia Debian Ubuntu CD-Record -encstyle=old CD-Record -encstyle=new – – old-crypt: util-linux, sys-fs/loop-aes cryptsetup cryptsetup sys-fs/cryptsetup AES-Pipe loop-aes-utils, loop-aes-source loop-aes-utils, loop-aes-source crypt: utils-linux, sys-fs/loop-aes Linux Magazine #25 | Novembro de 2006 Gentoo (USE-flag) 45 CAPA | CDs e DVDs Imagem mkisofs aespipe cdrecord CD/DVD dd Fita aes_encrypt() tar, cpio Figura 2 O AES Pipe criptografa uma corrente de dados da entrada padrão e a envia à saída padrão, independentemente de qual programa a tenha criado. Dessa forma, é possível usar o AES Pipe para criar scripts que usem outros comandos de gravação de CD. bytes, que não são divisíveis por 512. Para ativar a criptografia, simplesmente use a opção -encrypt. Existem três métodos para fornecer a senha necessária: ➧ Texto limpo (não criptografado): Questão de chave Escolha o novo A solução distingue entre dois estilos de Se o seu kernel for compatível com DMchaves. A variante antiga utiliza a chave Crypt, prefira a variante nova. O exemplo (e quaisquer complementos) diretamente, 3 oferece todo o procedimento, desde a enquanto o novo estilo primeiro aplica um gravação até a montagem com a solução encpass=<SENHA> algoritmo SHA 256 (hash seguro). A dife- antiga, e o procedimento para a solução ➧ Valor hex: -encpasshex=70617373776F72 rença fica aparente na criptografia. nova é mostrado no exemplo 4. As primei64 Dados gravados no CD com uso da ras linhas de ambos os exemplos criam ➧ Arquivo: encpassfile=/home/Nome/chave. variante antiga podem ser montados usan- um sistema de arquivos ISO e o passam do-se o dispositivo crypto-loop. A variante ao cdrecord. O parâmetro para a variansecreta (só os primeiros 32 bytes têm uso) nova cria um CD para o DM-Crypt, o alvo te antiga é encstyle=old (exemplo 3); na O terceiro método é o preferível. Os criptografado do device mapper. variante nova, é -encstyle=new. Nos dois dois primeiros exigem que se guarde a O estilo antigo só é recomendado se o casos, -encrypt ativa a criptografia. chave no histórico da sua shell e numa sistema alvo estiver rodando um kernel mais As diferenças ficam aparentes ao monlista de processos, onde terceiros pode- antigo. A nova variante DM-Crypt necessita tar um CD criptografado. O exemplo 3 riam descobri-la. do kernel 2.5.6 ou mais recente, apesar de não usa um comando mount estendido (linha Se a chave de entrada for curta de- exigir patches. Para o estilo antigo de montagem 15), enquanto a variante do exemplo 4 mais, o patch a completará para atingir segura com o dispositivo crypto-loop, criado chama o Cryptsetup (linha 15) para se 32 bytes. O código interpretará todas as por um AES de 256 bits, são necessários alguns preparar para montar através do device quebras de linha antes do limite dos 32 patches Losetup. Nem todas as distribuições mapper (linha 16). Note que o parâmetro bytes como se fossem parte da chave. oferecem os patches por padrão (veja a tabela -r (somente leitura) não está disponível Isso pode ser problemático se o usuário Pacotes necessários). Versões mais novas dos na versão atual (0.1) do Cryptsetup. Sem tentar entrar a chave manualmente du- pacotes incluem aqueles que talvez sejam essa opção, o Cryptsetup se recusará a rante a cifragem. incompatíveis com a variante antiga. criar o mapeador para mídias protegidas contra gravação. Para evitar o uso da versão do CVS, pode-se mapear o CD em um dispositivo Exemplo 4: Variante nova de loop, usando-se o comando losetup para 01 # mkisofs -J -R /dados/pequeno/Witzig/Videos/ | cdrecord dev=/dev/hda -encrypt contornar o problema, e usar o Cryptseencstyle=new -encpass=<SENHA> tup. (Veja o exemplo 5, linha 9). 02 [...] 03 NOTE: this version is an inofficial (modified) release of 04 cdrecord and thus may have bugs that are not present in the 05 original version. Please send bug reports and support requests to 06 <burbon04 at gmx.de>. For more information please see 07 http://burbon04.gmxhome.de/linux/CDREncryption.html. The 08 author should not be bothered with problems of this version. 09 [...] 10 Starting to write CD/DVD at speed 48 in real TAO mode for single session. Last chance to quit; starting real write 0 seconds. Operation starts. 11 Turning BURN-Free off 12 Using aes-256-cbc encryption with sha-256 hashed key, plain IV. (e.g. dm-crypt) 13 [...] 14 Track 01: Total bytes read/written: 42958848/42958848 (20976 sectors). 15 # cryptsetup -r -c aes -s 256 -h sha256 create ecdrom /dev/cdrom 16 # mount -t iso9660 /dev/mapper/ecdrom /media/crypt 17 # ls /media/crypt 18 cat.mpeg funny_cats.wmv 19 newsreportfromIraq.wmv 20 Karate_Beetle.avi German_Engineering_Arab_Technology.wmv 21 sexy_nutcracker.mpg 22 felina_in_the_snow.mpg noteastgermany.mpg 23 Languageproblems.mpg 24 # 46 Entraves Um possível entrave do método do DMCrypt aparece se um arquivo for usado para passar a chave ao Cryptsetup. O Cryptsetup ignorará a opção -h (algoritmo de hash) e aplicará a chave como uma chave de texto limpo sem usar qualquer hash. Diferentemente, o cdrecord intepreta o valor como uma chave, que ele passa através de uma função hash. Para evitar esse problema, talvez você prefira guardar o valor de hash no arquivo em ambos os casos, e usar -encstyle=old ou -encstyle=aes256-cbc-plain no cdrecord. O Cryptsetup então usará a chave do arquivo como desejado. Como esse método criptografa dinamicamente durante o processo de gravação, http://www.linuxmagazine.com.br CDs e DVDs | CAPA Exemplo 5: Novo com losetup 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 # mkisofs -J -R /dados/pequeno/Witzig/Videos/ | cdrecord dev=/dev/hda -encrypt -encstyle=new -encpass=<SENHA> [...] Starting to write CD/DVD at speed 48 in real TAO mode for single session. Last chance to quit, starting real write 0 seconds. Operation starts. Turning BURN-Free off Using aes-256-cbc encryption with sha-256 hashed key, plain IV. (e.g. dm-crypt) [...] Track 01: Total bytes read/written: 42958848/42958848 (20976 sectors). # losetup /dev/loop0 /dev/cdrom # cryptsetup -c aes -s 256 -h sha256 create ecdrom /dev/loop0 # mount -t iso9660 /dev/mapper/ecdrom /media/crypt # ls /media/crypt cat.mpeg funny_cats.wmv newsreportfromIraq.wmv Karate_Beetle.avi German_Engineering_Arab_Technology.wmv sexy_nutcracker.mpg felina_in_the_snow.mpg noteastgermany.mpg Languageproblems.mpg é facilmente integrado a programas que usam o cdrecord para esse fim. A única coisa necessária é adicionar os argumentos à linha de comando do cdrecord como parâmetros definíveis pelo usuário. Se você não puder modificar o cdrecord, provavelmente vai preferir o segundo método, que usa o programa AES Pipe [4]. Utilize qualquer software de gravação para jogar a imagem criptografada pelo AES Pipe em um CD ou DVD. Pipes cifrados O AES Pipe criptografa uma corrente arbitrária de dados da entrada padrão e envia os resultados para a saída padrão (figura 2). A saída do mkisofs é adequada para isso. O programa usa o modo CBC e junta 16 pacotes de 32 bits para formar blocos de 512 bytes. Exatamente como a versão com patches do cdrecord, esse método só é útil para CD modo 1. Chaves de comprimento 128, 192 e 256 bits são suportadas, assim como várias funções de hash. Se você não der outra ordem, o AES Pipe usa como padrão o algoritmo AES com uma chave de 128 bits e SHA256 como algoritmo de hash da chave. A linha 1 do exemplo 6 mostra a versão mais simples com entrada de senha simples (linha 2). A senha deve conter pelo menos 20 caracteres. A linha 8 mostra que os resultados podem ser montados. O AES Pipe tem ainda uma opção -K para passar um arquivo cifrado por GPG como chave (exemplo 7). Esse método oferece aos usuários a oportunidade de transportar chaves de forma segura – em pendrives, por exemplo. Um ladrão precisaria do CD criptografado, da senha, do pendrive e da outra senha (mantra) da chave. Linux Magazine #25 | Novembro de 2006 A variante GPG adiciona a possibilidade de especificar múltiplas senhas para um CD. Para isso, você precisaria guardar a chave principal em múltiplos arquivos GPG e protegê-los com diferentes senhas. Você poderia até publicar uma nova senha sem a necessidade de queimar um novo CD, caso um usuário esquecesse sua senha. Esse método também suporta o envio seguro de mídias de armazenamento por email, caso você use criptografia por Chave Pública para proteger o arquivo GPG. Melhorando essa idéia, os administradores conseguiriam gravar o arquivo GPG no início do CD (exemplo 8). Isso significaria colocar a chave de criptografia no CD a ser criptografado, mas proteger a chave com uma senha robusta. Para isso, os administradores precisariam criar uma senha de comprimento fixo (linha 1) com o arquivo GPG no início (linha 2), e então colocar no final a imagem cifrada (linha 3), antes de gravar os resultados em um CD ou DVD (linha 4). Ao montar o CD, o usuário especifica a unidade de CD tanto como fonte quanto como dispositivo (linha 8). Um “pulo” de 8192 bytes (16 vezes 512) permite que o mount encontre o início dos dados criptografados. Veja em [5] um script de bash que combina os principais passos. Essa solução acrescenta mais uma dependência além daquelas da tabela Pacotes necessários (GPG), e será necessário aplicar patches ao losetup e às ferramentas mount. A maioria das distribuições já possui o suporte necessário embutido. ➧ Glossário AES: O Advanced Encryption Standard (ou algoritmo de Rijndael) é uma cifra de bloco simétrica que suporta tamanhos de blocos e chaves de 128, 192 e 256 bits. CBC: O Cipher Block Chaining associa cada bloco criptografado com o bloco criptografado logo antes. Isso torna impossível decifrar um bloco sem conhecer o bloco anterior. A vantagem disso é que dois blocos de texto limpo com o mesmo conteúdo produzirão diferentes textos cifrados. Isso ajuda a esconder padrões recorrentes do texto original. IV: O vetor de inicialização oferece um valor de salt ao CBC. A primeira rodada não possui um valor anterior com o qual trabalhar, e portanto usa o IV no lugar. Exemplo 6: AES Pipe com senha 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 # mkisofs -J -R . | aespipe | cdrecord dev=/dev/hdd Password: cdrecord: Asuming -tao mode. cdrecord: Future versions of cdrecord may have different drive dependent defaults. Cdrecord-Clone 2.01.01a06 (x86_64-unknown-linux-gnu) Copyright (C) 1995-2006 Jörg Schilling [...] Track 01: Total bytes read/written: 475136/614400 (300 sectors). # mount -t iso9660 /dev/hdd /mnt/crypted -o loop,encryption=AES128 Password: # ll /mnt/criptografado/ total 22 drwxr-xr-- 2 maz network 2048 1. Apr 20:21 Imagens -rw-r--r-- 1 maz network 18064 25. Jul 12:35 Cripto-CD.txt -rw-r--r-- 1 maz network 349 8. Jan 2006 distris.txt -rw-r--r-- 1 maz network 649 30. Mar 20:23 patch.txt 47 CAPA | CDs e DVDs Exemplo 7: AES Pipe, GPG e gravação 01 02 03 04 05 06 07 08 09 10 11 12 13 # yes “” | dd of=image.iso bs=512 count=16 # head -c 2925 /dev/urandom |uuencode -m - |head -n 66 |tail -n 1 |gpg --symmetric -a |dd of=image.iso conv=notrunc # mkisofs -iso-level 3 -l -r /daten/ | aespipe -e aes256 -w 5 -K image.iso -O 16 >> image.iso # growisofs -dvd-compat -Z /dev/dvdrw=image.iso [...] # mount -t iso9660 /dev/hdd /mnt/crypted -o loop,gpgkey=/dev/hdd,enc ryption=AES256,offset=8192 Password: # ll /mnt/crypted/ total 22 drwxr-xr-- 2 maz network 2048 1. Apr 20:21 Imagens -rw-r--r-- 1 maz network 18064 25. Jul 12:35 Crypto-CD.txt -rw-r--r-- 1 maz network 349 8. Jan 2006 distris.txt -rw-r--r-- 1 maz network 649 30. Mar 20:23 patch.txt Não só discos O AES Pipe criptografa qualquer corrente de dados, então é possível criar arquivos tar cifrados: tar cj /data | aespipe > data.tar.bz2.enc aespipe -d < data.tar.bz2.enc | tar xj Becapes em tar criptografados são outra boa idéia: tar cj /data |aespipe |dd of=/dev/st0 ➥ bs=56 dd if=/dev/st0 bs=56 |aespipe -d |tar tj O AES Pipe ainda suporta compressão por Bzip2. A compressão só faz sentido se ocorrer antes da cifragem, já que não existe uma forma de compactar dados criptografados. Além disso, essa variante evita avisos do tar a respeito de dados de lixo. Mensagens como bzip2: (stdin): trailing garbage after EOF ignored aparecem porque o AES Pipe usa um tamanho de bloco fixo de 16 bytes e preenche os bytes faltantes com valores nulos. Isso confunde o tar e a função Bzip2. A compressão não funciona com imagens ISO, pois CDs e DVDs per- dem a capacidade de ser montados por losetup. Se você precisar comprimir dados, faça-o na camada do sistema de arquivos. Paranóia O AES Pipe possui várias configurações para dificultar a vida de atacantes potenciais. Por exemplo, pode-se usar 64 chaves de criptografia. No modo Multi-Key Tanto a versão modificada do cdrecord (multi-chave), o programa cifra o primeiro quanto a combinação da versão não setor com a primeira chave, o segundo modificada com o AES Pipe são úteis setor com a segunda chave e assim por para criar discos criptografados e mondiante. Em vez do vetor de inicialização tá-los transparentemente no sistema de (IV, Initialization Vector, veja o Glossário), arquivos. Graças a sua natureza genéele usa um IV com Hash MD5. tica, o AES Pipe oferece mais opções. Entretanto, esse modo só funciona Por outro lado, o patch do cdrecord é em combinação com um arquivo cripto- difícil de superar quanto à amistosidade grafado por GPG. O modo multi-chave com o usuário, principalmente se coné usado automaticamente se o arquivo siderarmos a facilidade com que ele se GPG contiver pelo menos 64 chaves, com integra a interfaces gráficas de gravano mínimo 20 caracteres cada, separadas ção como o K3B. Mas certifique-se de por linhas novas. usar a variante -encstyle=new para evitar Outra forma de dificultar ataques de incompatibilidades. ■ força bruta é passar chaves através de vários milhares de rodadas de AES, nas quais o parâmetro -C fator especifica o Mais informações número de milhares. Essa solução au[1] Maximilian Decker, “On-the-fly menta a carga sobre a CPU antes da crip- Exemplo 8: AES Pipe com uma chave GPG 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 # mkisofs -J -R . | aespipe -K ~/teste.gpg | cdrecord dev=/dev/hdd Password: cdrecord: Asuming -tao mode. cdrecord: Future versions of cdrecord may have different drive dependent defaults. Cdrecord-Clone 2.01.01a06 (x86_64-unknown-linux-gnu) Copyright (C) 1995-2006 Jörg Schilling [...] Track 01: Total bytes read/written: 475136/614400 (300 sectors). # mount -t iso9660 /dev/hdd /mnt/crypted -o loop,encryption=AES128 Password: # ll /mnt/crypted/ total 22 drwxr-xr-- 2 maz network 2048 1. Apr 20:21 Imagens -rw-r--r-- 1 maz network 18064 25. Jul 12:35 Crypto-CD.txt -rw-r--r-- 1 maz network 349 8. Jan 2006 distris.txt -rw-r--r-- 1 maz network 649 30. Mar 20:23 patch.txt 48 tografia, mas também dificulta bastante a tentativa de diferentes chaves por um eventual atacante. O programa também usará uma semente, especificada pelo parâmetro -S, se necessário. No entanto, nenhum desses dois modos funcionará no modo multichave. Conclusões encryption for cdrecord/cdrtools”: http://burbon04.gmxhome.de/ linux/CDREncryption.html [2] Patch de DVD para a versão OSS do cdrecord/cdrtools: http://www.crashrecovery.org/ oss-dvd.html [3] Implementação de AES, do Dr. Gladman: http://fp.gladman.plus.com/AES/ [4] AES Pipe pelo projeto Loop AES: http://loop-aes.sourceforge.net [5] Script de bash para criar uma imagem criptografada: http:// matthiasjansen.de/ ~maz/create_enc_image http://www.linuxmagazine.com.br