Idle Scan 的起源
Idle Scan(空闲扫描)这一攻击构思于 1998 年底,有电子邮件为证。几个月前,如果我没记错的话,是自九月起,我搬到了米兰,满脑子都是新想法,却不知道自己在这座城市的停留会很短暂。那个夏天我在西西里的海滩上度过,主要忙着阅读 Seclab 的伙伴们(主要是 David)推荐的许多书。然而,这些阅读需要一个催化剂:Idle Scan 是一个诞生于理论沉思的攻击,但这条思绪之流却源于一件相当实际的事情。我刚刚写出了 Hping,这个工具的标志借用了 Nutella 的标志。我提这一点是为了强调当时支配我工作的那种认真劲儿——毕竟,我只有二十一岁,就已经在意大利北部肩负着一份全职工作;理应得到一些理解。
Hping 是 TCP/IP 协议的一把瑞士军刀。它最初的用途大多是探索性的,用于研究。借助 Hping,你可以以最古怪的方式组装 TCP、UDP 和 ICMP 数据包,并把它们封装进同样离奇的 IP 数据包中——分片的、字段被设为异常值的。这些数据包被发送出去,用来观察不同操作系统的网络协议栈的响应。
Idle Scan 正源于此:只玩了几分钟 Hping,就揭示了一个众所周知却(对我而言)令人惊讶的事实。响应数据包有一个 ID 字段,它会持续地按某个量递增。在当时,由于我后来披露的那些攻击还不为人知,这种 ID 字段的行为并未引起任何担忧。每当操作系统发出一个 IP 数据包时,它首先递增一个计数器(当达到二的十六次方减一的最大值时会归零),然后发送数据包,其 ID 被设置为计数器的值。这个计数器对所有发出的数据包是通用的。这至少让人可以估算任何联网计算机的出站流量。这种信息泄露让我震惊;我认为这是一个令人不安的异常。我在 BUGTRAQ 上发了一篇初始帖子,指出了这个问题。在回复中,有一位互联网名人的回复,此人曾为 TCP/IP 协议起草过核心的 RFC。他说,是的,他们知道这一点;这是众所周知的事实。简而言之:尽管这一特性可用于流量估算,大多数人并不认为存在风险。而要解决这个被认为微不足道的问题,需要对操作系统进行大规模改造。不值得。
但我为此夜不能寐,对我来说这绝非次要问题。我确信,递增 ID 字段所提供的信息可以与其他要素(当时我尚未完全掌握)结合起来,发动一场严重得多的攻击。我和 Lorenzo Cavallaro(洛伦佐·卡瓦拉罗)讨论了这件事。Lorenzo 几个月前向我介绍了 raw socket 技术,我用它写出了 Hping。他成了我的首选谈话对象,也是一位挚友;如果要琢磨与 TCP/IP 相关的问题,我都会和他讨论。当我告诉他这些新想法时,我不得不含糊其辞,不是出于选择,而是因为我还没有把最终的攻击拼凑完整。尽管我说得含糊,他显得相当感兴趣。
几天后,我又和他谈了一次。我终于得以向他更全面地描述 Idle Scan(当时尚未如此命名)。我已经在纸上推演过了,因为没有办法进行实际测试。如果我没记错的话,Hping 缺少一些必要的功能,不过这部分我可不敢打赌:已经过去二十五年了。随着写作,我的记忆逐渐清晰起来。我记得当时无法选择发出 TCP 数据包的确切标志位。总之,据我所记,对 Hping 的修改没花多少时间,于是我们也能在实践中检验我的理论了。Idle Scan 真的有效,在真实条件下证明这一点令人非常兴奋。我不记得是谁做了这个类比,但本质上,这就像间接观测一个不可见天体的运动,只测量它对另一个更容易观测的天体的引力效应,就像冥王星的发现一样。
剩下的就是把攻击公之于众。不幸的是,一想到要用英文写一封长邮件就让我胆战心惊。我知道 Idle Scan 是个有趣的想法,也正因如此,我害怕因为表达不佳而搞砸它的发布。毕竟,这个攻击很繁琐;它甚至可能被描述得糟糕到让人无法理解。Lorenzo 和我在深夜、在我家里写了那封邮件,肯定还喝醉了。总比一个人写要好;Lorenzo 的英语哪怕好一点,也比我的强。碰巧,Seclab 的一位同事(也是创始人之一),我认为他是信息安全领域真正的天才,出身于艾米利亚的一个餐馆世家。一天晚上,他带着一个袋子出现在我家。袋子里是一块上好的鲻鱼鱼子酱,我从未见过,更别说尝过(后来它成了我最喜欢的食物之一)。这位厨师兼黑客为我们大家煮了意面,我们一起吃饱喝足。晚会结束时,其他人离开了(除了厨师兼黑客之外还有别人),但 Lorenzo 多待了一会儿。
那天晚上,我和 Lorenzo 都有些醉意,鲁莽地认为是时候写 Idle Scan 的公告邮件了(它至今仍保存在 BUGTRAQ 档案中,如今看来确实语无伦次 [1])。我们坐到我的电脑前开始工作。邮件是这样开头的:I have uncovered a new tcp port scan method. Instead all others it allows you to scan using spoofed packets, so scanned hosts can't see your real address. 不仅是语法,就连邮件中那种武断的语气也完全不得体。更糟的是,我们还提议把这个攻击命名为 dumb host scan,但幸运的是,很快有人想出了一个更好的名字,并成为正式名称:Idle Scan。长话短说,尽管出身 flawed,Idle Scan 已成为一个经典攻击,而且可以放心地说,正如常有的情形那样,剩下的就是历史了。
随机一篇博客