为什么篡改IP TTL会有危险?


51

我一直在阅读iptables手册页(浅睡前阅读),遇到了“ TTL”目标,但它警告:

设置或增加TTL字段可能非常危险

永远不要设置或增加离开本地网络的数据包的值!

我可以看到减小或降低TTL可能如何导致数据包在到达目的地之前被丢弃,但是增加会有什么作用呢?

Answers:


67

TTL在通过路由器时会递减。这样可以确保如果数据包绕圈走动,它将最终死亡。

IP v4数据包的TTL字段是8位字段(255个十进制)。因此,一开始将它设置得很高并不重要,因为在一个格式正确的数据包中实际上它不可能太大(尽管有些东西可能接受格式错误的IP数据包)。

但是,如果某些东西增加了它,并且增加的步骤是循环的一部分,则数据包可能会一直绕圈走而不会达到零。随着时间的流逝(可能非常短,或者逐渐泄漏),包含该循环的系统中可能会堆积数据包,从而导致其过载。


20

数据包上的TTL基本上使路由保持健全。如果某个数据包的TTL很大,并且由于某种原因而陷入了环形路由,则可能会导致大量流量(称为“数据包风暴”)并干扰正常操作。TTL太低会导致连接丢失,因为您会在数据包到达目的地之前丢失它。


这是关于TTL到期的更多信息,但是它确实进一步说明了您所说的内容:cisco.com/web/about/security/intelligence/ttl-expiry.html
NickW,

5

有一个问题似乎错过了答案,但这纯粹是学术性的(因为互联网上似乎需要跳数):如果数据包通常由于TTL过期而无法到达其目的地,则增加它会允许数据包到达其目的地,但不会影响返回的数据包,并且它们将在到达您的网络之前过期。

更新:根据维基百科上的此页面

从理论上讲,在IPv4下,生存时间以秒为单位,尽管每个通过数据报的主机都必须将TTL至少减少一个单位。实际上,TTL字段每跳一跳。为了反映这种做法,该字段在IPv6中被重命名为跳跃限制。

更新2:当有人更新了我的文章并引用了Wikipedia时,我认为最好参考RFC本身-http ://www.ietf.org/rfc/rfc791.txt-只需在其中搜索TTL即可,很好地解释它:

此字段指示允许数据报保留在Internet系统中的最长时间...处理数据报的每个模块都必须将TTL至少减少一个,即使它在不到一秒钟的时间内处理数据报

2
但是-如果您将源自网络的数据包增加到其源自路由器的原始值,则返回数据包将到达您的路由器(然后您可以在将其继续发送到客户端时将其递增)。本地网络)
Random832

我确实喜欢这种方法的新颖观点,您对此表示赞同。但是,TTL最初打算在网络中以及每跳所用的数据包中每秒减少一次。如今,这种历史定义在很大程度上已被忽略-但是,永远不能假定两个节点之间的路径是对称的-从一个数据包传输到另一个数据包甚至是相同的。
PP。

真正。如果数据包x与数据包y的路由不同,有时使用tracert会得到一些非常奇怪的结果!同样也感谢您提供有关其跟踪时间的信息,我不知道(尽管如果未对数据包加时间戳,只有在路由器上不能加时间戳,它才能递减?)
Matthew Steeples

@PP。您是否有理由声称TTL原本应该每秒减少一次?没有高精度的同步时钟(在Internet的早期肯定不常见(更不用说许多主机仅处理本地时间)了),我看不到如何可靠地做到这一点。
CVn

3
@MichaelKjörling在RFC 791中定义为IPv4。
迈克尔·汉普顿

3

我知道只有一个程序可以使用更高的TTL值,即traceroute。顾名思义,它通过修改TTL值来跟踪到目标主机的路由。标准最大跳数为20,但您可以增加该值。


2
traceroute(的大多数实现)还依赖ICMP Time Exceeded消息来判断数据包是否已到达其目的地。顺便说一句,超时的消息是一个原因,ICMP的直接阻塞是一个非常糟糕的主意。
CVn

0

每个处理数据包的路由器都会减小TTL值,直到数据包到达其目的地或TTL达到零并死亡。

正如其他人所说,如果存在负周期,则增加TTL可能会导致数据包永不消亡。通常,如果TTL值不够大,则尝试更大的TTL的逻辑可能应该由端到端客户端处理。

如果确定路由器不处于循环状态(树状拓扑),则理论上可以安全地增加TTL值。话虽如此,但允许的跳数超出标准范围,可能会使外部网络发生拥塞的可能性更大。如果内部和外部网络之间的路由器链较长,则只要没有周期,较大的TTL值可能会有所帮助。话虽如此,对于某人来说,向网络添加一条边并创建一个周期可能非常容易,因此从更大的TTL值开始,该数据包首先起源就更安全了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.