Decred através da rede Tor

7 minutos de leitura

1. Introdução

O Tor é formado por uma rede de dispositivos mantidos voluntariamente por indivíduos interessados em privacidade e segurança. O Tor permite que uma pessoa acesse um conteúdo através de uma série de túneis virtuais criptografados entre seus participantes de modo a evitar o bloqueio de censores e descoberta da localização de seus participantes.

Através do Tor jornalistas e delatores divulgam informações, organizações lutam pela liberdade e fazem denúncias operando dentro de uma ditadura e indivíduos mantem sua privacidade e acessam conteúdo bloqueado por seus provedores locais.

A rede do Tor também pode ser usada para conectar redes de criptomoedas em países onde o Estado deseja manter o controle sobre o dinheiro e persegue aqueles que buscam a liberdade financeira.

Pré-requisitos

a) Copiar o Tor a partir do site do Tor Project. b) Abaixo do botão de download há um link sig para copiar a assinatura digital. Copie a assinatura e verifique de acordo com as instruções. O Tor está disponível em pt-br e também há assinatura digital para o pacote localizado. c) O Tor não precisa ser instalado. Basta ser extraído para um diretório e executado.

Saiba mais sobre Verificação de assinaturas digitais.

2. Pluggable transports

Apesar de utilizar várias bridges (dispositivos que se conectam a Internet e à rede Tor simultaneamente) diferentes para evitar o bloqueio de censores, houve um aumento no número de países que usam inspeção de pacotes (DPI, Deep Packet Inspection) para reconhecer e filtrar pacotes da rede Tor, mesmo quando são usados endereços IP não relacionados ainda à rede Tor.

obfs4

O obfs4 é uma camada de obfuscação para protocolos TCP com o objetivo de evitar que terceiros possam deduzir qual protocolo está sendo obfuscado com base no conteúdo da mensagem ou no seu formato.

Após handshake e troca de chaves os dados serão encriptados e autenticados em frames menores através de uma função NaCl crypto_secretbox_xsalsa20poly1305.

A especificação completa do obfs4 pode ser vista em https://github.com/Yawning/obfs4/blob/master/doc/obfs4-spec.txt.

meek

O meek, assim como o obfs4, introduz uma camada de obfuscação para evitar um censor na Internet. O tráfego é direcionado para um outro servidor através de uma técnica chamada Domain Fronting, que faz a ponte entre o usuário e o servidor que é alvo de censura.

Figura 1 - Uso do meek com dcrd local ou dcrd interno do Decrediton
Figura 1 - Uso do meek com dcrd local ou dcrd interno do Decrediton

A figura a seguir mostra o cenário apresentado no artigo Decred através de VPNs e proxies, onde um servidor dcrd é hospedado e acessado remotamente. Além das formas de acesso apresentadas naquele artigo, esse servidor também pode ser acessado através de Tor com o pluggable transport do meek.

Figura 2 - Uso do meek com dcrd remoto
Figura 2 - Uso do meek com dcrd remoto

O Domain Fronting consiste em encapsular um pacote HTTP em um pacote TLS destinado a um domínio diferente do original. O meek-client cria um pacote HTTPS que é enviado para um servidor intermediário, que responde por muitos domínios, como um CDN (Content Distribution Network). Esse domínio intermediário, que fica na frente (“front domain”), tem seu endereço incluído em claro no pacote, sem criptografia. O pacote a ser enviado ao domínio censurado fica criptografado dentro do pacote externo, referenciado via Host Header. O censor só consegue ver as informações não criptografadas no pacote externo, mas o CDN consegue ver o pacote interno, lê o Host Header e encaminha o pacote ao servidor de destino. Lá o meek-server decripta o pacote e direciona os dados para a rede do Tor.

Qualquer domínio com um registro CNAME apontando para o CDN de um grande provedor como o Cloudfront, por exemplo, pode ser usado como canal de entrada:

$ dig cdn.bitnami.com

(...)
;; ANSWER SECTION:
cdn.bitnami.com.	10800	IN	CNAME	d33np9n32j53g7.cloudfront.net.
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.47
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.97
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.216
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.149
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.82
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.59
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.78
d33np9n32j53g7.cloudfront.net. 12 IN	A	216.137.61.154
(...)

Serviços que podem fazer “fronting” são Google App Engine e Microsoft Azure. Amazon CloudFront decidiu impedir o funcionamento do domain fronting na sua rede. O objetivo é escolher um grande provedor de conteúdo que o censor não queira bloquear, caso contrário isso traria um grande prejuízo para o próprio censor (negócios legítimos seriam bloqueados, perda de contato com parceiros, perda de receita de impostos pela interrupção de serviços locais, etc). O servidor “front domain” pode estar localizado na rede controlada pelo censor ou fora dela. Dois grandes provedores de conteúdo listados no arquivo bridge_prefs.js do Tor são a0.awsstatic.com e ajax.aspnetcdn.com. A figura a seguir mostra o encapsulamento de pacotes entre meek-client e meek-server.

Figura 3 - Encapsulamento TLS feito pelo meek
Figura 3 - Encapsulamento TLS feito pelo meek

3. Configuração dcrd e Tor

O dcrd pode funcionar de forma anônima ou não enquanto conectado à rede Tor. A forma de funcionamento depende dos parâmetros que serão explicados nesta seção.

Figura 4 - Alguns cenários de uso do Tor
Figura 4 - Alguns cenários de uso do Tor

3.1. Client-only

Quando configurado somente como cliente o dcrd apenas buscará atualizações na blockchain (novos blocos e transações na mempool) em outros servidores mas não haverá como outros servidores se conectarem ao dcrd para buscarem atualizações.

Para executar o dcrd como cliente Tor:

$ ./dcrd --proxy=127.0.0.1:9050

Para configurar permanentemente no arquivo dcrd.conf adicione na seção [Application Options]:

proxy=127.0.0.1:9050

Se o Tor foi configurado para pedir usuário e senha, será necessário informa-los através dos parâmetros --proxyuser e --proxypass no prompt ou no arquivo de configuração.

Por padrão, o dcrd assume que esse proxy especificado é um proxy da rede do Tor e envia todo o tráfego, incluindo consultas para resolução de nomes DNS, através desse proxy especificado.

3.2. Client-Server via Tor Onion Service

A configuração como Client-Server permite que outros servidores dcrd se conectem ao seu para atualização de blocos e transações da mempool. Isso torna a rede do Decred mais robusta e por essa razão é a configuração recomendada.

Para instalar o Onion Service, será necessário editar o arquivo torrc.

a) No Linux e no Windows, procure no diretório Browser/TorBrowser/Data/Tor/torrc no diretório do Tor Browser. No macOS, procure no diretório ~/Library/Application Support/TorBrowser-Data/Tor. b) Abra o arquivo torrc e procure pela linha: ### This section is just for location-hidden services ### c) Adicione as seguintes linhas ao torrc:

HiddenServiceDir /var/tor/dcrd
HiddenServicePort 9108 127.0.0.1:9108

d) Salve o arquivo torrc e reinicie o Tor. Se o Tor iniciar novamente é porque está funcionando e terá criado automaticamente o diretório especificado em HiddenServiceDir. Caso contrário, algo deu errado. Comece olhando os arquivos de log para ver o que aconteceu.

3.2.1. hostname

O arquivo hostname é criado pelo Tor é contém o nome com o qual o serviço se anuncia na rede Tor, que é uma versão curta da chave pública e se parece com duskgytldkxiuqc6.onion. Esse é o nome público do seu serviço e será usado na configuração do dcrd.

3.2.2. private_key

Outro arquivo criado no mesmo diretório é o private_key. Mantenha-o em segurança. Ele contém a chave privada gerada para esse onion service e se cair em mão erradas permitirá que terceiros se passem por você na rede do Tor.

Para executar o dcrd em modo Client-Server:

$ ./dcrd --proxy=127.0.0.1:9050 --listen=127.0.0.1 --externalip=$HOSTNAME.onion

Para configurar permanentemente no arquivo dcrd.conf, adicione na seção [Application Options]:

proxy=127.0.0.1:9050
listen=127.0.0.1
externalip=$HOSTNAME.onion

Se o Tor foi configurado para pedir usuário e senha, será necessário informá-los através dos parâmetros --proxyuser e --proxypass na linha de comando ou no arquivo de configuração.

3.3. Bridge Mode

O dcrd pode operar como ponte entre nodes na rede Tor e nodes fora dela. Apenas tráfego enviado de e para o endereço .onion trafegará na rede Tor e o resto do tráfego será enviado normalmente, o que resulta em tráfego não anônimo.

Este modo funciona apenas se o parâmetro --onion for usado. Se for necessário configurar usuário e senha deverá ser feito usando os parâmetros --onionuser e --onionpass.

Para executar o dcrd em modo bridge:

$ ./dcrd --onion=127.0.0.1:9050 --externalip=$HOSTNAME.onion

Para configurar permanentemente no arquivo dcrd.conf, adicione na seção [Application Options]:

onion=127.0.0.1:9050
externalip=$HOSTNAME.onion

4. Configuração de clientes Decred

4.1. Decrediton

Para fazer o Decrediton usar o Tor, localize e abra o arquivo dcrd.conf de acordo com seu sistema operacional:

Linux: ~/.config/decrediton
macOS: ~/Library/Application Support/Dcrd
Windows: C:\Users\$USERNAME\AppData\Local\Decrediton

e adicione a linha a seguir na seção [Application Options]:

proxy=127.0.0.1:9050

Se o Tor foi configurado para pedir usuário e senha, será necessário informá-los através dos parâmetros --proxyuser e --proxypass na linha de comando ou no arquivo de configuração.

O Decrediton se conecta ao seu próprio dcrd. Não é necessário fazer nenhuma outra configuração.

4.2. dcrwallet

De acordo com os comentários dentro do arquivo sample-dcrwallet.conf, é possível configurar o dcrwallet para se conectar ao RPC server através de Tor na seção “RPC client settings”. Inclua os descomente os parâmetros a seguir:

proxy=127.0.0.1:9050
rpcconnect=$HOSTNAME.onion:9109

Essa configuração será útil para conectar o dcrwallet a um dcrd localizado do outro lado de um túnel criptográfico.

5. Tor Stream Isolation

Tor stream isolation força o Tor a criar novos circuitos para cada conexão tornando a correlação de identidades mais difícil.

O dcrd suporta o Tor stream isolation através do parâmetro --torisolation. Esse parâmetro requer que os parâmetros --proxy ou --onionproxy sejam usados. Para executar na linha de comando:

$ ./dcrd --proxy=127.0.0.1:9050 --torisolation

Para configurar permanentemente no dcrd.conf:

[Application Options]
proxy=127.0.0.1:9050
torisolation=1

Figura 5 - Caminho percorrido pela informação, com e sem Stream Isolation
Figura 5 - Caminho percorrido pela informação, com e sem Stream Isolation

Para saber mais sobre Stream Isolation, acesse:

6. Teste de configuração

Veja a seção 8 do artigo Decred através de VPNs e proxies para saber sobre o uso do Wireshark como analisador de pacotes.

Referências: Este artigo contém muitas informações retiradas de https://github.com/decred/dcrd/blob/master/docs/configuring_tor.md e https://www.torproject.org/docs/tor-onion-service.