iptables para proxy TCP transparente

5

Aqui está minha situação. Eu tenho um iPad, um TiVo e um roteador dd-wrt na minha rede, junto com uma máquina que eu gostaria de usar para cheirar / descriptografar o tráfego entre o iPad e o TiVo.

O iPad tem um aplicativo que A) descobre automaticamente o IP para o TiVo e B) fala com o TiVo via SSL. O iPad está na minha rede Wi-Fi, enquanto o TiVo está ligado, garantindo que os pacotes estão passando pelo meu roteador dd-wrt; Eu posso cheirar eles com o tcpdump, mas eles são criptografados.

Gostaria de tentar usar o tcpcatcher para tentar um man-in-the-middle com descriptografia e re-criptografia de SSL. Eu suponho que eu poderia usar algumas regras de iptable simples no roteador dd-wrt para encaminhar / redirecionar / nat os pacotes que estariam viajando entre o ipad e o tivo, da mesma forma que você pode fazer para o proxy HTTP transparente. Eu não encontrei as regras certas para fazer isso, no entanto, e gostaria de alguma ajuda.

    
por arantius 12.04.2011 / 20:22

3 respostas

1

Fazer um redirecionamento com o iptables pode ser feito da seguinte forma:

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.1:3128

Este é um redirecionamento padrão da web para um servidor proxy. A regra é colocada na cadeia PREROUTING da tabela NAT para pacotes que chegam na interface eth1 para a porta 80 do protocolo tcp e DESTINATION NATTED para um ip e porta.

Uma vez que o tráfego é redirecionado, você terá que devolvê-lo ao seu destino original sem o conhecimento do endpoint. Eu estaria interessado em saber como você consegue isso.

    
por 26.07.2011 / 06:31
1

Aqui está um bom tutorial para realizar isso. Basicamente, você precisa DNAT pacotes para o servidor proxy e também SNAT-los para que o roteador obtém as respostas do servidor proxy (e, em seguida, desfaz o NAT). As regras do iptables devem ser algo assim (supondo que o IP do servidor proxy seja 10.0.0.10):

iptables --table nat --append PREROUTING --in-interface eth0 --source !10.0.0.10 --protocol tcp --dport 80 --jump DNAT --to 10.0.0.10:3128
iptables --table nat --append POSTROUTING --out-interface eth0 --source 10.0.0.0/24 --destination 10.0.0.10 --jump MASQUERADE

A primeira regra redireciona os pacotes destinados à porta 80 para o servidor proxy (excluindo pacotes do próprio servidor proxy, porque ele precisa realmente entrar em contato com o servidor da web na Internet) e a segunda regra altera o endereço de origem nos pacotes redirecionados ao enviar para o servidor proxy. (Estou assumindo que a cadeia FORWARD aceita esses pacotes, se não você também precisa de outra regra.)

    
por 28.04.2012 / 00:23
1

Você pode usar o meu programa tun2socks para a parte "TCP catching". Este programa faz uma interface de rede TUN virtual que encaminha todas as conexões TCP de saída através de um proxy SOCKS. Se você adicionar uma regra de roteamento (regra ip) para encaminhar a conexão do Ipad na interface TUN do tun2socks, o tun2socks a encaminhará para o seu proxy SOCKS5. Deve ser muito mais fácil executar o ataque MITM em / como um proxy SOCKS.

Note que esta abordagem é similar à regra de redirecionamento do iptables do seu ponto de vista, mas você não precisa fazer nada especial para descobrir o destino real da conexão - ela estará presente nos cabeçalhos do protocolo SOCKS5.

UPDATE : obter pacotes do Ipad para a interface TUN é mais difícil do que parece. Estou supondo que o seu roteador tenha uma interface br0 bridge que conecte wlan0 (onde o Ipad está) e eth0 (onde está o Tivo). Note que eu não estou muito familiarizado com o DD-WRT, então os nomes podem ser diferentes (verifique com brctl show ).

Agora, o problema é que os pacotes do Ipad ( wlan0 ) para Tivo ( eth0 ) não são roteados, mas bridged (isto é, a mesma coisa que um switch faz). Isso significa que, mesmo se você adicionar regras de ip, elas não serão importantes, porque esses pacotes não passarão pelo roteador, pelo menos logicamente falando. Para resolver isso, você tem que redirecionar os pacotes do Ipad como se eles fossem direcionados diretamente para o endereço MAC de br0 e não para o endereço MAC do Tivo, que está em eth0 ; isso fará com que o kernel os trate como pacotes IP de entrada, roteando-os esperançosamente de acordo com as regras de ip e a tabela de roteamento. Finalmente, o comando é:

ebtables -t nat -A PREROUTING -i wlan0 -p ipv4 --ip-source <ip_of_ipad> --ip-destination <ip_of_tivo> --ip-protocol TCP -j dnat --to-destination <mac_of_br0>

Isso adiciona uma regra ebtables que redirecionará os pacotes correspondentes recebidos em wlan0 diretamente para br0 . Você pode ter que adicionar mais condições aqui se isso pegar muito. Note que dnat não significa o NAT (IP) usual - no ebtables, NAT significa mudar o endereço MAC dos frames, ao invés do endereço IP.

Você pode obter uma versão compilada do tun2socks para o DD-WRT aqui ; esperamos que funcione no seu dispositivo.

    
por 28.04.2012 / 01:17