quarta-feira, 23 de junho de 2010

Hacking with Ipv6

Há tempo que o IPv6 esta nos tópicos das listas de discussão sobre redes e em congressos sobre gerenciamento de redes mas muito pouco se tem ouvido falar dele nos tópicos envolvendo segurança. O IPv6 não deve ser preocupação somente da parte de engenharia de rede e é isso que vou tentar demonstrar no post a seguir.

Nos dias de hoje todos os sistemas operacionais modernos destinados a desktop vem com o IPv6 habilitado por padrão e é exatamente ai que mora o perigo, O IPv6 possui por padrão o endereço conhecido no IPv4 como PIPA (Private IP Address) que possui o range 169.254.0.0/16 (RFC 3330) porém não há configuração automática para esse range IP, já no IPv6 toda a interface de rede (com ou sem IP definido) também vai possuir um IP na rede fe80::/64 conhecido como endereço de link local onde o IPv6 faz toda a comunicação entre as demais maquinas com IPv6 na rede local inclusive as mensagens de “Neighbor Discovery” e “Router Advertisement” que nos dão a opção de configurar um IP para a maquina sem necessitar de um servidor de DHCP. Essa configuração funciona da seguinte maneira:





No desenho acima vemos como o IPv6 pode receber um IP sem haver um DHCP na rede através da mensagem de Router Advertisement, porém se não há nenhuma máquina na rede com essa configuração não há problemas (por enquanto). Porém como citei no inicio os sistemas operacionais modernos vem com o IPv6 habilitado por padrão o que temos que fazer é só configurar a nossa máquina como router IPv6 e para isso podemos utilizar o radvd (http://www.litech.org/radvd/). Baixe o radvd, compile e instale ( você também pode utilizar o yum ou apt de acordo com a distribuição linux que você utiliza), após a instalação edite o arquivo “/etc/radvd.conf” e deixe o mesmo com o seguinte conteúdo:

interface eth2 # Interface de listen
{
AdvSendAdvert on; # Habilita o router adivertisement
prefix 2001:db8:f0ca::/64 # prefixo a ser distribuído
{
AdvAutonomous on; # Utiliza especificações da RFC 4862 (evita Ips duplicados)
};
};



Após configurar o arquivo radvd.conf adicione um endereço de IPv6 na mesma rede que você configurou o arquivo

ifconfig eth2 inet6 add 2001:db8:f0ca::ca5a/64

agora basta iniciar o serviço radvd

/etc/init.d/radvd start

Agora estamos configurados como router Ipv6 da rede local e qualquer pedido de neighbor dicovery enviaremos um endereço IP na rede 2001:db8:f0ca::/64

Monitorando:

Agora vamos ver o tráfego da interface para ver se alguem já fez alguma requisição:

tcpdump -i eth2 -vv ip6 and not net fe80::/64

Opa achamos:

IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ffec:45cd: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has fe80::20c:29ff:feec:45cd
IP6 (hlim 255, next-header ICMPv6 (58) payload length: 24) :: > ff02::1:ffec:45cd: [icmp6 sum ok] ICMP6, neighbor solicitation, length 24, who has 2001:db8:f0ca:0:20c:29ff:feec:45cd

Vemos que primeiro vem uma requisição ICMPv6 como “router solicitation” através do endereço de link local “fe80::/64” depois vemos o ip fornecido para a rede que configuramos “2001:db8:f0ca::/64”

Obs.: o IP da rede ff02:: no Ipv6 é utilizado para multicast.

Vamos pingar o ip “2001:bd8:f0ca:0:20c:29ff:feec:45cd”

ping6 -I eth2 2001:bd8:f0ca:0:20c:29ff:feec:45cd

Com o ping OK podemos começar o teste de invasão como o nmap ;)

nmap -e eth2 -6 2001:bd8:f0ca:0:20c:29ff:feec:45cd

O interessante é que caso haja um firewall/IDS em Ipv4 na maquina de destino nossos testes não vão gerar nenhum alerta.. ;)

Aguardem mais posts sobre IPv6.
By CleBeeR