TCP时间戳提供了什么好处?

50

我收到一份安全扫描结果,建议我禁用TCP时间戳。我了解这个建议的原因:时间戳可以用来计算服务器运行时间,这对攻击者有所帮助(在标题“TCP时间戳”下有很好的解释,请参阅http://www.silby.com/eurobsdcon05/eurobsdcon_silbersack.pdf)。

然而,据我的了解,TCP时间戳旨在提高TCP性能。在成本/效益分析中,自然而然的,性能下降是一个相当大的代价,甚至可能太大了。我很难理解可能会有多少性能成本,如果有的话。有没有什么人可以帮助我解决这个问题?


我同意,夸大安全方面的风险会忽略网络工程师发明TCP时间戳的专业知识。操作系统可以改变它们对TCP时间戳的实现以避免提取正常运行时间。对于Linux,请参见我的答案 http://security.stackexchange.com/a/224696/90485 - Massimo
5个回答

28
答案最简洁地表达在RFC 1323 - 往返时间测量中... RFC的介绍还提供了一些相关的历史背景...
   Introduction

   The introduction of fiber optics is resulting in ever-higher
   transmission speeds, and the fastest paths are moving out of the
   domain for which TCP was originally engineered.  This memo defines a
   set of modest extensions to TCP to extend the domain of its
   application to match this increasing network capability.  It is based
   upon and obsoletes RFC-1072 [Jacobson88b] and RFC-1185 [Jacobson90b].


  (3)  Round-Trip Measurement

       TCP implements reliable data delivery by retransmitting
       segments that are not acknowledged within some retransmission
       timeout (RTO) interval.  Accurate dynamic determination of an
       appropriate RTO is essential to TCP performance.  RTO is
       determined by estimating the mean and variance of the
       measured round-trip time (RTT), i.e., the time interval
       between sending a segment and receiving an acknowledgment for
       it [Jacobson88a].

       Section 4 introduces a new TCP option, "Timestamps", and then
       defines a mechanism using this option that allows nearly
       every segment, including retransmissions, to be timed at
       negligible computational cost.  We use the mnemonic RTTM
       (Round Trip Time Measurement) for this mechanism, to
       distinguish it from other uses of the Timestamps option.

禁用时间戳会导致的具体性能损失取决于您的特定服务器操作系统以及如何禁用它(例如,请参见此PSC doc on performance tuning)。一些操作系统要求您同时启用或禁用所有RFC1323选项...其他操作系统允许您有选择地启用RFC 1323选项。
如果您的虚拟服务器受到数据传输限制(也许您只购买了便宜的vhost计划),那么也许您无论如何都不能使用更高的性能...也许值得尝试关闭它们。如果您这样做,请务必从几个不同的位置对您的性能进行基准测试。

谢谢。这正是我需要了解这个问题的摘要。 - Paul Degnan
额外的注释:启用时间戳会增加您的流量开销,因为这9个字节在实际上并不是有效载荷数据,所以它们并不是“有用”的。 - Astaar
1
@Astaar,TCP时间戳选项是10个字节而不是9个字节。 - Jingguo Yao

17

为什么安全人员希望您禁用时间戳? 时间戳可能代表什么潜在威胁?我敢打赌,NTP团队对此会感到不满的; ^)

启用TCP时间戳将允许您猜测目标系统的正常运行时间(nmap v -O)。了解系统运行时间将使您能够确定是否应用了需要重新启动的安全补丁。


2
你在建议使用 nmap -v -O example.org 命令可以获取目标系统的正常运行时间,但是这个结果会如何显示呢?我已经在一个实现了TCP时间戳的测试系统上尝试过,但是没有得到结果。 - tuxayo

16

对于Daniel和其他需要澄清的人:

http://www.forensicswiki.org/wiki/TCP_timestamps

“TCP时间戳用于保护免受包装序列号的攻击。通过分析TCP时间戳(见下文),可以计算系统启动时间和运行时间。 这些计算出来的操作系统运行时间(和启动时间)可以帮助发现隐藏的网络操作系统(如TrueCrypt),将欺骗性IP和MAC地址链接在一起,将IP地址与Ad-Hoc无线APs链接在一起等等。”

这是PCI合规性中标记为低风险漏洞。


13

今天我在这个话题上被问了一个类似的问题。我的观点如下:

未修复的系统是漏洞所在,而不是攻击者是否可以轻易找到它。因此,解决方案是定期修补您的系统。禁用TCP时间戳对于使系统更安全并没有任何作用-这只是通过模糊来提高安全性,而这根本不是安全。

把问题转过来,考虑编写一个解决方案,使用TCP时间戳来识别您网络中最长运行时间的主机。这些通常是最脆弱的系统。使用这些信息来优先修补以确保您的网络得到保护。

不要忘记像正常运行时间这样的信息也对您的系统管理员有用。:)


11

我不会这样做。

没有时间戳,TCP针对缠绕序列号(PAWS)的保护机制将无法工作。 它使用时间戳选项来确定突然和随机的序列号更改是一个包含16位序列号的环绕,而不是来自另一个流的疯狂数据包。

如果您没有此选项,则您的TCP会话将根据它们使用序列号空间的速度不时出现问题。

引用RFC 1185:

ARPANET       56kbps       7KBps    3*10**5 (~3.6 days)
DS1          1.5Mbps     190KBps    10**4 (~3 hours)
Ethernet      10Mbps    1.25MBps    1700 (~30 mins)
DS3           45Mbps     5.6MBps    380
FDDI         100Mbps    12.5MBps    170
Gigabit        1Gbps     125MBps    17

假设我们拥有45Mbps的速度(远远超过802.11n标准),那么我们将在大约380秒后出现一个小故障。虽然不是很严重,但确实很烦人。

为什么安全人员希望您禁用时间戳?时间戳可能代表什么威胁?我打赌NTP团队会对此感到不满 ;^)

嗯,我读到一些关于使用TCP时间戳来猜测发送者时钟频率的文章。也许这就是他们害怕的东西?我不知道 ;^)

时间戳对于RTT估计并不像您想象的那么重要。我碰巧喜欢它们,因为它们有助于确定接收器或中间框的RTT。然而,根据TCP规范,只有发送方需要这种被禁止的知识; ^)

发送方不需要时间戳来计算RTT。t1 =发送包时的时间戳,t2 =收到ACK时的时间戳。RTT = t2-t1。稍微平滑一下就可以了!

......丹尼尔


3
你说的TCP burp是什么意思?是指TCP连接会被断开还是只会有一些性能损失? - misteryes
1
@misteryes:我猜测需要重新建立连接,因为如果序列号超出2^16范围,接收方将无法理解。也就是说,在32位地址空间中进行包装是可以的,但是如果超过2^16,则连接将会断开。 - SilverlightFox
1
@misteryes:其实,仔细思考后,由于TCP数据包的最大大小为65535字节(2^16-1),下一个数据包将落入该范围内,只是接下来的数据包将超出该范围,并且需要进行重传(在几分钟内自相矛盾了)。 - SilverlightFox
3
发送方不需要时间戳来计算往返时延(RTT),但在重新发送时需要。没有TCP时间戳,发送方无法确定所收到的ACK是来自原始传输还是重传。因此,在重新传输发生时,只有接收到没有重传的ACK后才能确定RTT。当发生许多重传时,这可能导致病态行为,因为发送方可能会减速到每120秒发送一个数据包的最小发送速率。 - John Zwinck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接