使用TCP/IP协议栈指纹进行远程操作系统辨识(1)


概述

本文讨论了如何查询一台主机的TCP/IP协议栈来收集宝贵的信息。首 先,我列举了栈指纹之外的几种“经典的”操作系统辨识方法。然后 我描述了栈指纹工具的“工艺现状”。接下来说明让远程主机泄漏其 信息的一些技术。最后详述了我的实现nmap),和用它获得的一些 流行网站的操作系统信息。

理由

我认为辨识一个系统所运行OS的用处是相当显而易见的,所以这一节 会很短。最有力的例子之一是许多安全漏洞是OS相关的。试想你正在 作突破试验并发现53端口是打开的。如果那是易遭攻击的bind版本, 则你只有一次机会利用它因为失败的尝试会杀死守护程序。有了正确 的TCP/IP指纹,你将很快发现它运行的是'Solaris 2.51'或者'Linux 2.0.35' 而因此调整你的外壳代码。

一个比较糟的例子是某人扫描500,000台主机以找出它们运行什么OS 和哪些端口是打开的。然后等谁贴说)有一个root漏洞在Sun的comsat 守护程序里,我们的小朋友能从人家的列表中找出 'UDP/512'和'Solaris 2.6' 这两个词,并立即得到了整页整页的可得到root特权的盒子。必须认 识到那是脚本小子SCRIPT  KIDDIE)的行为。你证明了你的无能而 且没有人,甚至对方也,对你能找到没有及时修补漏洞而易受攻击的 .edu之事留有印象。人们也_较少_留有印象如果你用你新找到的通路 去破坏政府的web 站,换以一个自大的你如何强大而管理员们如何愚 蠢的话的话。

另一个用法是社会工学。假如你扫描目标公司而namp报告一个'Datavoice TxPOR TPRISM 3000 T1 CSU/DSU 6.22/2.06'。则黑客就以'Datavoice support'为名打电话并讨论他们PRISM 3000的一些问题。“我们正要 公布一个安全漏洞,但希望我们现在的客户先安装补丁--我刚刚寄给 你...”一些天真的管理员会假定只有Datavoice指定的工程师才会对 他们的CSU/DSU知道的如此之多。

这个能力另一个潜在的用途是评价你要交易的公司。在选择一个新ISP 前,扫描它们看用的是什么设备。那些“ 99美元/年”的买卖不向听 起来那么好当你发现它们用廉价的路由器并用一堆运行Windows 的机 器提供PPP 服务的时候。

经典技术

栈指纹以独特的方式解决OS辨识的问题。我想这个技术最有把握,但 现在有许多其他解决方案。遗憾的是,这仍是其中最有效的:

playground~> telnet hpux.u-aizu.ac.jp
Trying 163.143.103.12...
Connected to hpux.u-aizu.ac.jp.
Escape character is '^]'.

HP-UX hpux B.10.01 A 9000/715 (ttyp2)

login:

没有必要在指纹上费这么大力气,如果机器能大声对世界说明它们运 行的是什么!遗憾的是,许多制造商交付带有这类标志的_现有的_系 统而且许多管理员没有关上它。[译者:原文如此]只是因为还有其他 方法找出运行的OS例如指纹),但不是说我们应该通知每个尝试连 接的笨蛋我们的OS和体系结构。

依靠这个技术的问题是越来越多的人把标志关闭,许多系统不给出更 多信息,还有少数在标志中“说谎”。不过,你得到全部就是读标志 方式的OS和OS版本检查,如果你把上千美元花在商业的ISS 扫描器上 的话。下载nmap或queso代替它们可以替你省钱:)。

即使你关闭了标志,当被询问时许多应用程序仍然很高兴给出这类信 息。例如这个FTP服务器:

payfonez> telnet ftp.netscape.com 21
Trying 207.200.74.26...
Connected to ftp.netscape.com.
Escape character is '^]'.
220 ftp29 FTP server (UNIX(r) System V Release 4.0) ready.
SYST
215 UNIX Type: L8 Version: SUNOS

首先,它给出了它默认的系统细节标志。然后如果我们给出'SYST'命 令它愉快地送回更多信息。

如果FTP的anon被支持,我们经常可以下载/bin/ls或其他的二进制文 件而测定它所建造的体系结构。

许多其他应用程序对信息太随便了。比如web服务器:

playground> echo 'GET / HTTP/1.0' | nc hotbot.com 80 | egrep '^Server:'
Server: Microsoft-IIS/4.0
playground>

Hmmm ... 我对这些家伙运行的感到惊讶。

其他经典技术包括DNS 主机信息记录不太有效)和社会工学。如果 它在听161/udp (snmp),用CMU SNMU工具包里的'snmpwalk'和'public' 通信名你肯定能获得一大堆信息。

当前指纹问题

Nmap不是第一个用TCP/IP指纹辨识OS的程序。Johan的通用的IRC欺骗 程序sirc包括了非常基本的指纹技术从版本3 或更早)开始。它尝 试把主机分为 "Linux","4.4BSD", "Win95", 或 "Unknown"几类通过 几个简单TCP标志测试。

另一个这样的程序是checkos,作者Shok对版本7终于有了信心在今年 一月公开发行。指纹技术和SIRC的完全一样,甚至_代码_都有许多同 样之处。Checkos 在公开发行前私下流传了很久,所以不知谁偷谁的。 但看起来谁都不信任对方。checkos增加的是telnet 标志检查,有用 但有前面说的问题。[更新:Shok写信来说checkos无意公开发行而这 就是为什么他没有找SIRC要那些代码的许可。]

Su1d也写了一个OS检查程序。他称它叫SS其版本3.11可以辨识12个不 同的OS类型。我有些偏爱它因为他许可我的nmap程序一些网络代码:)。

然后是queso 。这是最新的而且对其他程序是一个巨大的飞跃。不仅 是因为它们推出了一些新测试,而且它们是首先就我所见)把OS指 纹_移出_代码的。其他扫描的代码象:

/* from ss */
if ((flagsfour & TH_RST) && (flagsfour & TH_ACK) && (winfour == 0) &&
(flagsthree & TH_ACK))
reportos(argv[2],argv[3],"Livingston Portmaster ComOS");

相反,queso 把这些代码移到一个配置文件显然使更易扩展而且使增 加一个OS成为在指纹文件中增加几行的简单工作。

Queso由Savage,Apostols.org的高手之一,所写。

以上所述所有问题中的一个问题是只有非常有限数量的指纹测试从而 限制了回答的详细程度。我想知道不仅是'这台机器是OpenBSD, FreeBSD, 或者NetBSD',我想确切知道它到底是那一个还有版本号。同样,我希 望看到'Solaris 2.6' 而不仅仅是'Solaris'。为此,我对一系列指纹 技术进行了研究,它们将在下一节说明。


相关内容