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'。为此,我对一系列指纹
技术进行了研究,它们将在下一节说明。
指纹方法学
有许多许多技术可以用来定义网络栈指纹。基本上,你只要找出操作
系统间的不同并写探测器查明它们。如果你合并足够这些,你可以非
常细致的区分它们。例如nmap可以可靠分辨出Solaris 2.4 和Solaris 2.5-2.51
以及Solaris 2.6。他能分辨Linux内核2.0.30到2.0.31-34或or 2.0.35。
这有一些技术:
FIN 探测器 -- 这里我们送一个FIN包(或任何其他包不带ACK 或SYN
标记)给一个打开的端口并等待回应。正确的RFC793行为是不
响应,但许多有问题的实现例如 MS Windows, BSDI, CISCO,
HP/UX,MVS,和IRIX 发回一个RESET。许多现有工具利用这个技
术。
BOGUS 标记探测器 -- Queso 是我见过的第一个用这个聪明技术扫描
器。这个主意是设置一个未定义的TCP "标记"(64或128)在SYN
包的TCP头里。Linux机器到2.0.35之前在回应中保持这个标记。
我没有发现其他OS有这个错误。然而,一些操作系统象是复位
连接当它们得到一个SYN+ BOGUS包的时候。这一行为对辨识它
们有用。
TCP ISN 取样 -- 这个主意是找出当响应一个连接请求时由TCP 实现
所选择的初始化序列数式样。这可分为许多组例如传统的64K
(许多老UNIX机器),随机增量(新版本的Solaris, IRIX, FreeBSD,
Digital UNIX, Cray, 和许多其他的),真“随机”(Linux 2.0.*,
OpenVMS,新的AIX,等)。Windows 机器(和一些其他的)用一
个“时间相关”模型,每过一段时间ISN 就被加上一个小的固
定数。不用说,这几乎和老的64K 行为一样容易攻破。当然我
喜欢的技术是"常数"。机器总是使用确切同样的ISN :)。我已
经在3Com的集线器(用0x803)和Apple LaserWriter打印机(
用0xC7001 )上看到了。
你也可以通过例如计算其随机数的变化量,最大公约数,以及
序列数的其他函数和数之间的差异再进一步分组。
要知道ISN 的生成和安全息息相关。想了解更多情况,联络在
SDSC的“安全专家”Tsutome Shimmy Shimomura,问他所知道
的。Nmap是我所见到的第一个用它来辨识OS的程序。
不分段位 -- 许多操作系统开始在送出的一些包中设置IP的"Don't Fragment"
位。这带来多种性能上的好处(尽管它也可能是讨厌的 -- 这
就是nmap的分段扫描对Solaris机器无效的原因)。无论如何,
不是所有的OS都这样做而且另一些做的场合不同,所以通过注
意这个位我们甚至能收集目标OS的更多信息。在那两个程序中
没见过这个。
TCP 初始化窗口 -- 这只包括了检查返回包的窗口大小。较老的扫描
器简单地用一个非零窗口在RST包中来表示“BSD 4.4 族”。新
一些的如queso 和nmap则保持对窗口的精确跟踪因为它对于特定
OS基本是常数。这个测试事实上给出许多信息,因为有些可以被
唯一确定(例如,AIX 是所知唯一用0x3F25的)。在它们“完全
重写”的NT5 TCP 栈中,Microsoft 用的是0x402E。有趣的是,
这和OpenBSD 与FreeBSD 中所用的数字完全一样。
ACK 值 -- 尽管你会认为这个会完全标准,不同实现中一些情况下ACK
域的值是不同的。例如,如果你送了一个FIN
关键词:运用TCP/IP协议栈指纹进行远程设置系统辨识