Idle 扫描的起源
原文由 Salvatore Sanfilippo 于 发布,订阅该博客
Idle 扫描构想于 1998 年底,有邮件为证。几个月前我刚搬到米兰,如果没记错的话,从九月起就住在那里,满脑子都是新想法,却不知道自己在这座城市的停留会如此短暂。那个夏天我在西西里的海滩上度过,大部分时间都在阅读 Seclab 的同事们(主要是 David)推荐的书。不过,这些阅读还需要一个催化剂:Idle 扫描是一次理论推演中诞生的攻击,但这一连串思考的起点,却是一个相当实际的契机。不久前我刚写了 Hping,一个连标志都是从 Nutella 那儿借来的工具。之所以提到这点,是想强调我当时做事的严肃程度——毕竟我才二十一岁,就已身在意大利北部,肩上还扛着一份全职工作,多少也值得一点体谅。
Hping 是 TCP/IP 协议的瑞士军刀。它最初的用途主要是探索性的,用于研究。用 Hping,你可以用最离奇的方式组装 TCP、UDP 和 ICMP 数据包,并将它们封装进同样古怪的 IP 包里——分片的、字段被设为异常值的——然后把这些包发出去,观察不同操作系统网络协议栈的反应。
Idle 扫描正是源于此:用 Hping 摆弄短短几分钟,就发现了一个众所周知、却(对我而言)令人惊讶的事实。响应包中的 ID 字段会持续递增。在当时,鉴于我后来才披露的那些攻击尚不为人知,这种 ID 字段的行为并没有引起任何担忧。操作系统每发出一个 IP 包,都会先让一个计数器加一(当达到 2 的 16 次方减 1 这个最大值后,计数器会归零),然后以该计数器的值作为 ID 发出。这个计数器对所有外发数据包都是全局共享的。这首先就意味着,可以借此估算任意联网计算机的外发流量。这个信息泄露让我很在意,在我看来是一个令人不安的异常。我在 BUGTRAQ 上发了一篇帖子,指出了这个问题。回复中有一位互联网领域的权威人物——曾起草过 TCP/IP 协议核心 RFC 的人。他说,是的,他们知道,这是众所周知的事实。简而言之:尽管这一特性可被用于估算流量,但大多数人认为不存在风险。而要修复这个被视为微不足道的问题,则需要对操作系统进行大幅改造。得不偿失。
但这件事却让我寝食难安,对我来说绝不是什么次要问题。我坚信,递增的 ID 字段所提供的信息,可以与其他一些要素(当时我还没完全想明白)结合起来,发动更为严重的攻击。我和 Lorenzo Cavallaro 讨论了这件事。几个月前正是 Lorenzo 向我介绍了 raw socket 技术,我也正是用它写出了 Hping。他成了我首选的交流对象,也是一位亲密的朋友;每当需要思考与 TCP/IP 相关的问题,我都会找他聊。向他提起这些新想法时,我不得不说得含糊其辞,并非出于本意,而是因为我还没能拼凑出最终的攻击形态。尽管如此含糊,他似乎还是颇感兴趣。
几天后,我又找他聊了一次。这一次,我终于得以向他更完整地描述 Idle 扫描(当时还没这么命名)。我是在纸上把整个逻辑推演出来的,因为根本没法实际测试。如果没记错的话,当时的 Hping 还缺少一些必要的功能,不过这一点我不敢打包票:毕竟已经过去二十五年了。写到这里,记忆倒变得清晰起来。我记得当时好像还无法精确指定外发 TCP 包的标志位。不过,就我的记忆而言,对 Hping 的修改花不了多少时间,所以我们很快也能在实践中验证我的理论。Idle 扫描真的奏效了,能在真实环境中证实这一点,令人非常激动。我不记得是谁做了这个类比,但本质上,这就像间接观测一颗看不见的天体的运动,只通过测量它对另一颗更易观测天体的引力作用来推断,正如冥王星的发现过程。
接下来就只剩下公开发布这个攻击了。不幸的是,一想到要用英语写一封长邮件,我就感到恐惧。我清楚 Idle 扫描是个有意思的点子,也正因如此,我害怕因为表述不佳而搞砸了发布。毕竟,这个攻击本身就很繁琐;要是描述得不好,甚至可能让人完全看不懂。那封邮件是我和 Lorenzo 深夜在我家写成的,而且肯定是喝醉的状态下写的。总比我一个人写要好;Lorenzo 的英语就算只好一点,也比我强。恰好 Seclab 的一位同事(也是创始人之一),在我看来是信息安全领域真正的天才,来自艾米利亚的一个餐饮世家。一天晚上他拎着一个袋子出现在我家。袋子里是一块上好的鲻鱼鱼籽,我此前从未见过,更别说尝过(后来它成了我最爱的食物之一)。这位厨师黑客为我们大家做了意面,我们一起大吃大喝了一顿。夜色渐深,其他人都离开了(除了这位厨师黑客,当时还有别人在场),但 Lorenzo 多留了一会儿。
那天晚上,我和 Lorenzo 在微醺的状态下,冒冒失失地觉得是时候写那封 Idle 扫描的发布邮件了(这封邮件至今仍保存在 BUGTRAQ 档案中,如今看来完全是语无伦次 [1])。我们坐在我的电脑前动笔。邮件是这样开头的:我发现了一种新的 TCP 端口扫描方法。与其他方法不同,它允许你使用伪造的数据包进行扫描,因此被扫描的主机看不到你的真实地址。不仅仅是语法,就连邮件中断然的语气也极不恰当。更糟的是,我们提议将这个攻击称为 dumb host scan,但好在很快就有人想出了一个更好的名字,并成为了正式名称:Idle scan。长话短说,尽管出身有些不堪,Idle 扫描还是成了一个经典攻击,可以说,一如往常,剩下的就是历史了。
随机一篇博客
评论
登录后参与讨论