分类: 网络与安全
2009-10-02 11:22:51
*网络ping扫描
快速ping:
[root]$ fping –a –f in.txt
192.168.1.254 is alive
192.168.1.227 is alive
192.168.1.224 is alive
Nmap:
[root] nmap –sP 192.168.1.0/24
Starting nmap V. 4.68 by fyodor@insecure.org (www.insecure.org/nmap/)
Host (192.168.1.0) seems to be a subnet broadcast
address (returned 3 extra pings).
Host (192.168.1.1) appears to be up.
Host (192.168.1.10) appears to be up.
Host (192.168.1.11) appears to be up.
Host (192.168.1.15) appears to be up.
Superscan:
从技术角度讲,以下几类的ICMP数据包都可以用来ping一台主机(详见RFC 792号文档)。常用的ICMP数据包类型有:
消息类型:0 - Echo Reply(回音应答)
消息类型:3 - Destination Unrechable(目的地无法到达
消息类型:4 - Source Quench(源主机准备关机)
消息类型:5 - Redirect(重定向)
消息类型:8 - Echo(回音)
消息类型:11 - Times Exceeded(超时)
消息类型:12 - Parameter Problem(参数有错误)
消息类型:13 - Timestamp(时间戳)
消息类型:14 - Timestamp Reply(时间戳应答)
消息类型:15 - Information Request(信息请求)
消息类型:16 - Information Reply(信息应答)
以上这些ICMP数据包都可以用来发现网络上的主机,具体情况取决于目标主机上的ICMP实现和它对这些数据包类型的响应。不同的操作系统会对这些ICMP数据包类型做出不同的响应或是不做出响应,利用这些细微的差异可以推测出目标主机使用的操作系统。
突破封锁:
[root] nmap -sP -PT80 192.168.1.0/24
TCP probe port is 80
Starting nmap V. 4.68
Host (192.168.1.0) appears to be up.
Host (192.168.1.1) appears to be up.
Host shadow (192.168.1.10) appears to be up.
Host (192.168.1.11) appears to be up.
Host (192.168.1.15) appears to be up.
Host (192.168.1.20) appears to be up.
icmpenum是很一个方便的ICMP查点工具,利用它可以迅速确定目标网络里都存在着哪些活跃的系统。这个工具既可以发出传统的ICMP ECHO数据包、也可以发出ICMP TIME STAMP REQUEST和ICMP INFO请求(类似于SuperScan工具)。换句话说,即使ICMP ECHO数据包被目标网络的边界路由器或防火墙阻断了,icmpenum程序也可以利用其他类型的ICMP数据包把目标网络里的活跃系统找出来:
[shadow] icmpenum -i2 -c 192.168.1.0
192.168.1.1 is up
192.168.1.10 is up
192.168.1.11 is up
192.168.1.15 is up
192.168.1.20 is up
192.168.1.103 is up
在上面的例子里,我们利用ICMP TIME STAMP REQUEST数据包对C类网络192.168.1.0从头至尾进行了一次查点。不过,icmpenum工具的真正威力在于它可以使用伪造的数据包去发现目标网络里的活跃系统,以免被对方监测到扫描活动的真正来源——icmpenum工具的“-s”选项可以给它发出的扫描数据包设置一个虚假的源地址,“-p”选项可以让它以被动方式监听从目标网络返回的响应。
-*针对ping扫描活动的防范措施
监测:
使用诸如Snort()之类基于网络的IDS(intrusion detection system,入侵监测系统)程序。
从基于主机的角度,有几种UNIX实用工具可以监测到ping扫描活动并把它们记载到日志文件里去。
有许多种商业化的网络和桌面防火墙工具(Cisco、Check Point、Microsoft、McAfee、Symantec和ISS等公司都能提供)可以监测到ICMP、TCP和UDP ping扫描活动。但存在可以监测ping扫描活动的技术,并不意味着有人在密切监测着这类活动。
程序 |
资源 |
Scanlogd |
|
Courtney |
http://packetstormsecurity.org/UNIX/audit/courtney-1.3.tar.Z |
Ippl |
|
Protolog |
http://packetstormsecurity.org/UNIX/loggers/protolog- |
表2-1 基于UNIX主机的ping扫描监测工具 |
防御:
最简单的办法是只允许ICMP ECHO_REPLY、HOST_UNREACHABLE和TIME_EXCEEDED数据包进入DMZ网络并只允许它们到达特定的主机。此外,若是可以通过访问控制表(access control list,ACL)把外来ICMP通信限制在只能到达某些属于你们ISP(因特网接入服务提供商)的IP地址,你们的处境将会更安全。
由Tom Ptacek开发并由Mike Schiffman移植到Linux上的pingd工具提出了另外一个有趣的概念。pingd是一个在主机层面处理各种ICMP ECHO和ICMP ECHO_REPLY通信的用户级守护进程。这一卓绝的手法禁用操作系统内核对ICMP ECHO数据包的处理功能,然后一个带底层ICMP套接口的用户级守护进程去处理这些数据包。也就是pingd工具提供了一种主机级的ping访问控制机制。基于Linux的pingd工具可以从http://packetstormsecurity.org/UNIX/misc/pingd-
* ICMP查询
用UNIX工具icmpquery(http://packetstormsecurity.org /UNIX/scanners/icmpquery.c)或icmpush(http://packetstormsecurity.org/UNIX/scanners /icmpush22.tgz)向某个系统发出一条ICMP TIMESTAMP(时间戳,ICMP消息类型13)消息,就可以获知系统时间和它所在的地理时区。类似地,如果你们向目标设备发出的是ICMP ADDRESS MASK REQUEST(地址掩码请求;ICMP消息类型17)消息,返回的就将是该设备的子网掩码(netmask)。网卡的子网掩码非常重要,攻击者可以根据子网掩码把目标网络的各个子网全部查找出来。查出那些子网之后,攻击者就可以撇开广播地址而集中火力只攻击某几个特定的子网。icmpquery工具既可以用来发出时间戳请求,也可以发出地址掩码请求:
icmpquery <-query> [-B] [-f fromhost] [-d delay] [-T time] targets
where
-t : icmp timestamp request (default)
-m : icmp address mask request
The delay is in microseconds to sleep between packets.
targets is a list of hostnames or addresses
-T specifi es the number of seconds to wait for a host to
respond. The default is 5.
-B specifi es 'broadcast' mode. icmpquery will wait
for timeout seconds and print all responses.
If you're on a modem, you may wish to use a larger -d and –T
如果你想用icmpquery工具查询某个路由器的时间,请执行如下的命令:
[root] icmpquery -t 192.168.1.1
192.168.1.1 : 11:36:19
如果你想用icmpquery工具查询某个路由器的子网掩码,请执行如下的命令:
[root] icmpquery -m 192.168.1.1
192.168.1.1 : 0xFFFFFFE0
并非所有的路由器或系统都允许ICMP TIMESTAMP或NETMASK响应,所以用icmpquery或icmpush工具对不同主机进行这类查询时的返回结果可能会有很大的差别。
针对ICMP查询的防范措施
最好的防范措施之一是在网络边界路由器上阻断有可能泄漏敏感信息的各种ICMP数据包,至少应该限制TIMESTAMP(ICMP消息类型13)和ADDRESS MASK(ICMP消息类型17)这两种数据包进入你们的网络。如果在网络边界上部署的是Cisco路由器,可以用如下所示的ACL表限制其对这两种ICMP请求数据包做出响应:
access-list 101 deny icmp any any 13 ! timestamp request
access-list 101 deny icmp any any 17 ! address mask request
诸如Snort之类的网络入侵监测系统(network intrusion detection system,NIDS)也可以监测到这类活动。下面是Snort在监测到此类活动时记入日志的消息示例:
[**] PING-ICMP Timestamp [**]
05/29-12:04:40.535502 192.168.1.10 -> 192.168.1.1
ICMP TTL:255 TOS:0x0 ID:4321
TIMESTAMP REQUEST
*端口扫描
扫描类型:
TCP连接扫描 这种扫描将连接目标端口并完成一次完整的三次握手过程(SYN、SYN/ACK和ACK),就像TCP RFC(Request for Comment)描述的那样。这种扫描很容易被目标系统觉察。图2-3是TCP三次握手的流程图。
· TCP SYN扫描 这种扫描也叫做“半开扫描”(half-open scanning),因为双方并没有建立起一条完整的TCP连接,而是扫描者先向被目标端口发出一个SYN数据包。如果从目标端口返回一个SYN/ACK数据包,我们就可以断定该端口处于监听状态;如果返回一个RST/ACK数据包,它通常表明目标端口不在监听状态。接下来,扫描者将送出一个RST/ACK数据包,这使得通信双方永远不会建立起一条完整的连接。这种技术的优点是比一条完整的TCP连接更隐秘,而且目标系统一般也不会把这类事件记入日志。而它的主要缺点是打开的半开连接数量过多时,会在目标系统上形成一种“拒绝服务”条件而引起对方的警觉。但如果你没有使用大量的这类连接去扫描同一个系统,这种技术还是很安全的。
· TCP FIN扫描 这种扫描向目标端口发出一个FIN数据包。根据RFC 793号文档( /rfc/rfc0793.txt)中的规定,如果目标端口是关闭的,目标系统应该返回一个RST数据包。这种扫描通常只对UNIX系统的TCP/IP栈有效。
· TCP圣诞树扫描 这种技术向目标端口发送一个FIN、URG和PUSH数据包。根据RFC 793号文档的有关规定,如果目标端口是关闭的,目标系统应该返回一个RST数据包。
· TCP空扫描 这种技术是关掉所有的标志。根据RFC 793号文档的有关规定,如果目标端口是关闭的,目标系统应该返回一个RST数据包。
· TCP ACK扫描 这种技术用来试测防火墙的规则集。它可以帮助扫描者判断对方的防火墙是一个简单的、只允许已建立连接(即ACK标志位被置位的连接)通过的数据包过滤器;还是一个高级的、具备数据包过滤功能的有状态(stateful)防火墙。
· TCP窗口扫描 这种技术可以试测出特定类型的目标系统(比如AIX和FreeBSD系统)上的目标端口是开放的、被过滤的、还是不被过滤的——这几种情况会导致目标系统向扫描者返回不同的TCP窗口(TCP windows)长度值。
· TCP RPC扫描 这种技术仅适用于UNIX系统,其主要用途是发现并确认目标系统上的RPC(远程过程调用)端口以及与RPC端口相关联的应用程序和版本号。
· UDP扫描 这种技术将向目标端口发出一个UDP数据包。如果从目标端口返回的是一条“ICMP port unreachable”(无法到达指定ICMP端口)出错消息,就表明该端口是关闭的。反之,如果扫描者没有收到该出错消息,就可以断定那个端口是开放的。因为UDP协议不要求通信双方必须建立一条连接,所以这种扫描的准确性在很大程度上取决于与目标网络的使用情况和过滤机制有关的许多种因素。此外,如果你试图扫描的是一个数据包过滤量很大的设备,UDP扫描的速度会非常慢。如果你打算在因特网上进行UDP扫描,请做好扫描结果不可靠的心理准备。
IP协议的某些具体实现会因为其自身的缺陷而为所有被扫描端口返回一个RST(reset)数据包——不管它们是不是处于监听状态。因此,你们看到的扫描结果很可能会与我们这里的不一致;但“TCP SYN扫描”和“TCP连接扫描”应该适用于任何类型的主机。
nc程序的选项:“-v”生成详尽的输出报告;“-vv”生成非常详尽的输出报告;“-z”,零模式I/O(zero mode I/O),也就是进行端口扫描;“-w
[root] nc -v -z -w2 192.168.1.1 1-140
[192.168.1.1] 139 (?) open
[192.168.1.1] 135 (?) open
[192.168.1.1] 110 (pop-3) open
[192.168.1.1] 106 (?) open
[192.168.1.1] 81 (?) open
[192.168.1.1] 80 (http) open
[192.168.1.1] 79 (fi nger) open
[192.168.1.1] 53 (domain) open
[192.168.1.1] 42 (?) open
[192.168.1.1] 25 (smtp) open
[192.168.1.1] 21 (ftp) open
[root] nc -u
-v -z -w2 192.168.1.1 1-140
[192.168.1.1] 135 (ntportmap) open
[192.168.1.1] 123 (ntp) open
[192.168.1.1] 53 (domain) open
[192.168.1.1] 42 (name) open
我们刚才介绍的都是些入门级的端口扫描工具,接下来要介绍最著名的UNIX端口扫描工具之一,nmap(http://www.insecure.org/nmap)。由Fyodor编写的nmap工具不仅具备基本的TCP和UDP扫描能力,还集成了我们此前提及的多种扫描技术。下面是它最有用的一些功能的说明。
[root] nmap –sS 192.168.1.1
Starting nmap V. 4.68 by fyodor@insecure.org
Interesting ports on (192.168.1.11):
[root]# nmap -sF 192.168.1.0/24 -oN outfile
如果想要把结果保存到一个以tab键作为分割符的文件中以便编程分析它,那就使用“-oM”选项。由于这种扫描有可能收到大量信息,因此使用任何一种格式把结果保存起来是个合理的想法。某些情况下,可以组合“-oN”和“-oM”选项,把结果以两种格式同时保存。–oX可以保存为xml文件。
假设踩点某个单位后发现他们在使用一个简单的数据包过滤设备作为主防火墙,我们可以使用nmap的“-f”选项把数据包划分成片段。该选项实质上把TCP表头分割到若干个数据包中,从而给访问控制设备或IDS系统增加监测扫描的难度。大多数情况下,现代的数据包过滤设备和基于应用程序的防火墙会在决定是否放行IP片段前排队重组它们(分片的逆过程)。不过较老的访问控制设备或要求达到最高性能级别的设备可能不重组片段就放行它们了。
此时,执行过的扫描可能已被目标站点轻易地监测到了,这取决于目标网络和主机的先进程度。nmap提供了额外的欺骗能力,也就是使用“-D”选项给目标站点灌输多余的信息。隐含在该选项背后的基本前提是,在发起真实扫描的同时发起欺骗性扫描,这是通过源地址假冒真实的服务器,并把这些虚假的扫描与真实的扫描混杂在一起来完成的。目标系统除对真实的端口扫描作出响应外,对虚假扫描也不例外。另外,目标系统为了确定哪些扫描是真实的,哪些又是虚假的,势必会增添试图追踪所有扫描的负担。需要记住的是,虚假地址必须是活动的,否则这样扫描可能导致SYN数据包淹没目标系统,造成拒绝服务的后果。下面这个例子使用了“-D”选项:
[root] nmap
-sS 192.168.1.1 –D
最后要讨论一种扫描技术是FTP弹射扫描(FTP bounce scanning)。FTP弹射攻击的概念是由Hobbit最早公之于众的。1995年,在Bugtraq上发布的一篇文章(http://www.securityfocus.com/templates/archive.pike?list=1&msg=199507120620.CAA18176 @narq.avian.org)里,Hobbit指出了FTP协议(详见/rfc/ rfc0959.txt处的RFC 959号文档)中的某些内在缺陷。大体上说FTP弹射攻击是一种狡诈的洗劫FTP服务器连接的方法,它滥用了对“代理(proxy)”FTP连接的支持。正如Hobbit在那篇文章中指出的那样,FTP弹射攻击“可用来张贴几乎无从追踪的邮件和新闻,破坏各个站点的服务器,填满硬盘,尝试穿越防火墙,而且通常既令人讨厌又难以追踪。”而且,你还可以让端口扫描活动弹离FTP服务器以隐蔽自己的身份,甚至绕开访问控制机制。
nmap以“-b”选项支持这种扫描类型,不过必须有几个条件。首先,FTP服务器必须有一个可写可读目录,例如/incoming。其次,FTP服务器必须允许nmap通过PORT命令供给它虚假的端口信息。FTP弹射扫描技术在绕开访问控制设备和隐蔽个人身份上,尽管非常有效,但实施起来可能相当慢。另外,许多新版本的FTP服务器并不允许这种类型的活动发生。
-*针对ping扫描活动的防范措施
监测可以使用Snort。
Unix下面还有scanlogd utility (),
大多数防火墙都应该被配置成能够监测端口扫描活动的样子。有些防火墙在监测能够隐藏自己真正来源的端口扫描活动方面要比其他产品做得更好。比如说,有不少防火墙都有一个选项可以让系统在不对SYN扫描做出任何响应的前提下监测FIN扫描活动。监测端口扫描活动的最大困难是怎样高效率地从信息量巨大的日志文件里把有关事件的日志记录项筛选出来。我们的下一个建议是,把你的防火墙或入侵监测系统配置成可以通过电子邮件实时报警。如果它具备“阈值日志”(threshold logging)功能,请务必激活之,这有助于防止你的电子邮箱因为收到过多的报警邮件而形成“拒绝服务”。阈值日志功能可以对报警信息进行归纳整理而不是每监测到一次异常活动就向你发出警报。总之,你至少应该建立一种可以向你报告本站点遭到端口扫描报告机制。
从Windows下有Attacker by Foundstone()。
预防一般使用禁用服务。
不同厂家的IP协议栈实现之间存在着许多细微的差别,各厂家在编写协议栈时,往往会对特定的RFC文档规定做出不同的解释。因此,通过探查这些差异,我们就能对目标系统所使用的操作系统做出有依据的判断。为了最可靠,协议栈指纹分析技术通常要求目标系统至少要有一个监听端口。但即便是目标系统没有打开着的端口,nmap工具也能比较有把握地——当然,准确度会有所下降——推测出它的操作系统。Fyodor曾在Phrack Magazine杂志上发表过一篇这方面的权威性论文,这篇文章可以从http://www.insecure.org/nmap/nmap- fingerprinting-article.html上查到。
我们先来看看都有哪些探查技术可以帮助我们区分各种操作系统:
FIN探查 这种技术将向某个打开的端口发出一个FIN数据包。根据RFC 793号文档中的有关规定,目标系统的正常行为应该是不做出任何响应。但协议栈的许多种实现(比如Windows NT/2000/2003)会返回一个FIN/ACK数据包作为响应。
无效标志探查 在SYN数据包的TCP表头置位一个准确定义的TCP标志。某些操作系统(例如Linux)会在它们的响应数据包里也置位这个标志。
ISN(Initial Sequence Number,初始序列号)采样 TCP协议在响应一个连接请求时,返回的初始序列号往往呈现出不同的模式。
DF标志位监控 某些操作系统会置位DF位(Don't fragment bit,不允许对TCP/IP数据包做进一步拆分)以改善性能。通过监控DF位,我们就能判定出在目标系统上运行的是不是具有上述行为特点的操作系统。
TCP初始数据窗长度 这种技术通过分析从目标系统返回的数据包的初始窗口大小来推测操作系统。对TCP/IP协议栈的某些实现来说,这个长度值是独一无二的,因而可以极大地提高指纹分析的准确度。
ACK值 不同的IP协议栈在往ACK字段里填写序列号时会采用不同的做法,有的实现将原封不动地送回你发去的序列号,有的实现则会先给你发去的序列号加上1、再送回来。
ICMP出错消息抑制 有些操作系统会遵循RFC 1812号文档(/rfc /rfc1812.txt)中的有关规定,对送出ICMP出错消息的频率做出限制。这种探查技术随机向目标系统的某些高编号端口发出一些UDP数据包,然后对在给定时间内返回的目的地无法到达出错消息的数量进行统计。这还可以帮助我们发现目标UDP端口是否处于打开状态。
ICMP消息内容 不同的操作系统在ICMP返回消息里给出的文字内容是不一样的。通过查看返回的ICMP消息,我们可以对目标操作系统做出比较准确的猜测。
ICMP出错消息——请求/响应是否匹配 协议栈的某些实现在返回ICMP出错消息时会改变请求数据包的IP表头。通过查看IP表头都发生了哪些变化,我们就可以对目标操作系统做出比较准确的猜测。
TOS(Type of Service,服务类型)字段 这种探查技术通过查看“ICMP port unreachable”(无法到达指定ICMP端口)消息的TOS字段来判断目标操作系统。协议栈的大多数实现都会把它设置为0,但也可以把它设置为其他数值。
数据包拆分处理 正如Thomas Ptacek和Tim Newsham在他们划时代的论文Insertion, Evasion, and Denial of Service: Eluding Network Intrusion Detection(插入、规避和拒绝服务:躲避网络入侵检测)里指出的那样(详见 /idspaper.html),协议栈的不同实现在处理数据包拆分片段时会采取不同的做法。在重新拼凑数据包片段的时候,协议栈会用后收到的新数据覆写先收到的老数据(或者刚好反过来)。通过观察目标系统如何拼凑探查数据包,我们就可以对目标操作系统做出比较准确的猜测。
TCP选项 RFC 793号文档和后来的RFC 1323号文档(/rfc /rfc1323.txt)对TCP选项做出了定义。RFC 1323号文档增加了一些高级TCP选项,协议栈的各种最新实现几乎都增加了对它们的支持。通过发送设置了多个选项——比如“无操作”选项、“最大分段长度”选项、“数据窗缩放比例”选项和“时间戳”选项——的TCP数据包并分析其返回结果,我们就可以对目标操作系统做出比较准确的猜测。
nmap工具的“-O”选项可以同时使用以上技术(“数据包拆分处理”和“ICMP出错消息队列”除外)进行探查。下面是我们对某目标网络进行探查的结果:
[root] nmap -O 192.168.1.10
通过nmap工具的协议栈指纹分析选项“-O”,我们可以对目标操作系统做出简明准确的判断。即使目标系统没有端口处于打开状态,nmap工具也可以对它的操作系统做出相当准确的猜测:
[root]# nmap
-p80 -O
。queso不是一个端口扫描工具,它只能用来探查目标操作系统,而且每次只能查询一个打开着的端口(默认时使用80号端口)。如果目标服务器的80号端口没有打开,就必须另外指定一个打开着的端口。在下面的例子里,queso工具将通过25号端口去确定目标操作系统:
[root] queso
我们前面介绍过的很多种端口扫描监测工具都可以用来监测操作系统探查活动。它们虽然不能明确地告诉nmap或queso操作系统探查扫描活动正在发生,但它们都能监测到具有特定的选项或标志——比如置位了SYN标志——的扫描活动。
我们希望找到一种能挫败操作系统探查活动的简单办法,只可惜这个问题并不那么容易解决。通过修改操作系统的源代码或是参数来改变某一个指纹特征不是不可能,但这可能对操作系统的正常功能造成不利影响。比如说,FreeBSD 4.x提供了一个TCP_DROP_SYNFIN内核选项,这个选项可以不对nmap工具在进行协议栈指纹分析时发出的SYN+FIN数据包做出任何响应。激活这个选项有助于挫败OS探查活动,但同时却违反了RFC 1644号文档《TCP Extension for Transtractions》(用于事务处理的TCP扩展)中的有关规定。
“不出声就不会被发现”这一古老的格言并不适用于信息安防工作,你们应该只把健壮的、经过安防硬化处理的代理或防火墙摆在前线。即使攻击者探查出了目标的操作系统,以不可能轻易获得目标系统的访问权限。
被动式协议栈指纹分析技术与主动式TCP/IP协议栈指纹分析技术在概念上很相似,但被动式探查技术不向目标系统发送数据包,攻击者将通过被动地监控网络通信的办法去推测目标系统的操作系统。所以,通过监控不同系统之间的网络通信,我们同样可以查明网络上的操作系统。被动式探查技术的成功取决于攻击者必须位于网络的通信枢纽,以及必须有一个可以用来捕获数据包的端口(比如一个镜像端口)。
Lance Spitzner在被动式协议栈指纹分析技术领域做了很多研究工作,并写了一篇技术白皮书来阐明他的发现()。此外,Marshall Beddoe和Chris Abad开发出了siphon软件,这是一个被动式端口映射、操作系统探查和网络拓扑结构分析工具。你们可以从http://packetstormsecurity.org/UNIX /utilities/siphon-v.666.tar.gz处下载到这个工具。
网络通信的种种特征可以用来识别不同的操作系统。我们将把我们的讨论范围限制在下面几个与TCP/IP会话有关的属性上:
TTL 操作系统给外出数据包设置的TTL(Time-To-Live,生存时间)值是多大?
Windows size(数据窗长度) 操作系统设置的数据窗长度是多大?
DF位 操作系统是否设置了“Don't Fragment”(不允许对TCP/IP数据包做进一步拆分)位?
[shadow] # telnet 192.168.1.11
使用我们最喜欢的嗅探工具Snort,我们可以查看到telnet连接的部分数据包踪迹。
06/04-11:23:48.297976 192.168.1.11:23 -> 192.168.1.10:2295
TCP TTL:255 TOS:0x0 ID:58934 DF
**S***A* Seq: 0xD3B
TCP Options => NOP NOP TS: 9688775 9682347 NOP WS: 0 MSS: 1460
查看我们的三个TCP/IP属性,可以发现以下事实:
TTL = 225
Window Size = Ox2798
Don’t fragment(DF)位 = Yes
现在,我们再去查查siphon指纹数据库文件osprints.conf:
[shadow]# grep
-i solaris osprints.conf
# Window:TTL:DF:Operating System DF = 1 for ON, 0 for OFF.
2328:255:1:Solaris 2.6 - 2.7
2238:255:1:Solaris 2.6 - 2.7
2400:255:1:Solaris 2.6 - 2.7
2798:255:1:Solaris 2.6 - 2.7
FE88:255:1:Solaris 2.6 - 2.7
FAF0:255:0:Solaris 2.6 - 2.7
FFFF:255:1:Solaris 2.6 - 2.7
我们可以看到,第四条记录与snort的跟踪结果完全吻合:数据窗长度是2798,TTL是255,DF位是置位状态(等于1)。这么看来,我们应该可以用siphon准确地猜测出目标操作系统来了:
[crush]# siphon -v -i xl0 -o fi ngerprint.out
Running on: 'crush' running FreeBSD 4.0-RELEASE on a(n) i386
Using Device: xl0
Host Port TTL DF Operating System
192.168.1.11 23 255 ON Solaris 2.6 - 2.7
cheops()是一个几乎无所不能的图形化网络侦察工具,如图2-7所示。这个工具把ping、traceroute、端口扫描和操作系统探查(通过queso工具)等功能集成到了同一个软件包里。cheops工具向人们提供了一个以图像方式查看目标系统和目标网络的简单界面,让我们可以直观地看到目标网站的拓扑结构。
tkined工具是Scotty软件包()的组件之一。tkined是一个用Tcl脚本语言编写的、集成了许多种网络管理工具的网络编辑器,可以用它来侦察IP网络。tkined有很好的可扩展性,你可以用它来进行网络侦察活动,还可以把侦察结果绘制成网络地图。虽然它不能用来进行操作系统探查,但它仍能完成本章和第1章中提到过的许多任务。除了tkined工具,Scotty软件包里的其他几种工具也很值得一试。