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

03 - Gerenciamento de Vida Útil (TTL)

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

Gerenciamento de Vida Útil (TTL)

1. Definição e Propósito

O TTL (Time To Live) é um mecanismo de controle de tempo e vida presente no cabeçalho de cada datagrama IP (IPv4) ou campo "Hop Limit" (IPv6). Sua função primordial é atuar como um sistema de autodestruição para os pacotes, garantindo que eles não circulem indefinidamente pela rede.

A existência do TTL é uma resposta direta aos problemas de roteamento dinâmico. Em redes complexas, erros de configuração ou convergência lenta de protocolos de roteamento podem criar loops de roteamento, onde um pacote é passado de um roteador A para um B, e do B de volta para o A, incessantemente. Sem o TTL, esses pacotes "fantasmas" eventualmente consumiriam toda a largura de banda disponível e a memória dos roteadores, causando um colapso na rede.

2. O Campo no Cabeçalho

Tecnicamente, o TTL é um campo de 8 bits localizado no cabeçalho IP, no 9º byte do cabeçalho IPv4 base.

  • Intervalo de Valores: Por ser um campo de 8 bits, seus valores variam de 0 a 255.
  • Definição na Origem: O valor inicial do TTL é definido pelo sistema operacional do host de origem no momento da criação do datagrama.
  • RFC de referência: RFC 791 (1981) define o campo; RFC 1812 (1995) exige decremento de pelo menos 1 em cada salto.

Valores Iniciais por Sistema Operacional

O valor inicial do TTL é uma assinatura forense do sistema operacional que originou o pacote. Essa característica é explorada em técnicas de OS fingerprinting (ex.: Nmap):

Sistema Operacional TTL Inicial Padrão
Windows 10/11/Server 128
Linux (kernel moderno) 64
macOS / iOS 64
Android 64
Solaris / AIX 254
Roteadores Cisco IOS 255
Dispositivos de rede (printers, IoT) 64 ou 255

Como cada salto decrementa 1, ao receber um pacote com TTL 119 em um destino a 9 saltos, um atacante deduz origem Windows (128 - 9 = 119). Para mitigar essa fuga de informação, firewalls modernos permitem normalização de TTL (ex.: ip ttl-set 64 no iptables ou recurso equivalente em NGFWs).

3. Mecanismo de Decremento (Hop-by-Hop)

Embora o nome sugira "Tempo de Vida", na prática, o TTL funciona como um contador de saltos (Hop Count). O processamento ocorre da seguinte maneira em cada roteador intermediário:

  1. O roteador recebe o datagrama e o processa.
  2. Antes de encaminhá-lo para a próxima interface, o roteador subtrai 1 do valor atual do campo TTL.
  3. O roteador recalcula o Header Checksum (soma de verificação do cabeçalho), pois o valor do TTL mudou (RFC 1624 define o cálculo incremental).

Caso o tráfego seja tunelizado (ex.: IP-in-IP, GRE, MPLS), o pacote interno preserva seu TTL original; apenas o encapsulamento externo é decrementado. Isso evita que túneis longos "consumam" o TTL prematuramente.

4. Condição de Expiração e Descarte

O comportamento do roteador depende do resultado do decremento:

  • Se TTL > 0: O roteador encaminha o datagrama normalmente para o próximo salto, conforme sua tabela de roteamento.
  • Se TTL = 0: O datagrama atingiu o fim de sua vida útil. O roteador deve descartar o pacote. Ele não é entregue ao destino e nem encaminhado para qualquer outro lugar.
  • Se TTL = 1 na entrada: O roteador decrementa para 0 e descarta — o pacote não atravessa nem mais um salto.

5. Notificação de Erro (ICMP Time Exceeded)

O descarte silencioso de pacotes tornaria o diagnóstico de problemas de rede extremamente difícil. Para mitigar isso, o protocolo IP define um procedimento de notificação:

  • Quando um roteador descarta um datagrama porque o TTL chegou a zero, ele gera e envia uma mensagem de erro de volta ao endereço IP de origem do datagrama.
  • Esta mensagem é um pacote ICMP (Internet Control Message Protocol) do Tipo 11 (Time Exceeded) e Código 0 (Time to Live exceeded in transit).
  • A mensagem ICMP contém o cabeçalho IP e os primeiros 8 bytes do payload do datagrama descartado, permitindo que o host de origem identifique qual fluxo de dados falhou.
  • Limitação de taxa: Roteadores modernos implementam rate-limiting das mensagens ICMP (ex.: 1 por segundo por fluxo) para evitar abusos em ataques de amplificação.

6. Aplicação Prática: O traceroute

O mecanismo de TTL é o princípio fundamental por trás da ferramenta de diagnóstico traceroute (ou tracert no Windows). Esta ferramenta mapeia o caminho que os pacotes tomam através da rede manipulando deliberadamente o TTL:

  1. 1º Pacote: A origem envia um datagrama com TTL = 1. O primeiro roteador decrementa para 0, descarta e envia o ICMP "Time Exceeded". A origem aprende o IP do 1º salto e mede o RTT.
  2. 2º Pacote: A origem envia com TTL = 2. O primeiro roteador passa (TTL vira 1), o segundo decrementa para 0, descarta e envia o ICMP. A origem aprende o IP do 2º salto.
  3. Iteração: O processo se repete com TTL incrementando (3, 4, 5...) até que o pacote alcance o host final, que responde com uma mensagem diferente (ICMP Port Unreachable ou Echo Reply).

Diferenças entre Implementações

Ferramenta Protocolo de Sonda Porta/Tipo Detecção de Chegada
traceroute (Linux) UDP 33434+ ICMP Port Unreachable (Tipo 3 Code 3)
tracert (Windows) ICMP Echo Request Tipo 8 ICMP Echo Reply (Tipo 0)
tcptraceroute TCP SYN 80/443 TCP RST/SYN-ACK
paris-traceroute UDP/TCP hash-stable Permite ECMP com multipath

A versão Windows usa ICMP e por isso frequentemente atravessa firewalls com menos resistência do que a versão Linux (que dispara UDP para portas altas). A ferramenta mtr combina traceroute com ping contínuo, útil para detectar jitter e perda seletiva por salto.

Exemplo de Saída

$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8, 30 hops max, 60 byte packets
 1  192.168.1.1   0.983 ms  1.012 ms  0.887 ms
 2  10.0.0.1      8.451 ms  8.330 ms  8.290 ms
 3  200.10.10.1  18.221 ms 18.103 ms 18.201 ms
 4  *  *  *
 5  8.8.8.8      24.114 ms 23.981 ms 24.001 ms

O * * * no salto 4 indica que aquele roteador está silenciando ICMP Time Exceeded (configuração de hardening ou filtragem de ICMP de controle).

7. Ataques Baseados em TTL

7.1 TTL Expiry Attack

Atacantes forçam o TTL a expirar dentro de um roteador-alvo para saturar sua CPU com geração de mensagens ICMP Time Exceeded. Mitigação: rate-limiting ICMP, controle plano separado (separation of data/control plane), CoPP (Control Plane Policing) em roteadores Cisco.

7.2 TTL Spoofing em Cache Poisoning

Em ataques como o Kaminsky DNS cache poisoning, o atacante precisa que suas respostas forjadas cheguem ao resolvedor antes da resposta legítima. Como o TTL é decrementado no caminho, o atacante pode usar a contagem de saltos para sincronizar o tempo de chegada das respostas forjadas.

7.3 Firewall Bypass via TTL

Alguns firewalls filtram pacotes aplicando regras apenas quando o TTL indica "tráfego de entrada local". Atacantes manipulam o TTL para fazer o pacote parecer tráfego de roteamento intermediário, driblando filtros. Mitigação: firewalls stateful modernos não dependem do TTL para classificar tráfego.

8. Discrepância entre Nome e Função

Historicamente, no RFC 791, o TTL foi definido como o tempo em segundos que o datagrama seria permitido na rede. Se um roteador demorasse mais de 1 segundo para processar o pacote, ele deveria decrementar o TTL em mais de 1.

No entanto, na prática moderna, quase todos os roteadores processam pacotes em frações de segundo. Por convenção universal (RFC 1812, seção 5.3.1), todos os roteadores decrementam o TTL em exatamente 1, independentemente do tempo de processamento. Portanto, embora o nome permaneça "Time To Live" no IPv4, ele funciona estritamente como um limite de saltos.

No IPv6, esse campo foi renomeado para Hop Limit (RFC 8200), corrigindo a discrepância terminológica para refletir com precisão seu comportamento real. O campo Hop Limit também é de 8 bits, posicionado no cabeçalho base IPv6 (offset 7).

9. Configuração Prática

Linux — Ajustar TTL padrão

# Verificar TTL atual
sysctl net.ipv4.ip_default_ttl
# Saída: net.ipv4.ip_default_ttl = 64

# Alterar para 128 (mascarar como Windows)
sudo sysctl -w net.ipv4.ip_default_ttl=128

# Persistir
echo "net.ipv4.ip_default_ttl = 128" | sudo tee -a /etc/sysctl.conf

Linux — Definir TTL por pacote (ping)

# Enviar ping com TTL fixo (útil para teste de salto específico)
ping -t 3 8.8.8.8     # pacote expira no 3º salto
ping -i 1 192.168.1.1 # TTL=1, testa apenas o gateway

Cisco IOS — Inspecionar TTL recebido

R1# show ip traffic | include TTL
  Time Exceeded: 142 received, 0 sent

Cisco IOS — ACL por TTL (anti-spoofing)

! Bloquear pacotes com TTL suspeito (ex.: 0 ou 1 em tráfego de trânsito)
access-list 101 deny ip any any ttl eq 0
access-list 101 deny ip any any ttl eq 1
access-list 101 permit ip any any

10. Boas Práticas e Considerações Operacionais

  • Não confiar em TTL como controle de segurança primário — ele pode ser forjado trivialmente.
  • TTL mínimo em rotas de infraestrutura: redes com mais de 30 saltos são raras na internet pública (média é 12-18); TTL inicial de 64 cobre a maioria dos cenários.
  • TTL em multicast: pacotes multicast usam o mesmo campo TTL para escopo administrativo (TTL 1 = link-local, TTL < 32 = site-local, etc.), definido na RFC 2365.
  • ICMP rate-limiting: sempre habilitar proteção contra flooding de Time Exceeded em roteadores de borda.
  • Normalização de TTL em bordas: implantação de middleboxes (firewalls, load balancers) que reescrevem TTL pode ocultar topologia, mas quebra ferramentas como traceroute.

11. Resumo Técnico

Atributo IPv4 IPv6
Nome do campo TTL (Time To Live) Hop Limit
Tamanho 8 bits 8 bits
Offset no cabeçalho byte 8 byte 7
Decremento 1 por salto 1 por salto
Valor inicial típico 64 (Linux), 128 (Windows) 64
Notificação de expiração ICMP Type 11 Code 0 ICMPv6 Type 3 Code 0
RFC de definição 791, 1812 8200

12. Conclusão

O TTL é um dos mecanismos mais simples e eficazes da arquitetura IP. Com apenas 8 bits, ele impede que loops de roteamento coloquem a internet de joelhos e viabiliza ferramentas fundamentais de diagnóstico como traceroute. Embora tenha nascido como uma medida de tempo (em segundos), convergiu pragmaticamente para um contador de saltos — uma decisão que o IPv6 sancionou ao renomeá-lo para "Hop Limit". Em ambientes modernos, o TTL também é vetor de fingerprinting e ataque, exigindo que operadores o tratem com a mesma atenção dedicada a outros campos do cabeçalho IP.