Por que é perigoso adulterar o TTL do IP?

51

Eu tenho lido a página de manual do iptables (leitura leve na hora de dormir) e me deparei com o alvo 'TTL', mas ele avisa:

Definir ou incrementar o campo TTL pode ser potencialmente muito perigoso

e

Nunca defina ou aumente o valor nos pacotes que saem da sua rede local!

Posso ver como talvez diminuir ou diminuir o TTL poderia causar a queda de pacotes antes de chegar ao destino, mas que efeito poderia ter o incremento?

Robbie Mckennie
fonte

Respostas:

67

O TTL é diminuído quando passa por um roteador. Isso garante que, se o pacote estiver viajando em círculos, ele acabará morrendo.

O campo TTL de um pacote IP v4 é um campo de 8 bits (255 decimal). Portanto, defini-lo alto no início não é um grande problema, pois não pode ser tão grande em um pacote bem formado (embora algumas coisas possam aceitar pacotes IP malformados).

No entanto, se algo o incrementar e a etapa de incremento fizer parte do loop , o pacote poderá continuar em círculos sem chegar a zero. Com o tempo (pode ser muito curto ou um vazamento gradual), os pacotes podem se acumular no sistema que contém esse loop, causando sobrecarga.

Kyle Brandt
fonte
20

O TTL nos pacotes mantém o roteamento saudável, basicamente. Se um pacote tiver um TTL muito grande e for pego em uma rota circular por algum motivo, isso poderá causar uma tonelada de tráfego (chamado de "tempestade de pacotes") e interferir nas operações normais. Um TTL muito baixo resultaria em perda de conectividade, pois você perderia o pacote antes que ele chegasse ao destino.

Nathan C
fonte
Este é mais sobre a expiração TTL, mas não entrar em detalhes um pouco mais sobre o que você diz: cisco.com/web/about/security/intelligence/ttl-expiry.html
NickW
5

Há um ponto em que as respostas parecem ter sido perdidas, mas que seriam puramente acadêmicas (por causa de quantos saltos parecem ser necessários na internet): se um pacote normalmente falhar em chegar ao destino por causa de um TTL expirado, aumentá-lo permitiria que o pacote chegasse ao seu destino, mas não afetaria o retorno dos pacotes e eles expirariam antes de chegar à sua rede.

ATUALIZAÇÃO: De acordo com esta página na Wikipedia :

Em teoria, no IPv4, o tempo de vida é medido em segundos, embora todo host que passe pelo datagrama deva reduzir o TTL em pelo menos uma unidade. Na prática, o campo TTL é reduzido em um a cada salto. Para refletir essa prática, o campo é renomeado como limite de salto no IPv6.

ATUALIZAÇÃO 2: Como alguém atualizou meu post e referenciou a Wikipedia, achei que seria melhor fazer referência à própria RFC - http://www.ietf.org/rfc/rfc791.txt - Basta procurar por TTL lá e ele faz bastante um bom trabalho de explicá-lo:

Este campo indica o tempo máximo que o datagrama pode permanecer no sistema da Internet ... todo módulo que processa um datagrama deve diminuir o TTL em pelo menos um, mesmo que processe o datagrama em menos de um segundo
Matthew Steeples
fonte
2
No entanto - se você incrementou os pacotes que se originaram na sua rede para o valor que eles teriam se tivessem se originado no seu roteador, os pacotes de retorno chegarão ao seu roteador (e você poderá incrementá-los ao enviá-lo para o cliente no rede local)
Random832
Eu gosto da nova visão sobre a abordagem e você recebe meu voto positivo por isso. No entanto, o TTL foi originalmente planejado para ser diminuído uma vez a cada segundo o pacote gasto na rede, bem como em todos os saltos. Essa definição histórica é amplamente ignorada hoje em dia - no entanto, nunca se pode assumir que o caminho entre dois nós é simétrico - ou mesmo o mesmo de uma transmissão de pacotes para outra.
PP.
Verdadeiro. Você pode obter resultados muito estranhos usando o tracert, às vezes, se o pacote x seguir uma rota diferente do pacote y! Também graças para as informações sobre ele tempo de monitoramento também, eu não sabia que (embora se os pacotes não são timestamped que só poderia ser diminuído se um roteador sustentou que não poderia?)
Matthew Steeples
@PP. Você tem uma referência para a alegação de que o TTL deveria originalmente ser diminuído uma vez por segundo? Sem relógios sincronizados de alta precisão, que certamente não eram comuns nos primeiros dias da Internet (muito menos que muitos hosts lidavam apenas com a hora local), não vejo como isso poderia ser feito com segurança.
um CVn
3
@ MichaelKjörling É definido como tal na RFC 791, que define o IPv4.
Michael Hampton
3

Eu sei apenas um programa, que poderia usar um valor TTL mais alto, e é isso traceroute. Como o nome diz, ele rastreia a rota para um host de destino modificando o valor TTL. O número máximo de saltos padrão é 20, mas você pode aumentar isso.

ott--
fonte
2
(A maioria das implementações do) traceroute também se baseia em mensagens com tempo excedido do ICMP para informar se um pacote atingiu seu destino ou não. Além disso, as mensagens com tempo excedido são uma das razões pelas quais o bloqueio definitivo do ICMP é uma péssima idéia.
um CVn
0

Cada roteador que lida com um pacote diminui o valor TTL, até que o pacote chegue ao seu destino ou TTL atinja zero e morra.

Como já foi dito, aumentar o TTL pode resultar em pacotes que nunca morrem, se houver um ciclo negativo. Geralmente, se um valor TTL não for grande o suficiente, a lógica para tentar um TTL maior provavelmente deve ser tratada pelos clientes de ponta a ponta.

Se você tem certeza de que um roteador não está em um ciclo (topologia em forma de árvore), em teoria, você pode aumentar com segurança o valor TTL. Dito isto, permitir mais saltos do que o padrão pode tornar o congestionamento mais provável na rede externa. Se você tiver uma longa cadeia de roteadores entre a rede interna e externa, desde que não haja ciclo, um valor TTL maior poderá ajudar. Dito isso, pode ser bastante fácil para alguém adicionar uma vantagem à rede e criar um ciclo, portanto, começar com um valor TTL maior, onde o pacote se originou em primeiro lugar, é muito mais seguro.

ronalchn
fonte