Pourquoi altérer le TTL de l'IP est-il dangereux?

51

J'ai lu la page de manuel iptables (lecture au lit) et je suis tombé sur la cible 'TTL', mais il prévient:

Définir ou incrémenter le champ TTL peut potentiellement être très dangereux

et

Ne jamais définir ou incrémenter la valeur sur les paquets qui quittent votre réseau local!

Je peux voir comment la décrémentation ou la réduction de la durée de vie (TTL) peut entraîner la suppression des paquets avant d'atteindre la destination, mais quel effet l'incrémentation peut-elle avoir?

Robbie Mckennie
la source

Réponses:

67

Le TTL est décrémenté quand il passe par un routeur. Cela garantit que si le paquet voyage en rond, il finira par mourir.

Le champ TTL d'un paquet IP v4 est un champ de 8 bits (255 décimaux). Donc, le placer haut au début n’est pas un gros problème car il ne peut pas être aussi volumineux dans un paquet bien formé (bien que certaines choses puissent accepter des paquets IP mal formés).

Cependant, si quelque chose l'incrémente et que l'étape d'incrémentation fait partie de la boucle , le paquet peut continuer à tourner en rond sans jamais atteindre zéro. Avec le temps (une fuite très brève ou progressive), des paquets pourraient s'accumuler dans le système contenant cette boucle, ce qui la surchargerait.

Kyle Brandt
la source
20

La durée de vie des paquets maintient le routage sain. Si un paquet devait avoir un très grand TTL et était pris dans une route circulaire pour une raison quelconque, cela pourrait causer une tonne de trafic (appelée "tempête de paquet") et perturber les opérations normales. Un TTL trop faible entraînerait une perte de connectivité, car vous perdriez le paquet avant qu'il atteigne la destination.

Nathan C
la source
Ceci est plus sur l' expiration TTL, mais il ne va dans un peu plus de détails sur ce que vous dites: cisco.com/web/about/security/intelligence/ttl-expiry.html
NickW
5

Il semble y avoir un point que les réponses semblent avoir manqué mais qui serait purement théorique (à cause du nombre de sauts qui semblent requis sur Internet): si un paquet ne parvient normalement pas à atteindre sa destination en raison de l'expiration du délai TTL, il doit être augmenté. permettrait au paquet d'atteindre sa destination mais n'affecterait pas les paquets retournés et ils expireraient avant d'atteindre votre réseau.

MISE À JOUR: Selon cette page sur Wikipedia :

En théorie, sous IPv4, le temps de vie est mesuré en secondes, bien que chaque hôte qui transmet le datagramme doit réduire la durée de vie d'au moins une unité. En pratique, le champ TTL est réduit de un à chaque saut. Pour refléter cette pratique, le champ est renommé limite de saut dans IPv6.

MISE À JOUR 2: Lorsque quelqu'un a mis à jour mon message et fait référence à Wikipedia, j'ai pensé qu'il serait peut-être préférable de faire référence à la RFC elle-même - http://www.ietf.org/rfc/rfc791.txt - Il suffit de rechercher le format TTL dans celui-ci et cela ne change rien un bon travail d'explication:

Ce champ indique le temps maximum pendant lequel le datagramme est autorisé à rester dans le système Internet ... chaque module qui traite un datagramme doit diminuer la durée de vie d'au moins un, même s'il traite le datagramme en moins d'une seconde.
Matthew Steeples
la source
2
Toutefois, si vous avez incrémenté les paquets provenant de votre réseau à la valeur qu’ils auraient obtenue s’ils provenaient de votre routeur, les paquets renvoyés atteindront votre routeur (et vous pourrez ensuite les incrémenter lors de leur envoi au client dans le répertoire). réseau local)
Random832
J'aime bien la vision novatrice de l'approche et vous obtenez mon vote positif pour cela. Cependant, ce TTL devait à l'origine être décrémenté une fois par seconde du paquet passé dans le réseau ainsi que pour chaque saut. Cette définition historique est en grande partie ignorée de nos jours - cependant, on ne peut jamais supposer que le chemin entre deux nœuds est symétrique - ni même identique d'une transmission de paquets à l'autre.
PP.
Vrai. Vous pouvez obtenir des résultats très étranges en utilisant tracert parfois si le paquet x prend un itinéraire différent du paquet y! Merci également pour les informations sur le temps de suivi, je ne le savais pas (bien que, même si les paquets ne sont pas horodatés, ils ne pourraient être décrémentés que si un routeur le leur permettait?)
Matthew Steeples
@PP. Avez-vous une référence pour l'affirmation selon laquelle le TTL devait à l'origine être décrémenté une fois par seconde? Sans des horloges synchronisées de haute précision, qui n'étaient certainement pas banales aux débuts d'Internet (sans parler du fait que beaucoup d'hôtes ne traitaient que l'heure locale), je ne vois pas comment cela pourrait être fait de manière fiable.
un CVn
3
@ MichaelKjörling Il est défini comme tel dans la RFC 791, qui définit IPv4.
Michael Hampton
3

Je connais juste un programme, qui pourrait utiliser une valeur TTL plus élevée, et c'est traceroute. Comme son nom l'indique, il trace l'itinéraire jusqu'à un hôte de destination en modifiant la valeur TTL. Le nombre maximum de sauts est de 20, mais vous pouvez l'augmenter.

ott--
la source
2
(La plupart des implémentations de) traceroute s'appuient également sur les messages ICMP Time Exceeded pour indiquer si un paquet a atteint sa destination ou non. De plus, les messages Time Exceeded sont l' une des raisons pour lesquelles le blocage total d'ICMP est une très mauvaise idée.
un CVn
0

Chaque routeur qui gère un paquet décrémente la valeur TTL jusqu'à ce que le paquet atteigne sa destination ou que la durée de vie atteigne zéro et meure.

Comme d'autres l'ont dit, l'augmentation de la durée de vie peut générer des paquets qui ne meurent jamais s'il existe un cycle négatif. En règle générale, si une valeur de durée de vie n'est pas assez grande, la logique permettant d'essayer une durée de vie plus grande devrait probablement être gérée par les clients de bout en bout.

Si vous êtes certain qu'un routeur n'est pas dans un cycle (topologie en arborescence), vous pouvez théoriquement augmenter la valeur TTL en toute sécurité. Cela dit, autoriser plus de sauts que la norme pourrait rendre la congestion plus probable sur le réseau externe. Si vous avez une longue chaîne de routeurs entre le réseau interne et externe, tant qu'il n'y a pas de cycle, une valeur de durée de vie plus grande peut être utile. Cela dit, il pourrait être assez facile pour quelqu'un d'ajouter un bord au réseau et de créer un cycle. Il est donc beaucoup plus sûr de commencer par une valeur TTL plus grande, d'où le paquet provient.

ronalchn
la source