Túneis secretos - Linux Magazine

Propaganda
Coluna do Kurt
COLUNA
Túneis secretos
Como transferir dados de e para sistemas
Linux sem aparecer no radar.
T
odos nós já estivemos lá: você liga seu computador à rede (com ou sem fio) e ele não funciona.
Depois, você tenta entrar no servidor por SSH
e recebe a mensagem “falha de conexão”. Ao tentar
conectar-se ao seu servidor de email na porta 25 usando
TLS (ou seja, criptografia), você vê apenas o banner do
proxy de email do provedor local, ou recebe outra falha
de conexão. Mas nem tudo está perdido – pelo menos
você consegue navegar na Web. Infelizmente, toda vez
que você digita alguma URL errada, acaba na página
de busca do provedor, e qualquer coisa com conteúdo
questionável, como hacking, é bloqueada.
Neste ponto, você tem duas escolhas: encontrar um
bom livro para ler ou usar um software de VPN para
se conectar a uma máquina remota sem sofrer com os
filtros ou problemas de conexão. Entretanto, alguns
provedores realmente cruéis – ou simplesmente incompetentes – também bloqueiam softwares comuns para
VPN e SSH na tentativa de evitar acesso sem filtros à
Internet por meio de suas redes.
Assim como tentar impedir um gato de entrar na caixa,
quando você tenta evitar que geeks façam algo, provavelmente eles simplesmente vão tentar com mais afinco.
Se você conseguir passar alguma forma de dado para
um sistema remoto (IPSec, SSH, http, mensagens instantâneas, sinais de fumaça), é possível usar esse canal
para transportar qualquer dado. Um provador só consegue bloquear ou filtrar certa quantidade de tráfego
antes de se tornar completamente inutilizável. O truque
é encontrar um protocolo de rede que seja permitido e
não sofra modificações, e que consiga isso com softwares
já existentes que permitam enviar os dados por túnel.
Felizmente, três protocolos de rede básicos – ICMP,
DNS e http – quase sempre são permitidos, assim como
uma grande variedade de outros protocolos, como SSH
e mensagens instantâneas. Com sorte, você conseguirá
usar softwares como SSH com encaminhamento de por16
tas ou capacidades de VPN sobre uma porta permitida,
como 80. E se você tiver azar, o provedor vai forçá-lo a
atravessar seus próprios proxies web e servidores DNS
para acessar a Internet.
Túnel via ICMP
O ICMP é um ótimo protocolo para enviar dados por
túneis, pois quase sempre é permitido (bloqueá-lo causa
problemas em muitos níveis) e consegue transportar um
monte de dados [1]. Um pacote ICMP possui 20 bytes
de dados no cabeçalho (origem, destino etc.) e 8 bytes
de dados do conteúdo (tipo de mensagem, código etc.),
além de uma quantidade variável de outros dados. A quantidade desses outros dados enviados pelo pacote ICMP
geralmente é limitada apenas pelo tamanho máximo
do pacote na rede (em Ethernet e Wi-fi, geralmente são
1.500 bytes). Isso significa que é possível enviar montes
de dados por pacotes ICMP com pouco overhead.
Há algumas opções de softwares para túneis sobre
ICMP, mas a melhor opção é o Ping Tunnel (Ptunel),
pois é o mais atualizado [2]. Instalar o Ptunnel é relativamente simples; há RPMs para a segunda versão mais
recente no repositório Dag.
Para instalar e compilar os fontes, digite:
rpm -Uvm http://dag.wieers.com/rpm/packages/ptunnel/
ptunnel-0.61-1.rf.src.rpm
cd /usr/src/redhat/
rpmbuild -ba ptunnel.spec
Se você desejar a versão mais recente do Ptunnel,
será preciso atualizar o source RPM ou compilá-lo diretamente. Para obter e compilar os fontes:
wget http://www.cs.uit.no/~daniels/PingTunnel/
PingTunnel-0.70.tar.gz
tar -xf PingTunel-0.70.tar.gz
http://www.linuxmagazine.com.br
Insegurança | COLUNA
cd PingTunnel
make
make install
Usar o Ptunnel não é muito mais difícil do que compilálo. No lado servidor (o proxy), basta executar o Ptunnel
com um dispositivo de rede opcional (-c) e uma senha
(-x). No lado cliente, é preciso especificar o endereço do
servidor proxy, a porta local onde escutar e o endereço
e porta remotos onde se deseja conectar. O exemplo a
seguir supõe que um servidor proxy em ptunnel.exemplo.org esteja conectado à Internet pela eth0, com um
proxy Squid no servidor squid.exemplo.org na porta 3128
com senha blabla para manter a segurança da conexão:
Servidor:
./ptunnel -c eth0 -x blabla
Cliente:
./ptunnel -p ptunnel.exemplo.org \
-lp 3128 -da squid.exemplo.org \
-dp 3128 -x blabla
Agora simplesmente configure seu navegador web
para usar como proxy a máquina local na porta 3128,
então o tráfego http será convertido para ICMP e depois
enviado para ptunnel.exemplo.org. Nesse local, ele será
desempacotado e enviado para o servidor proxy squid.
exemplo.org, e então enviado para a Internet. O servidor Squid pode ser executado localmente no mesmo
servidor com o Ptunnel, que permite que se atravesse
qualquer filtragem ou problema da rede do provedor.
Túnel via DNS
Embora não seja tão confiável quanto o ICMP, o DNS
é outro protocolo que pode ser usado para criar túneis
de dados. Alguns provedores redirecionam sistemas não
registrados ou desconhecidos para um gateway de pagamento. Para isso, eles respondem requisições DNS com o
endereço IP do gateway de pagamento. Outros provedores
simplesmente usam um proxy web transparente para interceptar todas as requisições WWW e redirecioná-las para
seu gateway de pagamento (nesse caso, provavelmente é
possível enviar seu tráfego pelo túnel sobre DNS).
O DNS tem várias vantagens sobre o ICMP. Apesar de
bloqueios ao ICMP causarem problemas, eles são possíveis. Entretanto, bloquear o DNS quebra tudo. Apesar de
o Ping Tunnel 0.70 agora suportar a transmissão de dados
pela porta UDP 53, ele não envia realmente pacotes DNS
válidos, então não é possível passar esse tráfego por servidores DNS. Para isso, é preciso ter uma conexão direta com
o servidor proxy. Nesse caso, é possível simplesmente usar
o OpenVPN ou OpenSSH sobre a porta 53.
Linux Magazine #56 | Julho de 2009
Listagem 1: Proxytunnel
01 Host proxytunnel.exemplo.org
02 ProtocolKeepAlives 30
03 ProxyCommand /caminho/do/proxytunnel -p proxy.
cliente.com:8080 -u user -s password -d
proxytunnel.exemplo.org:443
Para um proxy de verdade que encapsule os dados em
pacotes DNS válidos, há o OzymanDNS [3]. Porém,
sem atualização desde a versão inicial, o OzymanDNS
está um tanto desatualizado.
Túnel via http
A última opção é enviar o tráfego por meio de um túnel
http ou https [4]. É bem provável que a rede suporte
conexões https para fora. O https é melhor que o http
porque criptografa o tráfego, então reduz a probabilidade
de modificação dos dados pelo provedor. Assim como
o software de tunelamento ICMP, é possível compilar
o Proxytunnel [5] dos fontes ou baixar um pacote RPM
(fonte ou binário).
Para usar o Proxytunnel, simplesmente execute-o
no servidor como um daemon independente ou por
meio do inetd. No lado cliente, adicione-o como um
ProxyCommand ao cliente OpenSSH (listagem 1).
Como se pode ver, há uma variedade de opções para
enviar dados por túneis, dependendo dos protocolos
disponíveis. Algumas configurações antes do problema
podem economizar bastante trabalho quando você se
vir enjaulado em uma rede problemática, filtrada ou
simplesmente defeituosa. n
Mais informações
[1]Túnel por ICMP: http://www.phrack.org/
issues.html?issue=49&id=6#article
[2]Ping Tunnel:
http://www.cs.uit.no/~daniels/PingTunnel/
[3]Howto OzymanDNS: http://www.dnstunnel.de/
[4]Túnel SSH sobre http(s):
http://dag.wieers.com/howto/ssh-http-tunneling/
[5]Proxytunnel:
http://proxytunnel.sourceforge.net/
Kurt Seifried é consultor de segurança da informação especializado
em redes e Linux desde 1996. Ele frequentemente se pergunta como
a tecnologia funciona em grande escala mas costuma falhar em
pequena escala.
17
Download