“TORIFICANDO” TODO UM SISTEMA GNU/LINUX UTILIZANDO A REDE TOR

INTRODUÇÃO GERAL – EXEMPLOS E CONSELHOS

 

Artigo sobre uma das técnicas para ter um sistema GNU/Linux inteiro utilizando a rede TOR em uma máquina cliente.

Pode ser muito útil para quem queira utilizar o TOR com wget, curl, nmap etc. Ferramentas de rede em modo texto, ou mesmo gráfico, com o TOR/rede TOR. Este não é um artigo técnico ao extremo, é suficientemente técnico para a compreensão do funcionamento geral de um sistema “Torificado” como, por exemplo, o Tails OS.

Lembro que a segurança do sistema que veremos aqui (e de qualquer outro, de forma geral) depende de muitos fatores, como criptografia das conexões, resolução de DNS, as chaves utilizadas e, principalmente, do ser humano que o opera.

Requisitos gerais:

  • Sistema GNU/Linux
  • TOR
  • POLIPO proxy HTTP
  • IPtables
  • Manipulação de arquivos de configuração
  • Noções de redes, Proxys
  • Conexão com a internet
  • Vontade de aprender, muita leitura e trabalho duro (kkkk)


Quando o assunto é navegadores de internet, ou mesmo wget e curl + sites, deve-se desconfiar dos JavaScripts das páginas web e extensões dos navegadores. Com o TOR, é melhor (por ser mais seguro) bloquear tudo, desativar JavaScript, Flash e companhia.

Existe uma coisa chamada headers, ou cabeçalhos/identificadores/useragent, que são enviados via HTTP aos sites, aos quais você se conecta pelo navegador e até mesmo pelo wget, o teu navegador envia aos sites detalhes dele mesmo.

Isso é feito para que o site responda de forma “mais adequada” com uma página formatada para teu browser mas, como quase todas as coisas neste universo, isso também pode ser usado para o mal.

É interessante que você utilize um cabeçalho/headers/UserAgent, que é usado pela maioria dos usuários da internet no teu browser ou wget, assim você fica “no meio da massa” de usuários “comuns” dificultando a identificação do teu navegador e, por consequência, de você.

Vamos supor que você utilize uma versão muito antiga do Firefox, que o UserAgent dele é o padrão e que o servidor do site loga os headers e IPs recebidos relacionando-os; ou seja, você é uma das poucas pessoas no mundo, se não a única, com esse UserAgent antigo e que acessa tal site, o que pode levar o dono do site, ou Server, a desconfiar da tua localização real, caso você acesse o site via TOR e depois acesse diretamente sem o TOR com o mesmo navegador e, logicamente, mesmos identificadores/UserAgent.

Isso também tem relação com a técnica de “FingerPrinting”. É possível saber cada extensão que você possui, cada modelo de fonte instalado no sistema, a resolução do teu monitor, as cores da tua área de trabalho, a versão do teu sistema, a versão do teu kernel (se for um kernel com nome personalizado, grandes chances de ser único no mundo, o que levaria até você). Tudo isso é possível, apenas se você estiver com o JavaScript e o resto da tranqueiras ativadas, então, é recomendável desativar.

EXEMPLO TEÓRICO

Usuário do TOR com JavaScript ativado, deixando escapar informações que não deveria, enquanto acessa um site malicioso.

DIA 01 – com TOR ativado:

  • User(sistemaX, resolução-de-telaY, fontesZ, useragentB, kernelP, IP-TOR) → acessa → Site

DIA 02 – sem TOR ativado:

  • User(sistemaX, resolução-de-telaY, fontesZ, useragentB, kernelP, IP-REAL) → acessa → Site

Se isso acontece, é possível te identificar pelas características entre () parênteses, mesmo que possua outro IP.Por isso o Tails Os, usa um sistema live com um Desktop padrão, porque mesmo se isso acontecer, as informações vistas pelo atacante serão padrão do Tails Os, que são as mesmas para todos que usam o Tails Os no modo padrão, evitando que você seja identificado individualmente.

É preciso deixar claro que, se você usa o Tails Os com JavaScript ativado, mesmo que as características do sistema sejam iguais em todas live do Tails, é possível saber tua resolução de tela, caso esteja usando o navegador TOR maximizado. Se tua tela não tem uma resolução muito comum, o atacante terá essa informação, então, previna-se.

Resumindo, não recomendo usar o método de Torificação aqui descrito, ou nenhum outro, para acessar sites com JavaScript ativado.

O mais seguro é usar um sistema como o Tails Os, pois no modo padrão, ele não possui nenhuma relação com você e é todo “limpo” a cada boot, diferente do sistema que você usa no cotidiano, que é único no mundo.

O TOR não oculta teu UserAgent, mas a notícia boa é que ele pode ser alterado sem nenhuma extensão no Firefox, wget, curl entre outros. Para alterar o UserAgent do Firefox, Chrome e Internet Explorer, vide link na indicação de fontes deste artigo.

Para saber mais sobre headers e UserAgent, vide link na indicação de fontes deste artigo.

Novamente, eu recomendo desativar ou remover todas as extensões do navegador e usar também a extensão “noscript” para bloquear scripts das páginas web. Também é importante não manter cookies salvos (ou nem aceitar) e desativar o JavaScript.

Link para o NoScript, também nas fontes deste artigo.

A rede TOR permite apenas tráfego TCP, então esqueça os ping (ICMP), UDP e etc.

E outro conselho importante (eles nunca acabam!), nunca confie demais em um suposto anonimato!

 

MAIS TEORIA – TOR NO SLACKWARE (NO GNU/LINUX)

 

Vamos aprender um dos modos para ter um sistema todo Torificado pela rede TOR (dããa). O sistema a ser utilizado é o Slackware 14.0, mas a técnica pode ser realizada com qualquer outra distro.

A rede TOR, como pode-se ver na Wikipédia (link nas fontes do artigo) ou no site do projeto (link nas fontes do artigo), utiliza uma série de proxys aleatórios (CLIENTE → PROXY → PROXY → PROXY → SITE) que mudam constantemente de forma aleatória.

Isso permite ocultar espionagens de análise de tráfego que algumas empresas fazem (de onde vêm e para onde vão os pacotes) e também obter certo nível de privacidade, mas sem criptografia HTTPS, por exemplo, podem ler teus dados entre o Proxy de saída da rede TOR e o site acessado por você.

Aviso: evite logar redes sociais, contas pessoais de email e qualquer coisa que leve até tua identidade, relacionando-a ao teu navegador.

Se não criptografadas (se decidir usar contas pessoais verifique se a página usa HTTPS!) tuas senhas e logins podem ser roubadas por um possível cracker no nó de saída (A NSA, nos EUA e outros malandros pelo mundo, tentam isso o tempo todo!).

Ao ser executado, o TOR fica escutando (esperando conexões) através de um Proxy Socks na porta 9050 ou 9051, por padrão (configurável para qualquer outra), da tua interface de loopback (placa lo, IP 127.0.0.1) e é por esse Proxy Socks que os pacotes saem da tua máquina e entram na rede TOR.

Se você executar o TOR (modo texto) e configurar o Firefox para usar o Proxy Socks 127.0.0.1 e porta 9050 ou 9051, já poderá acessar a internet pela rede TOR, mas resolvendo DNS diretamente pelo teu IP (depende da aplicação e configuração), não pelo IP de um nó da rede TOR (cuidado com isso!).

Muitos programas podem não ser compatíveis com Proxys Socks, o que causará erros de conexão.

Para tornar o TOR compatível com todos os programas, faremos uso do programa Polipo, ele será responsável por criar um outro Proxy local, mas agora HTTP e apontando para o proxy socks do TOR. Ele servirá como um “conversor” Socks – HTTP.

Ficará mais ou menos assim:

 wget www.google.com > consulta_DNS_server
resposta_com_IP_do_DNS_server > wget 

 wget > CONECTA_AO_PROXY_POLIPO_PEDINDO_A_PAGINA_DO_GOOGLE_VIA_IP
POLIPO > CONECTA_AO_TOR_PEDINDO_A_PAGINA_DO_GOOGLE_VIA_IP
TOR_BUSCA_INFORMAÇÃO > POLIPO
POLIPO > wget 

Ou:

 wget > PEDIDO > DNS > RESPOSTA > wget > PEDIDO > polipo > PEDIDO > tor > PEDIDO>
site > RESPOSTA > tor > RESPOSTA > polipo > RESPOSTA > wget 

Caso queira, você pode fazer uso de outro Proxy HTTP, como o Privoxy, basta configurá-lo para direcionar as conexões para a porta 9050 de 127.0.0.1, entretanto, eu não o testei e o artigo no qual me baseei recomenda o Polipo pelas seguintes razões no texto original, em:

“¿Cuál Proxy elegir?

Hay algunos proxies disponibles que podríamos usar, pero la mayoría de las comunidades utilizan Privoxy o Polipo. Hay un par de razones por las cuales es preferible usar Polipo que Privoxy, y se describen en detalle aquí: Privoxy vs. Polipo. Para resumir, estas son las razones por las cuales Polipo es la mejor opción:

Privoxy no tiene pipelining para HTTP 1.1
Privoxy cachea los objetos más pedidos
Privoxy necesita transferir la página entera para parsearla y mostrarla al usuario.
Esto significa que la experiencia del usuario con Privoxy es mucho peor,
debido a que el usuario debe esperar constantemente que los datos de la página web completa sean transferidos
desde el servidor, antes de ser mostrados.”

Já para o SlackBuild do TOR é dito o seguinte no slackbuilds.org:

“This script requires a ‘tor’ user/group to exist before running.
The recommended UID/GID is 220. You can create these like so:
groupadd -g 220 tor
useradd -u 220 -g 220 -c “The Onion Router” -d /dev/null -s /bin/false tor

You can pass another user/group to the script; this is however, less safe:
TOR_USER=nobody TOR_GROUP=nogroup sh tor.SlackBuild”

Ou seja, é recomendado adicionar um grupo e user, especialmente para o TOR, e é o que faremos. O TOR iniciará com um grupo próprio, isso nos permitirá liberá-lo via group ID no IPtables e bloquear o resto dos pacotes que tentarem sair ou entrar na máquina.

Também é mais seguro executá-lo com um user próprio para que, caso ocorra uma vulnerabilidade com o TOR, o possível atacante tenha poderes limitados no teu sistema dentro do grupo TOR, o que poderia causar um estrago se o mesmo estivesse sendo executado como root ou no grupo root.

Não ensinarei a instalar os dois programas necessários, pois isso depende da distro, versão etc.

Para debs based, apt-get install tor e proxy desejado (polipo ou privoxy). Tendo estes programas instalados, segue-se o artigo.

 

PRÁTICA – PASSO 1 – CONFIGURANDO DNS SERVER DO TOR

 

Usarei as configurações padrão do TOR (escutar na porta 9050 de 127.0.0.1).

As únicas configurações que faremos é para que o TOR disponibilize um Server DNS local e apontar o /etc/resolv.conf para este Server DNS local.

Configura-se o TOR como “resolvedor” de DNS editando /etc/tor/torrc, adicionando o seguinte conteúdo ao final do arquivo:

#########################################
#Configurando o TOR para resolver DNS.
#Esta dica foi pega de:
#https://elbauldelprogramador.com/logrando-el-anonimato-con-tor-parte-2-proxies-y-servidores-de-dns/
#Além de adicionar essas 3 linhas aqui é preciso apontar o /etc/resolv.conf para 127.0.0.1:53

DNSPort 53
AutomapHostsOnResolve 1
AutomapHostsSuffixes .exit,.onion
#########################################

Observe que a porta 53 pode ser trocada por qualquer outra.

Editamos também /etc/resolv.conf, apontando-o para o DNS Server local do TOR, assim (como root):

# echo “nameserver 127.0.0.1:53” > /etc/resolv.conf

E “travamos” o “resolv.conf” para que ele não possa ser alterado por um programa que pegue IP via DHCP e troque o server DNS como faz o dhclient.

Assim, como root:

# chattr +i /etc/resolv.conf

Caso queira “destravar” o /etc/resolv.conf para edições, troque o “+i” por “-i”.

A parte de configuração do IPtables é muito, muito importante. É ela que vai impedir os “vazamentos DNS” de aplicações que tentarem fazer a consulta DNS diretamente por um server diferente de 127.0.0.1:53

Importante: da forma que será indicado neste artigo, o DNS será resolvido pelo TOR, apenas se o teu programa “resolvedor de DNS” fizer uso do /etc/resolv.conf para resolver o DNS, o que o levaria a 127.0.0.1:53, caso contrário, ele será barrado no Firewall que configuraremos.

Force teu sistema/programa (como wget, nmap. etc.) a usar 127.0.0.1:53 como Server DNS, se ele já não o fizer automaticamente com a configuração que fizemos no /etc/resolv.conf.

Saiba que se o navegador/programa que você usa resolver por si mesmo o DNS em outro server que não o do TOR, sem que o Firewall esteja configurado para bloquear pacotes que tentam sair por fora do TOR, tudo o que você tentar acessar via domínio, via endereço, via link HTTP, vai ser consultado no teu Server DNS externo e ele vai ficar sabendo os endereços que você está tentando resolver. Isso claro, se não estiver usando o Firewall que mostrarei adiante para impedir consultas DNS e quaisquer saídas e entradas de pacotes fora do grupo TOR.

Usando regras de Firewall como essas, se um programa “malandrinho” tentar se conectar à internet diretamente sem passar pelo TOR, ele será barrado antes.

Após a parte do TOR, DNS e Firewall já estarem configuradas e prontas para uso (lembre-se, ative antes) a resolução de DNS pelo TOR já estará funcionando em 127.0.0.1:53 e qualquer aplicação que suporte Proxy Socks já pode ser configurada para usar o TOR em 127.0.0.1:9050 e o DNS em Server em 127.0.0.1:53, mas como nem todo programa suporta Proxys Socks, vamos usar um Proxy local para “converter” socks – HTTP, faremos isso com o Polipo.

Veja a pergunta e respostas no Reddit, sobre resolução de DNS no TOR, é interessante (link nas indicações de fontes do artigo).

Na próxima página, iremos configurar um Firewall com IPtables para permitir apenas pacotes saindo/entrando pelo TOR e configurar o Polipo para fazer a “ponte” HTTP-SOCKS.

 

PRÁTICA – PASSOS 2 E 3 – IPTABLES E POLIPO

 

PASSOS 2 – IPTABLES

IPtables – Liberando apenas saídas de pacotes TCP Pelo TOR Via GID.

Lembra da informação sobre o GID (ID de grupo) do TOR lá no início do artigo?

Vamos utilizar uma funcionalidade do IPtables para permitir saídas de pacotes apenas para o GID do TOR, mas também é possível fazer isso por PID e UID.

Sem mais, seguem as regras do IPtables para bloquear tudo e liberar apenas saídas e entradas pelo TOR.

#############################################
#Limpar todas as regras anteriores.
iptables -X
iptables -F
iptables -t nat -F

#Mudar as políticas padrão para DROP,
#descartar pacotes que não estiverem incluidos em uma regra que permita-os.
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#As linhas aqui embaixo permitem saídas para qualquer porta do IP da interface de loopback
#e entradas da própria loopback na loopback. -d = destino e -s = source/fonte.
#diz de onde o pacote tem que vir e para onde ir “127.0.0.1” para ser permitido
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT  -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

#Libera entrada de pacotes pelas portas que tiveram a conexão iniciada por esta máquina.
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

#Liberando saída de pacotes de pacotes para o grupo do TOR (GID = 220)
iptables -A OUTPUT -p tcp -m owner –gid-owner 220 -j ACCEPT
###########################################

Esse script de Firewall precisa ser colocado para iniciar com o sistema, vide método para tua distro. No Slackware, eu coloquei em /etc/rc.d/rc.meu-firewall e chamo-o em /etc/rc.d/rc.M.

PASSO 3 – POLIPO

POLIPO – “Servindo de ponte” entre os programas HTTP e o TOR via Proxy HTTP Local.

Agora, nós temos que configurar o Proxy HTTP local Polipo para direcionar seus pacotes de saída para o Proxy SOCKS do TOR, isso vai permitir o uso do TOR com aplicações que não suportam Proxys SOCKS.

Com o Polipo já instalado, vamos editar o arquivo /etc/polipo/config e adicionar o seguinte ao final: dele:

##########################################################
#19/11/2016.
#Configurando um proxy http local que direciona para o proxy socks do tor em 127.0.0.1:9050
#Dica pega de: http://www.diolinux.com.br/2012/04/como-usar-o-tor-para-navegar.html
#Aqui em “localhost:9050” é endereço de onde o TOR está servindo o proxy socks.
socksParentProxy = “localhost:9050”
socksProxyType = socks5
#Setando a porta onde ele vai escutar.
#Poderia ser qualquer outra.
proxyPort = 80
##########################################################

Isso vai fazer com que o Polipo sirva em 127.0.0.1:80, um Proxy HTTP que leva para o Proxy SOCKS 127.0.0.1:9050 fazendo a “conversão” do SOCKS do TOR para HTTP.

Para fazer com que todos os programas reconheçam que é necessário usar um Proxy, configuraremos isso em variáveis de ambiente na próxima página.

 

PRÁTICA – PASSO 4 – VARIÁVEIS DE AMBIENTE

 

Depois que o Firewall estivar ativado, nenhuma aplicação além do TOR (e seu grupo) poderá acessar a internet diretamente.

Mas as aplicações ainda não sabem que precisam usar o Proxy do TOR 127.0.0.1:9050 (socks) ou do Polipo 127.0.0.1:80 (HTTP, que aponta para 127.0.0.1:9050) para acessar a internet.

Para fazer todo o sistema (e todos users da máquina) adotarem o uso do TOR, colocaremos umas configurações em /etc/profile. Esse arquivo é responsável pelas variáveis/constantes que são iniciadas pelo sistema.

Colocaremos o Proxy em variáveis maiúsculas e minúsculas, para caso um programa a procure em qualquer das formas, são elas:

########### 19/11/2016. Configurando proxys padrão para usar o polipo que direciona para o TOR.
#Dica pega de: http://mad2ogs.blogspot.com/2013/04/configurar-acesso-internet-via-proxy-em.html
export http_proxy=”http://127.0.0.1:80″
export https_proxy=”http://127.0.0.1:80″
export ftp_proxy=”http://127.0.0.1:80″
export socks4_proxy=”127.0.0.1:9050″
export socks5_proxy=”127.0.0.1:9050″

export HTTP_PROXY=”http://127.0.0.1:80″
export HTTPS_PROXY=”http://127.0.0.1:80″
export FTP_PROXY=”http://127.0.0.1:80″
export SOCKS4_PROXY=”127.0.0.1:9050″
export SOCKS5_PROXY=”127.0.0.1:9050″
###########

Pronto. Se o Firewall, o TOR e o Polipo estão configurados para serem ativados no boot, basta reiniciar a máquina para testar o resultado final.

Faça um teste para ter certeza de que tuas consultas DNS não estão vazando (sendo feitas diretamente por fora do TOR) acessando:

Veja se o DNS Server que aparece no teste é diferente do teu DNS e localização real, diferente do teu ISP.

Se no momento em que você estiver lendo isso, o site não mais estiver funcionando, procure por “DNS leak Test” na internet, existem outros sites que oferecem o serviço de teste de vazamento DNS gratuitamente e, se não me engano, é possível fazer um teste parecido com o TCPDUMP na própria máquina.

Para saber mais sobre o TOR e métodos de “Torificação”, acesse o site do TOR e do Tails OS, um sistema que funciona “torificando” toda a máquina. Também há bastante informação útil nos links fonte deste artigo.

Todas os sites que serviram de fonte, foram acessados dia 20/11/2016, podem estar OFF no momento em que você estiver lendo isso. Caso estejam OFF, procure pelo assunto do link na internet, em fóruns, outros sites etc.

Caso encontre erros, omissões etc, favor comunicar ou corrigir. Permito a cópia do artigo desde que dados os devidos créditos.

Carlos Eduardo, 2017.

Boa sorte, tenham cuidado.

FONTES

Páginas dos projetos e links das fontes de consulta.

Projeto TOR:

TOR Wikipédia:

Projeto proxy HTTP Polipo:

Configurações do TOR, Polipo, DNS e mais em espanhol:

Ver detalhes do teu Browser atual:

Fingerprinting, artigo em inglês:

NoScript:

NoScript:

Tails Os:

Trocar useragent Firefox/Chrome/IE:

Campos de cabeçalho HTTP:

Viewing HTTP Headers using Wget:

HTTP Headers – o cabeçalho oculto:

Privoxy:

TOR SlackBuild:

Polipo SlackBuild:

Pergunta e respostas sobre resolução de DNS na TOR:

Como usar o TOR para navegar + dica Polipo:

Configurar Proxy no GNU/Linux:

Teste de vazamento DNS:

Rolar para cima