terça-feira, 18 de fevereiro de 2014

Como funciona o proxychains

Teoria

A teoria de como o proxychains funciona é extremamente simples: utilizando vários proxies, o seu pacote passa por um caminho pré-definido por você na configuração (como veremos mais adiante) antes de chegar ao destino. Quanto mais servidores proxy existirem entre você e o destino, mais difícil é rastrear o seu verdadeiro IP. Mas o que é um servidor proxy?
O servidor proxy atua como um gateway entre você e o seu destino. Imagine o seguinte cenário: sua máquina está configurada para usar um proxy e você quer acessar um site qualquer. A sua máquina vai enviar a requisição para o servidor proxy, o proxy por sua vez vai “pegar” o site e só depois irá repassar os dados para a sua máquina, que vai mostrar o site no navegador. Ou seja, no fim das contas quem acessa o site (do ponto de vista do host que o hospeda) é o servidor proxy e não a sua máquina.
O segredo do proxychains é usar vários proxies antes de finalmente se conectar ao destino final. Imagine o seguinte cenário, o proxychains foi configurado para usar 3 proxies: p1, p2 e p3. Assim, quando você quiser acessar um site, primeiro a requisição vai para o proxy p1, depois para o p2, p3 e finalmente chega ao destino. Nos logs do destino o IP que irá constar é o IP do proxy p3, não o IP que foi designado para a sua máquina pelo seu provedor. Isso funciona para qualquer protocolo desde que você indique para o software que ele deve usar o proxychains. Portanto, acessar um site via HTTP, um FTP, fazer um scan (seja ele qual for), um download, etc. é possível usando a cadeia de
NOTA: É recomendado que você use proxies de países diferentes e, se possível, servidores que sejam administrados por pessoas diferentes. Assim, o processo de rastreio fica MUITO mais complicado. Também é recomendado que se use por volta de 4 ou 5 proxies diferentes.
Porém, nem tudo são flores. Existem algumas desvantagens em se usar uma cadeia de proxies (não necessariamente com o proxychains, mas sim com qualquer software do gênero):
  • não importa a quantidade de proxies que você utilize, você nunca vai ficar 100% anônimo na Internet. Usar uma cadeia de proxies só dificulta o processo de rastreamento;
  • servidores proxy abertos geralmente duram pouco tempo (algumas semanas). Ou seja, você vai ter que ficar procurando por novos proxies para usar frequentemente. Além disso, quando se usa uma cadeia você vai precisar testar cada um dos seus proxies para descobrir qual deles “morreu”;
  • obviamente o uso de proxies tem um impacto no desempenho, afetando-o negativamente. Quanto mais proxies envolvidos, maior pode ser o impacto.
Bom, acredito que com essa explicação tenha ficado mais claro o porquê de eu sempre dizer que não vale a pena você simplesmente bloquear a origem de um ataque. Alguém que está fazendo um scan contra você, pode simplesmente mudar o endereço do último proxy e continuar scaneando tranquilamente mesmo depois de você ter bloqueado o IP antigo no seu firewall de borda!

Configuração do proxychains

Toda a configuração do proxychains se dá através do arquivo /etc/proxychains.conf. Aqui, todo e qualquer aspecto do software pode ser personalizado para que ele atenda às suas necessidades. Aqui, vou comentar as opções disponíveis no arquivo e dar uma rápida descrição do que elas fazem.
  • dynamic_chain: Ativar esta opção faz com que o proxychains obedeça a ordem dos proxies na lista que você informou (veremos como fazer isso mais adiante) se conectando a cada um deles e pulando os proxies que não estiverem respondendo. Na minha opinião, é a melhor opção.
  • strict_chain: Faz com que o proxychains use todos os proxies na ordem que foram inseridos na lista. Se algum proxy não estiver mais respondendo, o processo irá finalizar e um erro será retornado para a aplicação usando o proxychains.
  • random_chain: Quando esta opção está ativa, alguns proxies da lista são selecionados aleatoriamente e utilizados para a conexão. A quantidade de proxies selecionados é definida pela opção “chain_len”.
  • chain_len: Define a quantidade de proxies aleatórios a serem utilizados quando a opção “random_chain” é selecionada.
  • quiet_mode: Não mostra output da biblioteca.
  • proxy_dns: Envia as requisições DNS também através da cadeia de proxies.
  • tcp_read_time_out: Time out em milisegundos para esperar uma resposta.
  • tcp_connect_time_out: Time out em milisegundos para esperar que uma conexão seja estabelecida.
NOTA: As opções dynamic_chain, strict_chain e random_chain não podem ser utilizadas ao mesmo tempo em hipótese alguma. Portanto, quando uma delas estiver descomentada as outras duas devem ser comentadas. Além disso, a opção chain_len só pode ser descomentada quando random_chain for utilizado.
Depois de configurar as opções adequadamente, você precisa inserir os IPs dos proxies a serem utilizados. Isto deve ser feito abaixo da linha “[ProxyList]” no seguinte formato:
<versão do socks> <endereço IP> <porta>
Por exemplo:
socks5 1.2.3.4 1234
Você pode inserir quantos proxies quiser, um por linha no formato descrito acima.
Por padrão, o proxychains tem uma entrada para usar o Tor instalado na máquina local. Se você não quer usar a rede do Tor, basta comentar a linha assim:
#socks4 127.0.0.1 9050
E pronto. Você também pode remover a linha, mas se lembre de adicionar outros proxies para você poder usar!

Como encontrar servidores proxy para usar

Encontrar proxies para usar com o proxychains é uma tarefa extremamente simples, na verdade. Utilizando o Google você consegue encontrar vários sites que disponibilizam listas muito bem organizadas, muitos casos até separadas por país.
Alguns dos sites que eu uso para encontrar proxies:
  • proxychains.net
  • xroxy.com
  • sockslist.net
Nesses sites você já consegue encontrar proxies pra usar pro resto da vida! Além disso, uma procura no Google com os termos “sock proxy list” vai te render vários outros sites que podem te mostrar vários outros proxies diferentes. Assim, você pode testar vários e ficar com os que tem um desempenho melhor.
Você usa algum outro site? Deixe a sua dica nos comentários!

Exemplo de uso do proxychains

Assim como a configuração, o uso do proxychains é bem simples. Ele não possui interface gráfica, toda a interação com ele é feita através da linha de comando. O formato geral é o seguinte:
# proxychains <programa> <argumentos do programa usando o proxychains>
Então por exemplo, se eu quiser rodar um scan com o NMap passando por toda a cadeia de proxies que eu configurei:
# proxychains nmap -sV -p80 www.teste.com.br
ProxyChains-3.1 (http://proxychains.sf.net)
Starting Nmap 6.01 ( http://nmap.org ) at 2012-09-07 11:41 BRT
|DNS-request| www.teste.com.br
|S-chain|-<>-109.173.124.11:5791-<><>-4.2.2.2:53-<><>-OK
|DNS-response| www.teste.com.br is 200.147.67.142
|S-chain|-<>-109.173.124.11:5791-<><>-200.147.67.142:80-<><>-OK
Nmap scan report for www.teste.com.br (200.147.67.142)
Host is up (0.032s latency).
rDNS record for 200.147.67.142: 200-147-67-142.static.teste.com.br
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.0.63 ((Unix) Ganesh/2.2.0)
Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.53 seconds
Viu só? Não muda absolutamente nada na linha de comando do NMap, apenas precisamos adicionar o “proxychains” no começo para que todo o tráfego de rede gerado pelo scanner seja enviado para os proxies. Se você tiver algum erro, basta prestar bastante atenção na mensagem exibida pelo proxychains. Muito frequentemente o problema é um timeout do proxy que não está mais ativo. Nestes casos, a única solução é configurar o software para usar um outro proxy através do /etc/proxychains.conf.

Conclusão

Embora o proxychains possa ser usado para fazer coisas erradas, existem muitos usos legítimos para ele na área de segurança da informação. A aplicação dele vai depender de você, por isso faça bom uso das ferramentas que são disponibilizadas para a comunidade e não faça uma besteira que pode acabar te perseguindo pro resto da vida.
Além disso, acredito que este post te dê uma noção melhor de como um atacante trabalha e também te mostrou o quão inútil é ficar bloqueando a origem de ataques achando que está protegido. Ter um ambiente seguro demanda muito mais do que um simples DROP no seu firewall. Você precisa manter o ambiente atualizado, bem configurado e seus usuários bem educados em relação à segurança da informação.

0 comentários:

Postar um comentário