IPのTTLの改ざんが危険なのはなぜですか?


51

私はiptablesのマンページを読んでいて(軽い就寝時の読書)、「TTL」ターゲットに遭遇しましたが、それは警告しています:

TTLフィールドの設定または増分は、非常に危険な可能性があります

そして

ローカルネットワークを離れるパケットに値を設定したり、増やしたりしないでください。

TTLを小さくするか、TTLを低く設定すると、パケットが宛先に到達する前にドロップされる可能性がありますが、インクリメントによってどのような影響がありますか?

回答:


67

TTLは、ルーターを通過するときに減少します。これにより、パケットが円を描いて移動している場合、最終的に死ぬことが保証されます。

IP v4パケットのTTLフィールドは、8ビットフィールド(10進255)です。したがって、開始時に高く設定することは、適切な形式のパケットでは実際にはそれほど大きくないため、大したことではありません(ただし、不正な形式のIPパケットを受け入れるものもあります)。

ただし、何かがそれをインクリメントし、インクリメントステップがループの一部である場合、パケットはゼロに達することなく円を描き続けます。時間が経つと(非常に短いか、徐々にリークする可能性があります)、そのループを含むシステムでパケットが蓄積し、過負荷を引き起こす可能性があります。


20

パケットのTTLは、基本的にルーティングを正常に保ちます。パケットのTTLが非常に大きくなり、何らかの理由で循環ルートでキャッチされた場合、大量のトラフィック(「パケットストーム」と呼ばれる)が発生し、通常の動作に干渉する可能性があります。TTLが低すぎると、パケットが宛先に到達する前に失われるため、接続が失われます。


これは、より多くのTTLの有効期限についてですが、それはあなたが言うことについて、もう少し詳細に入るん:cisco.com/web/about/security/intelligence/ttl-expiry.html
NickW

5

答えは逃したように見えますが、純粋にアカデミックな点が1つあります(インターネット上で必要なホップ数が多いため):TTLの期限切れのためにパケットが宛先に到達できない場合は、それを増やしますパケットは宛先に到達できますが、返されるパケットには影響せず、ネットワークに到達する前に期限切れになります。

更新:ウィキペディアのこのページによると:

理論的には、IPv4では生存期間は秒単位で測定されますが、データグラムを通過するすべてのホストはTTLを少なくとも1単位減らす必要があります。実際には、TTLフィールドはホップごとに1つずつ減少します。このプラクティスを反映するために、フィールドはIPv6のホップ制限に名前が変更されました。

更新2:誰かが私の投稿を更新してウィキペディアを参照したとき、RFC自体を参照するのが最善かもしれないと考えました-http ://www.ietf.org/rfc/rfc791.txt-TTLを検索してくださいそれを説明する良い仕事:

このフィールドは、データグラムがインターネットシステムに留まることができる最大時間を示します。データグラムを処理するすべてのモジュールは、1秒未満でデータグラムを処理する場合でも、TTLを少なくとも1減らす必要があります。

2
ただし、ネットワークで発生したパケットをルーターで発生した場合の値に増分した場合、戻りパケットはルーターに到達します(そして、クライアントでパケットを送信するときに増分できます)ローカルネットワーク)
Random832

私はアプローチについての斬新な見解が好きです、そして、あなたはそれに対する私の賛成を得ます。ただし、そのTTLは元々、パケットがネットワーク内で費やした1秒ごと、およびすべてのホップごとに1ずつ減らされることを目的としていました。その歴史的な定義は現在ほとんど無視されています-しかし、2つのノード間のパスが対称であると仮定することはできません-あるパケット送信から別のパケット送信まで同じです。
PP。

本当です。パケットxがパケットyとは異なるルートを取る場合、tracertを使用すると、非常に奇妙な結果が得られることがあります!また、時間を追跡することについての情報にも感謝します(パケットがタイムスタンプされていない場合、ルーターがそのパケットを保持できなかった場合にのみ減少できますか?)
マシュースティープルズ

@PP。TTLは元々1秒間に1ずつ減らされるはずだったという主張の参考文献はありますか?インターネットの初期には確かに一般的ではなかった高精度の同期クロックがなければ(多くのホストが現地時間しか処理しなかったことは言うまでもありませんが)、それを確実に行う方法はわかりません。
CVn

3
@MichaelKjörlingこれは、IPv4を定義するRFC 791で定義されています。
マイケルハンプトン

3

高いTTL値を使用できるプログラムは1つだけですtraceroute。名前が示すように、TTL値を変更することにより、宛先ホストへのルートをトレースします。標準の最大ホップ数は20ですが、これを増やすことができます。


2
(ほとんどの実装)tracerouteは、ICMP Time Exceededメッセージを使用して、パケットが宛先に到達したかどうかを判断します。余談ですが、Time Exceededメッセージは、ICMPの完全なブロックが非常に悪い考えである理由の1つです。
CVn

0

パケットを処理する各ルーターは、パケットが宛先に到達するか、TTLがゼロに到達して死ぬまで、TTL値を減らします。

他の人が言ったように、TTLを増やすと、負のサイクルがある場合にパケットが死ぬことはありません。一般に、TTL値が十分に大きくない場合、より大きなTTLを試行するロジックは、おそらくエンドツーエンドクライアントで処理する必要があります。

ルーターがサイクル内にないことが確実な場合(ツリーのようなトポロジ)、理論的にはTTL値を安全に増やすことができます。ただし、標準よりも多くのホップを許可すると、外部ネットワークで輻輳が発生する可能性が高くなります。内部ネットワークと外部ネットワークの間にルーターの長いチェーンがある場合、サイクルがない限り、TTL値を大きくすると役立つ場合があります。そうは言っても、誰かがネットワークにエッジを追加してサイクルを作成することは非常に簡単である可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.