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

01 - Mensagens de Erro e Controle

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

Mensagens de Erro e Controle do ICMP

1. Introdução

O Protocolo ICMP (Internet Control Message Protocol) cumpre suas funções na Camada de Rede através da transmissão de dois tipos fundamentais de mensagens: Mensagens de Erro e Mensagens de Consulta (ou Controle). Esta divisão de categorias permite que a rede reporte falhas na entrega de dados e realize diagnósticos ativos da conectividade.

Como o protocolo IP subjacente opera de forma assíncrona e não confiável (sem confirmações de entrega), o ICMP atua como o mecanismo de feedback necessário para manter a integridade operacional da internet. Ele fornece os "sentidos" para a "cegueira" do encaminhamento de pacotes IP.

Estrutura Básica da Mensagem ICMP

Toda mensagem ICMP carrega um cabeçalho comum de 4 bytes:

Campo Tamanho Função
Type 8 bits Identifica o tipo de mensagem (0-255)
Code 8 bits Refina o tipo em subcategorias
Checksum 16 bits Verifica integridade do ICMP
Payload Variável Depende do tipo (erro carrega o cabeçalho IP original)

2. Mensagens de Erro

As mensagens de erro são geradas reativamente. Elas são disparadas por roteadores intermediários ou pelo host de destino quando ocorre um problema que impede o processamento ou a entrega bem-sucedida de um datagrama IP original.

O objetivo principal dessas mensagens é notificar a origem do problema, permitindo que a aplicação ou o protocolo de transporte (como o TCP) tome as medidas cabíveis, como retransmitir o dado ou encerrar a conexão.

2.1. Princípios do Relatório de Erro

  • Retorno à Origem: As mensagens de erro são sempre enviadas de volta ao endereço IP de origem do datagrama que causou o erro. Roteadores não geram mensagens de erro para os seus vizinhos, mas sim para o emissor original.
  • Não Correção: O ICMP não corrige o erro na rede. Ele apenas relata. O pacote original é descartado. É responsabilidade da origem tentar novamente se necessário.
  • Carga Útil do Pacote Ofensor: A mensagem de erro ICMP geralmente contém no seu payload o cabeçalho IP (e os primeiros 64 bits) do datagrama que causou o erro. Isso permite que o remetente identifique qual fluxo de dados falhou (quais portas TCP/UDP, qual sequência).

2.2. Tipos Principais de Mensagens de Erro

As mensagens de erro são categorizadas pelo Campo Type no cabeçalho ICMP. As mais comuns incluem:

  1. Destination Unreachable (Tipo 3): O roteador ou host de destino não consegue entregar o pacote.
    • Códigos comuns: Rede inalcançável, Host inalcançável, Porta inalcançável (comum quando um firewall bloqueia ou nenhum serviço está escutando), ou necessidade de fragmentação mas o bit DF está ativado.
  2. Time Exceeded (Tipo 11): O pacote não chegou ao destino dentro do tempo permitido.
    • Código 0 (TTL Exceeded): O campo TTL do datagrama chegou a zero. O roteador descartou o pacote. Isso é fundamental para ferramentas como traceroute.
    • Código 1 (Fragment Reassembly Time Exceeded): O destino não conseguiu remontar todos os fragmentos de um datagrama dentro do tempo limite.
  3. Redirect (Tipo 5): O roteador informa ao host de origem que existe um "próximo salto" (next-hop) melhor e mais direto para chegar ao destino, sugerindo que o host atualize sua tabela de roteamento. Geralmente usado em redes locais onde um host usa um roteador padrão incorreto.
  4. Parameter Problem (Tipo 12): O roteador ou host encontrou um problema na estrutura do cabeçalho IP (ex: IHL inválido, opção desconhecida crítica), impedindo o processamento. O campo "Pointer" indica qual byte do cabeçalho está errado.
  5. Source Quench (Tipo 4 - Obsoleto): Historicamente, o roteador enviava essa mensagem para pedir ao remetente que reduzisse a velocidade de envio em caso de congestionamento. Foi descontinuado porque criava ataques de negação de serviço e o controle de congestionamento foi movido para o TCP.

Tabela Resumida de Mensagens de Erro

Type Nome Código(s) Típicos Significado
3 Destination Unreachable 0-15 Pacote não pode ser entregue
4 Source Quench 0 (Obsoleto) Reduza a taxa de envio
5 Redirect 0-3 Use rota alternativa melhor
11 Time Exceeded 0-1 TTL expirado ou remontagem demorou
12 Parameter Problem 0-2 Cabeçalho IP malformado

3. Mensagens de Consulta e Controle

Diferente das mensagens de erro, as mensagens de consulta (também chamadas de informativas) são geradas proativamente. Elas não são respostas a falhas, mas sim solicitações deliberadas enviadas por um host para investigar o estado da rede ou obter informações de outro dispositivo.

Essas mensagens operam geralmente no par Request (Solicitação) e Reply (Resposta).

3.1. Tipos Principais de Mensagens de Controle

  1. Echo Request e Echo Reply (Tipo 8 e Tipo 0):
    • É a base da ferramenta ping. Um host envia um Echo Request (pedido de eco), e o dispositivo de destino, se estiver ativo e configurado para responder, envia um Echo Reply imediatamente.
    • Usado para testar a alcançabilidade (o host está vivo?) e medir a latência (Round Trip Time).
  2. Timestamp Request e Timestamp Reply (Tipo 13 e 14):
    • Permite que um host solicite a hora atual do relógio de outro host.
    • Usado para sincronização de relógios e medição precisa de tempo de viagem da rede, embora o NTP seja mais preciso para sincronização.
  3. Router Solicitation e Router Advertisement (RS/RA):
    • No IPv6 (e em versões modernas de ICMPv4 em sistemas configuráveis), isso permite que hosts descubram roteadores na rede local automaticamente sem configuração manual, facilitando o SLAAC (Stateless Address Autoconfiguration).
  4. Address Mask Request e Reply (Tipo 17 e 18):
    • Usado em redes IPv4 mais antigas onde um host pode não saber sua máscara de sub-rede e a pergunta para o roteador. Hoje em dia, isso é geralmente fornecido via DHCP.

Exemplo Prático: O Comando ping

$ ping -c 4 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=14.2 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=13.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=14.1 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=117 time=14.0 ms
--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss
rtt min/avg/max/mdev = 13.9/14.05/14.2/0.115 ms

Cada "64 bytes" recebido corresponde a um ICMP Echo Reply (Type 0). O campo icmp_seq identifica a sequência de requisições; se algum número estiver faltando, o pacote foi perdido.

4. O Funcionamento do Traceroute

O traceroute é uma das aplicações mais elegantes do ICMP (e parcialmente do UDP em algumas implementações). Ele explora o campo TTL do cabeçalho IP para descobrir cada salto até o destino:

  1. Envia um pacote com TTL=1. O primeiro roteador decrementa para 0 e responde com ICMP Time Exceeded, revelando seu IP.
  2. Envia um pacote com TTL=2. O segundo roteador decrementa para 0 e responde, revelando seu IP.
  3. Repete até alcançar o destino final.
$ traceroute 8.8.8.8
 1  192.168.1.1 (192.168.1.1)        1.123 ms   1.056 ms   1.089 ms
 2  10.0.0.1 (10.0.0.1)              8.451 ms   8.401 ms   8.512 ms
 3  acc1.provider.net (200.10.1.1)  14.123 ms  14.001 ms  14.234 ms
 4  dns.google (8.8.8.8)             13.987 ms  13.901 ms  13.999 ms

5. Regras de Geração e Prevenção de Tempestades

Para evitar que as mensagens ICMP causem congestionamento adicional ou loops infinitos na rede (especialmente durante falhas em massa), existem regras estritas para sua geração:

  • Sem Erros sobre Erros: Um roteador ou host nunca deve gerar uma mensagem de erro ICMP em resposta a outra mensagem de erro ICMP. Se um pacote ICMP falhar, o erro é silencioso. Isso evita "tempestades de feedback" (feedback storms).
  • Sem Erros para Broadcast/Multicast: Mensagens de erro não são geradas em resposta a datagramas que tenham endereço de destino de Broadcast ou Multicast. Se assim fosse, um único pacote ruim para uma rede inteira poderia gerar milhares de respostas de erro simultaneamente.
  • Apenas o Primeiro Fragmento: Mensagens de erro são geradas apenas para o primeiro fragmento de um datagrama IP fragmentado. Se um fragmento intermediário causar erro, nenhuma mensagem é enviada para evitar sobrecarga.
  • Descarte Silencioso: Se as regras acima proíbem o envio de uma mensagem de erro, o pacote é simplesmente descartado sem aviso.

6. ICMP e Segurança: Riscos e Mitigações

Embora essencial, o ICMP foi historicamente explorado em ataques:

  • Smurf Attack (anos 1990): Ataque de amplificação que usava ping para endereços de broadcast com IP de origem forjado. Mitigado pela regra "Sem Erros para Broadcast/Multicast".
  • Ping of Death: Pacote ICMP malformado maior que 65.535 bytes que causava overflow em sistemas antigos. Corrigido em todas as pilhas modernas.
  • ICMP Tunneling: Uso de mensagens ICMP para exfiltrar dados ou estabelecer backdoors, já que firewalls permissivos costumam liberar ping. Mitigado com inspeção profunda (DPI) e limitação de taxa de ICMP.

Boas práticas modernas: limitar ICMP a tipos específicos (0, 3, 8, 11) em firewalls de borda e bloquear Redirect (Tipo 5) para evitar envenenamento de tabelas de roteamento.

7. Conclusão

O ICMP é o "sistema nervoso" do IP. Sem ele, a internet seria um meio cego e mudo: pacotes desapareceriam sem explicação, ferramentas de diagnóstico não existiriam e hosts seriam incapazes de descobrir roteadores automaticamente. Embora deva ser filtrado com critério por questões de segurança, seu papel no diagnóstico e na operação saudável da rede é insubstituível. Toda ferramenta de troubleshooting clássica — ping, traceroute, pathping, mtr — depende diretamente das mensagens de erro e controle que o ICMP fornece.