Warum ist es gefährlich, die TTL von IP zu manipulieren?

51

Ich habe die iptables-Manpage (Light Bedtime Reading) gelesen und bin auf das TTL-Ziel gestoßen, aber es warnt:

Das Setzen oder Inkrementieren des TTL-Feldes kann möglicherweise sehr gefährlich sein

und

Setzen oder erhöhen Sie niemals den Wert für Pakete, die Ihr lokales Netzwerk verlassen!

Ich kann sehen, wie möglicherweise ein Verringern oder Verringern der TTL dazu führen kann, dass Pakete verworfen werden, bevor sie das Ziel erreichen. Aber welchen Effekt könnte ein Inkrementieren haben?

Robbie Mckennie
quelle

Antworten:

67

Die TTL wird dekrementiert, wenn sie einen Router passiert. Dies stellt sicher, dass das Paket schließlich stirbt, wenn es sich im Kreis bewegt.

Das TTL-Feld eines IP v4-Pakets ist ein 8-Bit-Feld (255 Dezimalstellen). Es ist also keine große Sache, es zu Beginn hoch zu setzen, da es in einem wohlgeformten Paket nicht wirklich so groß sein kann (obwohl einige Dinge möglicherweise fehlerhafte IP-Pakete akzeptieren).

Wenn es jedoch inkrementiert wird und der Inkrementierungsschritt Teil der Schleife ist , könnte das Paket in Kreisen weiterlaufen, ohne jemals Null zu erreichen. Mit der Zeit (kann sehr kurz sein oder ein allmähliches Leck verursachen) können sich Pakete in dem System aufbauen, das diese Schleife enthält, was zu einer Überlastung führt.

Kyle Brandt
quelle
20

Die TTL bei Paketen ist im Grunde genommen immer normal. Wenn ein Paket eine sehr große TTL hätte und aus irgendeinem Grund auf einer Kreisroute gefangen wurde, könnte dies eine Menge Verkehr verursachen (als "Paketsturm" bezeichnet) und den normalen Betrieb stören. Eine zu niedrige TTL würde zu einem Konnektivitätsverlust führen, da Sie das Paket verlieren würden, bevor es das Ziel erreicht.

Nathan C
quelle
Hier geht es mehr um den TTL-Ablauf, aber es wird etwas detaillierter darauf eingegangen,
NickW
5

Es gibt einen Punkt, den die Antworten übersehen zu haben scheinen, der jedoch rein akademisch wäre (aufgrund der Anzahl der im Internet benötigten Hops): Wenn ein Paket aufgrund einer abgelaufenen TTL normalerweise sein Ziel nicht erreichen würde, erhöhen Sie es Ermöglicht es dem Paket, sein Ziel zu erreichen, hat jedoch keine Auswirkungen auf die zurückgegebenen Pakete. Sie verfallen, bevor Sie Ihr Netzwerk erreichen.

UPDATE: Laut dieser Seite auf Wikipedia :

Theoretisch wird unter IPv4 die Lebensdauer in Sekunden gemessen, obwohl jeder Host, der das Datagramm durchläuft, die TTL um mindestens eine Einheit reduzieren muss. In der Praxis wird das TTL-Feld bei jedem Sprung um eins verringert. Um dieser Praxis Rechnung zu tragen, wird das Feld in IPv6 in Hop-Limit umbenannt.

UPDATE 2: Als jemand meinen Beitrag aktualisiert und auf Wikipedia verwiesen hat, dachte ich, dass es am besten ist, auf den RFC selbst zu verweisen - http://www.ietf.org/rfc/rfc791.txt - Suchen Sie dort einfach nach TTL, und es funktioniert recht gut eine gute Aufgabe, es zu erklären:

Dieses Feld gibt die maximale Zeit an, die das Datagramm im Internet-System verbleiben darf ... Jedes Modul, das ein Datagramm verarbeitet, muss die TTL um mindestens eins verringern, auch wenn es das Datagramm in weniger als einer Sekunde verarbeitet
Matthew Steeples
quelle
2
Wenn Sie jedoch Pakete, die in Ihrem Netzwerk erstellt wurden, auf den Wert erhöht haben, den sie auf Ihrem Router erstellt hatten, erreichen die zurückgegebenen Pakete Ihren Router lokales Netzwerk)
Random832
Ich mag die neuartige Sicht auf den Ansatz und Sie bekommen dafür meine Zustimmung. Diese TTL sollte jedoch ursprünglich einmal für jede Sekunde des im Netzwerk verbrachten Pakets sowie für jeden Hop dekrementiert werden. Diese historische Definition wird heutzutage weitgehend ignoriert - es kann jedoch nie davon ausgegangen werden, dass der Pfad zwischen zwei Knoten symmetrisch ist - oder von einer Paketübertragung zur nächsten sogar derselbe.
PP.
Wahr. Sie können mit tracert manchmal sehr seltsame Ergebnisse erzielen, wenn Paket x einen anderen Weg als Paket y nimmt! Auch danke für die Information darüber, dass die Zeit verfolgt wurde, wusste ich nicht, dass (obwohl Pakete ohne Zeitstempel nur dekrementiert werden können, wenn ein Router daran festhält, oder?)
Matthew Steeples
@PP. Haben Sie eine Referenz für die Behauptung, dass die TTL ursprünglich einmal pro Sekunde dekrementiert werden sollte? Ohne hochpräzise synchronisierte Uhren, die in den Anfängen des Internets sicherlich nicht üblich waren (geschweige denn, dass viele Hosts nur die Ortszeit handhabten), sehe ich nicht, wie dies zuverlässig durchgeführt werden kann.
ein Lebenslauf
3
@ MichaelKjörling Wird in RFC 791 definiert, der IPv4 definiert.
Michael Hampton
3

Ich kenne nur ein Programm, das einen höheren TTL-Wert verwenden könnte, und das ist traceroute. Wie der Name schon sagt, wird die Route zu einem Zielhost nachverfolgt, indem der TTL-Wert geändert wird. Das Standardmaximum an Hops ist 20, aber Sie können das erhöhen.

ott--
quelle
2
(Die meisten Implementierungen von) traceroute basieren auch auf ICMP Time Exceeded- Nachrichten, um festzustellen, ob ein Paket sein Ziel erreicht hat oder nicht. Abgesehen davon sind Time Exceeded-Nachrichten ein Grund, warum die vollständige Blockierung von ICMP eine sehr schlechte Idee ist.
ein Lebenslauf
0

Jeder Router, der ein Paket verarbeitet, dekrementiert den TTL-Wert, bis das Paket sein Ziel erreicht oder TTL Null erreicht, und stirbt.

Wie andere gesagt haben, könnte die Erhöhung der TTL zu Paketen führen, die bei einem negativen Zyklus niemals sterben. Wenn ein TTL-Wert nicht groß genug ist, sollte die Logik zum Ausprobieren einer größeren TTL wahrscheinlich von den End-to-End-Clients verarbeitet werden.

Wenn Sie sicher sind, dass sich ein Router nicht in einem Zyklus befindet (baumartige Topologie), können Sie den TTL-Wert theoretisch sicher erhöhen. Wenn Sie jedoch mehr Sprünge als üblich zulassen, ist es wahrscheinlich, dass das externe Netzwerk überlastet ist. Wenn Sie eine lange Kette von Routern zwischen dem internen und dem externen Netzwerk haben, kann ein größerer TTL-Wert hilfreich sein, solange es keinen Zyklus gibt. Allerdings könnte es für jemanden recht einfach sein, dem Netzwerk eine Kante hinzuzufügen und einen Zyklus zu erstellen. Daher ist es viel sicherer, mit einem größeren TTL-Wert zu beginnen, von dem das Paket ursprünglich stammt.

ronalchn
quelle