Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

05 - Neighbor Discovery Protocol (NDP)

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Neighbor Discovery Protocol (NDP)

O Neighbor Discovery Protocol (NDP) é o protocolo fundamental da camada de rede no IPv6, definido na RFC 4861. Ele substitui e consolida diversas funções que no IPv4 eram desempenhadas por protocolos separados: ARP (RFC 826), ICMP Router Discovery (RFC 1256) e ICMP Redirect (RFC 792). O NDP opera sobre ICMPv6 e tem papel central na autoconfiguração, descoberta de roteadores, resolução de endereços e detecção de vizinhos inalcançáveis.

1. As Cinco Mensagens ICMPv6 do NDP

O NDP define cinco tipos de mensagens ICMPv6, todas definidas no escopo de tipos 133 a 137:

Tipo Nome Função Principal
133 Router Solicitation (RS) Host pede RA imediato ao roteador
134 Router Advertisement (RA) Roteador anuncia prefixo, MTU, hops, rotas
135 Neighbor Solicitation (NS) Resolve endereço IPv6 para MAC (substitui ARP Request)
136 Neighbor Advertisement (NA) Responde a NS com MAC do vizinho (substitui ARP Reply)
137 Redirect Roteador informa melhor próximo salto

As mensagens são enviadas para endereços multicast específicos, nunca para broadcast. Isso é uma das grandes diferenças do NDP em relação ao ARP: o IPv6 não usa broadcast, o que reduz drasticamente o overhead em redes grandes.

2. Substituição do ARP por NS/NA

No IPv4, ARP usa broadcast (ff:ff:ff:ff:ff:ff) que atinge todos os hosts no segmento L2, mesmo aqueles que não têm nada a ver com o endereço consultado. Isso é ineficiente e barulhento.

No IPv6, a resolução de endereços usa o conceito de Solicited-Node Multicast Address (SNMA). Para qualquer endereço IPv6 unicast, existe um endereço multicast correspondente calculado pela fórmula:

SNMA = ff02::1:ff00:0/104 + últimos 24 bits do endereço IPv6

Por exemplo, para o endereço 2001:db8::1a:2bff:fe3c:4d5e, o SNMA é ff02::1:ff3c:4d5e. Apenas o host cujo endereço coincida nos últimos 24 bits vai "escutar" esse grupo multicast.

Fluxo NS/NA:

  1. Host A quer falar com 2001:db8::1a:2bff:fe3c:4d5e.
  2. Host A calcula o SNMA ff02::1:ff3c:4d5e e o endereço MAC multicast correspondente (33:33:ff:3c:4d:5e).
  3. Host A envia um NS para esse SNMA, contendo seu próprio MAC no campo Source Link-Layer Address.
  4. Apenas o host B (que tem o endereço IPv6 correspondente) responde com um NA, contendo o MAC de B.
  5. Host A popula seu Neighbor Cache (equivalente à ARP cache) com a entrada.

Vantagem: apenas hosts com os últimos 24 bits iguais são interrompidos. Como os hosts se registram nos grupos multicast apropriados via MLD (Multicast Listener Discovery), o switch (se tiver MLD snooping) encaminha o quadro apenas para a porta correta.

3. Descoberta de Roteadores (RS/RA)

O fluxo RS/RA é a base da autoconfiguração SLAAC (ver arquivo dedicado a SLAAC e DHCPv6):

  • RS (tipo 133): enviado pelo host na inicialização da interface ou quando o link sobe. Endereçado a ff02::2 (todos os roteadores). Pode ser enviado com intervalos exponenciais até receber um RA.
  • RA (tipo 134): enviado periodicamente pelo roteador (a cada ~200s por padrão) para ff02::1 (todos os nós), ou em resposta a um RS. Contém:
  • Cur Hop Limit: valor padrão de TTL para os hosts.
  • Flags: M (Managed - DHCPv6 Stateful), O (Other - DHCPv6 Stateless), H (Home Agent).
  • Router Lifetime: tempo (em segundos) em que o roteador deve ser considerado default gateway. Zero significa "não é default gateway".
  • Reachable Time: tempo padrão para o NUD.
  • Retrans Timer: intervalo entre retransmissões de NS.
  • Options: Prefix Information (prefixo /64 + lifetimes), MTU, Source Link-Layer Address, RDNSS, DNSSL.

4. Neighbor Unreachability Detection (NUD)

O NUD é um mecanismo que detecta quando um vizinho (próximo salto) ficou inalcançável, sem depender de timeout lento de TCP. O NDP monitora continuamente o estado de cada entrada no Neighbor Cache:

Estado Significado
INCOMPLETE NS enviado, aguardando NA. Sem MAC ainda.
REACHABLE Confirmado recentemente (NA recebido ou tráfego forward confirmado).
STALE Tempo "Reachable Time" expirou sem confirmação. Usável, mas verificado antes do próximo uso.
DELAY Em STALE, aguardando tráfego superior. Após DELAY_FIRST_PROBE_TIME (5s), muda para PROBE.
PROBE NS unicast enviado. Se NA responder, volta para REACHABLE. Caso contrário, após MAX_UNICAST_SOLICITS (3 tentativas), entrada é removida.

O NUD usa confirmações de camadas superiores (forward path confirmation via TCP ACKs, por exemplo) para manter o estado REACHABLE sem precisar enviar NS periodicamente. Isso reduz drasticamente o tráfego NDP em redes estáveis.

5. ICMP Redirect (Tipo 137)

Quando um roteador recebe um pacote de um host e descobre que o melhor próximo salto é outro roteador no mesmo link, ele envia um Redirect para o host, informando que o tráfego para aquele destino pode ser enviado diretamente para o outro roteador. Isso é equivalente ao ICMP Redirect do IPv4 (RFC 792), mas incorporado ao NDP.

Por segurança, muitos administradores desativam o Redirect (ipv6 nd redirects off no Cisco; net.ipv6.conf.all.accept_redirects=0 no Linux).

6. Comparação ARP vs NDP

Aspecto ARP (IPv4) NDP (IPv6)
Tipo de mensagem ARP frame separado ICMPv6 (tipo 135/136)
Endereçamento L2 Broadcast Multicast seletivo (SNMA)
Camada Entre L2 e L3 L3 (ICMPv6)
Escalabilidade em L2 grande Ruim (broadcast storm) Boa (multicast filtrável via MLD snooping)
Cache ARP Cache Neighbor Cache
Segurança Nenhuma (ARP spoofing trivial) SEND opcional (RFC 3971)
Detecção de inalcançabilidade Não tem (timeout TCP) Sim (NUD)
QoS / prioridade Não aplicável Pode usar campo Traffic Class do IPv6

7. Segurança: SEND e RA Guard

SEND - SEcure Neighbor Discovery (RFC 3971)

O SEND adiciona criptografia de chave pública ao NDP, impedindo spoofing de NS/NA/RA. Cada host gera um par de chaves criptográficas e assina suas mensagens NDP. O receptor valida a assinatura e o CGA (Cryptographically Generated Address), garantindo que o remetente é dono do endereço IPv6 que afirma ser. Apesar de robusto, o SEND não teve adoção significativa no mercado devido à complexidade.

RA Guard (RFC 6105)

Como RAs rogue são ataques triviais (qualquer host pode enviar RA se passando por roteador default), o RA Guard é implementado em switches L2 para bloquear mensagens RA vindas de portas de acesso (host). Deve ser habilitado em todas as portas de acesso para impedir que um host malicioso anuncie prefixo inválido ou se declare gateway default.

DHCPv6 Guard

Análogo ao RA Guard, mas bloqueia respostas DHCPv6 vindas de portas não autorizadas.

8. Ataques Comuns ao NDP

  • ND Cache Poisoning (Neighbor Spoofing): atacante envia NA não solicitado forjando o MAC de um vizinho legítimo. Tráfego é desviado para o atacante (MITM).
  • RA Rogue: atacante envia RA anunciando-se como gateway default, capturando tráfego ou negando serviço (DoS).
  • Neighbor Cache Exhaustion: atacante envia grande volume de NS para endereços aleatórios, forçando o roteador a criar milhares de entradas INCOMPLETE e esgotando a Neighbor Cache.
  • DAD Spoofing: atacante responde a DAD de um endereço legítimo, impedindo o host de usar seu próprio endereço (DoS).

9. Configuração Prática

Linux - Inspeção de Neighbor Cache

# Ver o Neighbor Cache (equivalente a arp -n)
ip -6 neighbor show

# Adicionar entrada estática
ip -6 neigh add 2001:db8::1 lladdr 00:1a:2b:3c:4d:5e dev eth0 nud permanent

# Desabilitar accept_ra em interfaces de servidor
sysctl -w net.ipv6.conf.eth0.accept_ra=0
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.all.accept_source_route=0

Cisco IOS - Configuração de RA e NDP

interface GigabitEthernet0/0
 ipv6 nd prefix 2001:db8:cafe::/64 14400 86400
 ipv6 nd managed-config-flag          ! M=1
 ipv6 nd other-config-flag           ! O=1
 ipv6 nd ra interval 200
 ipv6 nd ra lifetime 1800
 ipv6 nd reachable-time 30000
 ipv6 nd cache expire 14400
!
! RA Guard na porta de acesso
interface FastEthernet0/1
 switchport mode access
 ipv6 nd raguard

10. Boas Práticas e Diagnóstico

  • Habilite RA Guard e DHCPv6 Guard em todas as portas de acesso de switches L2.
  • Ajuste ipv6 nd cache expire para limitar o tamanho da Neighbor Cache em roteadores de borda.
  • Habilite MLD snooping em switches para otimizar a entrega de multicast SNMA.
  • Use ip -6 neigh show (Linux), show ipv6 neighbors (Cisco), get-netneighbor (Windows) para inspecionar a cache.
  • Para diagnosticar RA rogue: tcpdump -i eth0 -nn 'icmp6 and ip6[40] == 134' captura RAs.
  • Para detectar NDP spoofing ativo: use ferramentas como ndpmon, ramond ou ferramentas SIEM com regras de detecção de mudança de MAC para um mesmo IPv6.
  • Em ambientes de alta segurança onde SEND não é viável, considere SAVI (Source Address Validation Integrity, RFC 7039) no switch para garantir que cada host só possa enviar pacotes com seu próprio endereço IPv6.