História do Desaparecimento
O
TrueCrypt teve um desaparecimento repentino e misterioso. Do nada, seus desenvolvedores e mantenedores alegaram que ele não era seguro e ponto.
Curiosamente, o seu desaparecimento deu-se em 2014, 5 anos após 1 ano de tentativas frustradas do FBI em quebrar a criptografia de um disco rígido do banqueiro Daniel Dantas na operação Satyagraha.
Claro que ainda não foi por isso, mas sim após e evento "Snowden Files". É... Snowden, Glenn Greenwald, Laura Poitras, Pepe Escobar, Oliver Stone, Michael More e uma legião de jornalistas investigativos usam e aprovam o TrueCrypt.
Sua ultima versão funcional é a 7.1, que pode ser obtida em:
E também a disponibilizo em meu
Github. Ao que tudo indica, seus desenvolvedores receberam uma "proposal that cannot be refused".
Instalação e Uso
A distro que usei para escrever esse artigo foi Debian, mas não haverá maiores empecilhos para rodar em outras distros, podendo variar o nome dos pacotes e paths, mas no gera,l é tudo a mesma coisa.
Os pacotes necessários são:
- Tor (não o browser e sim o Onion Router);
- torsocks;
- netcat-openbsd (no CentOS/RHEL, pode ser encontrado como "nmap-ncat");
- libdigest-sha3-perl (caso não deseje usar o Sha3sum para gerar os passwords é dispensável, entretanto, terão que alterar os scripts. No CentOS e distros RH-like, o pacote se chama "sha3sum" e está disponível no repositório EPEL);
- shred (vem instalado por default na maioria das distros e é usado para apagamento seguro de arquivos tornando impossível sua recuperação);
- truecrypt-7.1a-linux-console-x64 ( baixe-o dos links que citei acima).
No Debian:
# apt-get update
# apt-get install tor torsocks netcat-openbsd libdigest-sha3-perl -y
Para instalar o TrueCrypt, basta descompactar o tar.gz e executar o instalador que é de modo interativo:
# tar -zxf truecrypt-7.1a-linux-console-x86.tar.gz
# ./truecrypt-7.1a-setup-console-x64
Se o seu sistema for de 32 bits:
# ./truecrypt-7.1a-setup-console-x86
O SSH deverá ter autenticação por chave pública, não vou explicar para não alongar demais o artigo. Há muitos tutoriais sobre isso na internet.
Tor Onion Router
Isso! Vamos usar o Tor para sofisticar a solução!
Não vou adentrar na instalação do Tor e do TorSocks, pois há muito material sobre o assunto na internet e pode variar um pouco de uma distribuição para outra. Fica apenas o arquivo de configuração que será usado em ambas as pontas.
Arquivo:
/etc/tor/torrc
NewCircuitPeriod 8
OptimisticData 1
DNSPort auto
RunAsDaemon 1
KeepalivePeriod 10
HiddenServiceDir /var/lib/tor/hidden_ssh
# É muito comum que provedores de acesso bloqueiem o tráfego através de portas usuais de serviços como SSH, FTP, HTTP e HTTPS
# Se for esse o seu caso coloque uma outra porta:
# Ex: HiddenServicePort 3456 127.0.0.1:22
HiddenServicePort 22 127.0.0.1:22
# Essa parte é legal! Evitar tanto quanto o possível os 5 olhos que hoje já passam de 40. Por isso trafegaremos apenas pela Mãe Rússia.
# Para os que têm medo dos russos basta comentar as 3 linhas abaixo, e ficar à mercê da NSA, Mossad, CIA etc.
EntryNodes {ru} StrictNodes 1
ExcludeNodes {br},{ac},{af},{ax},{al},{dz},{ad},{ao},{ai},{aq},{ag},{ar},{am},{aw},{au},{at},{az},{bs},{bh},{bd},{bb},{by},{be},{bz},{bj},{bm},{bt},{bo},{ba},{bw},{bv},{io},{vg},{bn},{bg},{bf},{bi},{kh},{cm},{ca},{cv},{ky},{cf},{td},{cl},{cx},{cc},{co},{km},{cg},{cd},{ck},{cr},{ci},{hr},{cu},{cy},{cz},{dk},{dj},{dm},{do},{tp},{ec},{eg},{sv},{gq},{ee},{et},{fk},{fo},{fj},{fi},{fr},{fx},{gf},{pf},{tf},{ga},{gm},{ge},{de},{gh},{gi},{gr},{gl},{gd},{gp},{gu},{gt},{gn},{gw},{gy},{ht},{hm},{hn},{hk},{hu},{is},{in},{id},{ir},{iq},{ie},{im},{il},{it},{jm},{jp},{jo},{kz},{ke},{ki},{kp},{kr},{kw},{kg},{la},{lv},{lb},{ls},{lr},{ly},{li},{lt},{lu},{mo},{mk},{mg},{mw},{my},{mv},{ml},{mt},{mh},{mq},{mr},{mu},{yt},{mx},{fm},{md},{mc},{mn},{me},{ms},{ma},{mz},{mm},{na},{nr},{np},{an},{nl},{nc},{nz},{ni},{ne},{ng},{nu},{nf},{mp},{no},{om},{pk},{pw},{ps},{pa},{pg},{py},{pe},{ph},{pn},{pl},{pt},{pr},{qa},{re},{ro},{rw},{ws},{sm},{st},{sa},{uk},{sn},{rs},{sc},{sl},{sg},{sk},{si},{sb},{so},{as},{za},{gs},{su},{es},{lk},{sh},{kn},{lc},{pm},{vc},{sd},{sr},{sj},{sz},{se},{ch},{sy},{tw},{tj},{tz},{th},{tg},{tk},{to},{tt},{tn},{tr},{tm},{tc},{tv},{ug},{ua},{ae},{gb},{uk},{us},{um},{uy},{uz},{vu},{va},{ve},{vn},{vi},{wf},{eh},{ye},{zm},{zw},{??}
ExitNodes {ru} StrictNodes 1
Lebrando que o Tor NÃO é 100% seguro, no que tange ao conteúdo. CIA, NSA, FBI, MI6, GCHQ, Mossad e até o Carluxo (com X ou CH?) dispõem de meios para interceptar e descriptografar seu tráfego.
O que é (até o momento) assegurado é a localização dos nós envolvidos. Por isso aumentaremos o custo para essa turma tanto quanto possível. É recomendável rotacionar suas chaves de tempos em tempos, obviamente, isso afetará o funcionamento dos scripts pois os endereços ".onion" irão mudar.
Portanto, altere os endereços em seus scripts. Ou ainda, melhore-os criando essa funcionalidade de alterar dinâmica e automaticamente os endereços e scripts. Afinal, isso é uma prova de conceito e não um produto. Bem... até é, mas isso não vem ao caso.
Para saber qual o endereço ".onion" do seu host, verifique seu arquivo:
/var/lib/tor/Nome_Do_Seu_Servico_Oculto/hostname
Para quem quiser brincar com o Tor, recomendo a leitura da minha dica aqui mesmo no Viva o
Linux:
Nossa implementação consistirá em duas máquinas, podem ser físicas, virtuais ou até mesmo containers. Pretendo, mais adiante, escrever algo sobre o TrueCrypt e seu uso em containers Docker.
A primeira máquina será onde estará o disco a ser criptografado. A chamarei de SERVIDOR e a segunda máquina que chamarei de TOKEN, pode ser física, VM, container, ou até mesmo um Raspberry Pi.
Se for colocar essa aplicação em produção, é altamente recomendável e por que não dizer OBRIGATÓRIO, que a máquina TOKEN não esteja nas mesmas dependências físicas onde estará instalada a máquina SERVIDOR e quanto menos pessoas souberem da sua localização, ou até mesmo da sua existência, melhor é.
Se for hospedá-la em algum serviço VPS, Cloud ou o que for, faça-o em algum serviço que não crie qualquer vínculo com você, ou sua organização, e que aceite pagamentos em criptomoedas ou em espécie, para não deixar pontas soltas.
ATENÇÃO: a máquina onde estiver o disco, ou partição criptografada, DEVERÁ estar com SWAP DESABILITADO e recursos como hibernação, suspend to RAM etc... desabilitados para nenhum resquício sobre o acesso ao disco esteja disponível. Outro ponto OBRIGATÓRIO, é que todos os seus diretórios destinados a temporários sejam montados em "ramdisks tmpfs". Portanto, muita atenção com Laptops, Desktops e mesmo servidores que disponham dessa funcionalidade.
Ex.: de
/etc/fstab para montagem de "temps" em RAM:
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
Para desabilitar os coredumps:
# echo "* hard core 0" >> /etc/security/limits.conf
# echo 'ulimit -S -c 0 > /dev/null 2>&1' >> /etc/profile
# echo "0" > /proc/sys/fs/suid_dumpable
# echo "fs.suid_dumpable = 0" >> /etc/sysctl.conf
Para desabilitar o SWAP: para fazê-lo de forma permanente, comente a linha alusiva ao SWAP em seu
/etc/fstab:
swapoff -a
Outro ponto a ser observado é a eletrônica envolvida nas Motherboards, fontes de alimentação, bem como Laptops (esses são piores, porque possuem baterias e nos modelos atuais elas não podem ser facilmente removidas). As fontes possuem capacitores de filtragem de alta capacitância, assim como as Motherboards que, além dos capacitores de filtro que há em seus reguladores de tensão, possuem centenas de capacitores de desacoplamento ao longo de seus circuitos.
As memórias RAM são dinâmicas (procure por memórias RAM estáticas e dinâmicas), portanto, capacitivas podendo-se obter um dump de seu conteúdo, com um hardware específico e até mesmo com um PC comum, por até cerca de uns 10 ou 15 minutos, mesmo que sua máquina seja desligada em uma "emergência".
Se você tiver essa "emergência", não desligue sua máquina. Aperte o botão de RESET físico. Eu disse RESET e não
Ctrl+Alt+Del. O reset irá extinguir qualquer carga residual em sua memória RAM e todo o conteúdo em áreas de cache será sobrescrito.
Alguém já se perguntou, por quê Laptops e Desktops de grife (Dell, HP, Lenovo, IBM etc.) não possuem um botão de reset como vemos comumente em Desktops montados com peças avulsas? Pois é! É uma "exigência" dos órgãos americanos, embora isso não seja publicamente admitido.
Procurem por "Cold Boot Attack", que acharão coisas bem interessantes. No YouTube há muita coisa legal sobre o assunto. Segue um link sobre o tema:
Os Shellscripts
Máquina SERVIDOR (a que contém o disco, volume, partição, chaveiro USB, arquivo em loopdevice, enfim, qualquer dispositivo de bloco).
#!/bin/bash
ONIONADDR ="n3sauq5dx3mbs6ttekrvclrrjy40jfdvwrd6qaji4thprnvhv2eudfid.onion"
history -c; shred -n 1024 -u /root/.bash_history; >/root/.bash_history
torsocks nc -z "${ONIONADDR}" 22
if [[ $? -eq 0 ]]; then
sleep 2
torsocks -i ssh -o ConnectionAttempts=5 -C root@"${ONIONADDR}" <<< echo "/usr/bin/rtoken2.sh $1" &
fi
Na máquina TOKEN:
/usr/bin/rtoken2.sh
#!/bin/bash
ONIONADDR​="15jn60h5aqrfswxapfrqghroclxfqru4yyfwqqlug667ssnj5lsv1qd.onion"
mount()
{
cat mounter.source | torsocks ssh -C root@"${ONIONADDR}" "cat >/tmp/mounter.source"
cat keyfile.key | torsocks ssh -C root@"${ONIONADDR}" "cat >/tmp/keyfile.key"
torsocks -i ssh -o ConnectionAttempts=5 -C root@"${ONIONADDR}" <<< echo "source /tmp/mounter.source; shred -n 1024 -u /tmp/keyfile.key /tmp/mounter.source"
}
terraformer()
{
dd if=/dev/random of=/root/keyfile.key bs=512 count=1 iflag=fullblock 1>- 2>-
>/root/terraformer.source
for PASS in vdb mapper/truecrypt1; do
echo "truecrypt -c /dev/"${PASS} -k "/tmp/keyfile.key" --protect-hidden=no --volume-type=normal --encryption=Serpent-Twofish-AES --hash=SHA-512 --non-interactive -p ""$(date +%s%N | sha3sum -a 256 | awk -F {'print $1'})"" --filesystem=none --quick >> /root/terraformer.source
done
paste -d " " terraformer.source <(cat terraformer.source | awk -F {'print $3'}) | sed -e 's/-c.*-k //' -e 's/truecrypt/truecrypt -k/' -e 's/--quick //' > /root/mounter.source
paste -d ";" terraformer.source mounter.source > /root/universe.source
cat universe.source | torsocks ssh -C root@"${ONIONADDR}" "cat >/tmp/universe.source"
cat keyfile.key | torsocks ssh -C root@"${ONIONADDR}" "cat >/tmp/keyfile.key"
torsocks -i ssh -o ConnectionAttempts=5 -C root@"${ONIONADDR}" <<< echo "source /tmp/universe.source; shred -n 1024 -u /tmp/keyfile.key /tmp/universe.source"
}
# Recebe a chamada da função como parâmetro
# Aqui fizemos uma substituição de variável ou seja,
# se nenhum parâmetro (mount ou terraformer) for passado
# a máquina TOKEN será desligada. Use-o "apenas em caso de necessidade"
${1:-init 0}
Agora uma coisa interessante, experimente alterar a linha:
for PASS in vdb mapper/truecrypt1; do
Para, por exemplo:
for PASS in vdb mapper/truecrypt1 mapper/truecrypt2 mapper/truecrypt3 mapper/truecrypt4; do
Agora na máquina SERVIDOR, rode o script que manipula a TOKEN e veja a magia negra acontecer! Até fiz um videozinho, meio tosco reconheço, mas cosmética nunca foi meu forte:
# ./remotetoken.sh terraformer
O parâmetro "terraformer" é o nome da função que criará seus volumes.
O TrueCrypt, por default, já faz 3 camadas de criptografia. Nesse caso, foram 15 camadas.
Feitos esses passos, agora é só particionar e formatar o dispositivo de loop criado pelo TrueCrypt. Lembrando que sistemas Linux não requerem que o dispositivo seja particionado, você pode criar o seu sistema de arquivos diretamente:
# mkfs.ext4 -O ^has_journal /dev/mapper/truecrypt5
Lembrando que os
loops /dev/mapper/truecrypt5_0 e
_1, são as camadas intermediárias criadas pelo TrueCrypt.
Agora, é só montar seu volume:
# mount /dev/mapper/truecrypt5 /Path_Para_Seu_Ponto_De_Montagem