03 - Gerenciamento de Vida Útil (TTL)
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:
- O roteador recebe o datagrama e o processa.
- Antes de encaminhá-lo para a próxima interface, o roteador subtrai 1 do valor atual do campo TTL.
- 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º 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º 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.
- 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.