诸神之眼:Nmap网络安全审计技术揭秘
上QQ阅读APP看书,第一时间看更新

4.3 操作系统指纹扫描作为管理工具

Nmap并不仅仅是为渗透者设计的,它同样可以作为网络管理者的一个利器。利用这款工具,网络管理者可以节省大量的时间和精力,接下来看看操作系统指纹扫描能带来什么好处。下面对一个子网执行如下命令。

    Nmap --O <ip subnet>

或者也可以使用如下的语句。

    Nmap -sV -F --fuzzy  --osscan-guess 目标ip

如果希望通过Nmap准确检测到远程操作系统是比较困难的,这里的-osscan-guess是Nmap的猜测功能选项,猜测认为最接近目标的匹配操作系统类型。看起来这只是一条简单的命令,但是这也可能是一个黑客开始攻击的步骤。可以想象一下,如果黑客利用这条命令就可以简单地发现目标网路中那些老旧的、容易被渗透的系统,另外即使目标使用了全新的操作系统,他们也可以快速地获取目标上那些不安全的应用。这样极大地节省了攻击者渗透进入系统的时间。作为系统的维护者,必须抢在黑客之前发现系统的问题。

事实上,Nmap并没有能力百分之一百地确定目标的操作系统,只能依靠猜测。而有时Nmap无法确定目标具体的操作系统,在这种情况下,Nmap会输出目标系统的TCP/IP指纹文件,并给出各个系统类型的可能性。Nmap也希望我们可以提交这个指纹文件和最终验证的该系统的真实类型,以帮助Nmap更新操作系统指纹数据库。可使用Nmap对http://www.tstc. edu.cn进行扫描,以获取该主机的操作系统类型。

    Nmap -O -F --fuzzy --osscan-guess www.tstc.edu.cn

这个扫描命令的结果如图4-3所示。

图4-3 在对目标进行操作系统类型扫描时产生的系统指纹

在这次扫描中,并没有得到目标系统的准确值,但是却可以看到结果给出了一个TCP/IP fingerprint的值(就是上图中OS后面的所有内容)。

    SCAN(V=7.12%E=4%D=9/2%OT=80%CT=7%CU=31290%PV=N%DS=4%DC=I%G=Y%TM=57C9147B
    P=i686-pc-windows-windows)
    SEQ(SP=102%GCD=1%ISR=10C%TI=Z%CI=Z%II=I%TS=7)
    OPS(O1=M5B4ST11%O2=M5B4ST11%O3=M5B4NNT11%O4=M5B4ST11%O5=M5B4ST11%O6=M5B4 ST11)
    WIN(W1=2DA0%W2=2DA0%W3=2DA0%W4=2DA0%W5=2DA0%W6=2DA0)
    ECN(R=Y%DF=Y%T= 40%W=3354%O=M5B4NNS%CC=Y%Q=)
    T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)
    T2(R= N)
    T3(R=N)
    T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
    T5(R=Y%DF=Y%T=40%W= 0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
    T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
    T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
    U1(R=Y%DF=N%T=40%IPL=164%UN =0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
    IE(R=Y%DFI=N%T=40%CD=S)

下面详细介绍一下这个输出的意义。

首先,这个输出并非一次扫描的结果,而是多次扫描的结果,这些扫描包括SCAN、SEQ、OPS、WIN、ECN、T1~T7、U1和IE。

每一次扫描的结果又都使用%作为分隔符,例如T1扫描的结果就是(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)。有的扫描内容可能为空,例如RD=0,表示RD的结果就是0,即并没有得到什么实际内容。测试结果必须完全匹配操作系统指纹的定义,这样才能与指纹数据库中的条目进行匹配。像T2(R= N)中的R=N表示这次测试没有任何返回结果。

下面将这个输出的结果分解成多个块来分析。

    SCAN(V=7.12%E=4%D=9/2%OT=80%CT=7%CU=31290%PV=N%DS=4%DC=I%G=Y%TM=57C9147B
    P=i686-pc-windows-windows)

这一行表示当前进行扫描使用的Nmap版本以及一些其他的相关本地信息。例如:

V=7.12表示当前使用的Nmap的版本为7.12。

D=9/2给出了扫描的日期。

OT=80%CT=7指出了在指纹识别过程中使用的TCP端口。

CU=31290指出了在指纹识别过程中使用的UDP端口。

PV=N指出了目标IP地址是否属于私有地址。

DS=4指出了从Nmap所在主机到目标主机的距离跳数。

G=Y指出了这次扫描的结果较好,可以提交给iNSEcure. Org。

TM=57C9147B指出了扫描所消耗的时间。

P=i686-pc-windows-windows指出了Nmap所在主机的操作系统类型。

下面检查一下SEQ、OPS、WIN和T1这些行,这些结果是通过向目标上开放的TCP端口发送一组非常巧妙的探针而得到的。

SEQ测试的结果如下。

    SEQ(SP=102%GCD=1%ISR=10C%TI=Z%CI=Z%II=I%TS=7)

SP=102给出了TCP的初始序列号(ISN)。

GCD=1给出了TCP的增量。

ISR=10C表示ISN的序率。

TI=Z给出了SEQ探针回应数据包中IP头部的ID值。这里面的Z表示所有IP数据包中的id字段都设置为0。

II = I给出了ICMP探针回应数据包中的IP头部的ID值。

TS = 7给出了返回的TCP数据包的时间戳的信息。

OPS测试的结果如下。

    OPS(O1=M5B4ST11%O2=M5B4ST11%O3=M5B4NNT11%O4=M5B4ST11%O5=M5B4ST11%O6=M5B4 ST11)

O1 = M5B4给出了TCP数据包每次能够传输的最大数据分段。

ST11给出了ACK的可选信息和数据包的时间戳内容。

N表示为空操作。

W0指出了窗口大小。

O2 =M5B4ST11NW0, O3 =M5B4NNT11NW0, O4=M5B4ST11, O5=M5B4ST11, O6=M5B4 ST11这5项的意义与O1相同。

WIN测试的结果如下。

    WIN(W1=2DA0%W2=2DA0%W3=2DA0%W4=2DA0%W5=2DA0%W6=2DA0)

这个测试给出了6个探针返回值的初始化窗口大小:

W1=2DA0

W2=2DA0

W3=2DA0

W4=2DA0

W5=2DA0

W6=2DA0

最后看到的一行如下。

    ECN(R=Y%DF=Y%T=40%W=3354%O=M5B4NNS%CC=Y%Q=)

R = Y表示目标是否对我们进行了回应。

DF=Y表示IP数据包的分段标志位是否被设置。

T = 40给出了回应数据包IP中的TTl值。

W = 3354表示TCP初始化窗口的大小信息。

O = M5B4NNS表示TCP选项的信息。

CC = Y给出了目标的拥塞控制能力。Y表示这里的目标支持ECN。

下面我们来看一下第二波发送的6个TCP数据包的回应。

第一个TCP探针的回应如下。

    T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS%RD=0%Q=)

Nmap发送的第二个探针是一个设置了DF位的内容为空的数据包。这个数据包的窗口大小为128,回应如下。

    T2(R= N)

Nmap发送的第三个探针是一个设置了FIN、URG、PSH以及SYN标识的数据包,这个数据包的大小为256,回应如下。

    T3(R = N)

Nmap发送的第四个探针是一个设置了ACK位的TCP数据包,这个包同样也设置了DF位,大小为1024,回应如下。

    T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)

Nmap发送的第五个探针是一个窗口大小为31337的数据包,回应如下。

    T5(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)

Nmap发送的第六个数据包和第四个数据包十分相似,只是窗口大小为32768,而且这个数据包通常是发往关闭的端口,回应如下。

    T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)

Nmap发送的第七个数据包设置了FIN、URG和PSH标志位。这个探针同样发往一个关闭的端口,窗口大小为65535,回应如下。

    T7(R=Y%DF=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)

U1的结果是根据UDP数据包探针返回的结果,这个探针的数据部分是300个C字符,回应如下。

    U1(R=Y%DF=N%T=40%IPL=164%UN =0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)

IE探针基于ICMP协议,由两个探针组成:

    IE(R=Y%DFI=N%T=40%CD=S)

至此已经完成了操作系统指纹的分析,这时你可能会有一个疑问,该如何才能应用到这些知识呢?

当在单位中对设备进行管理的时候,网络中可能存在各种型号的交换机、路由器、存储设备、服务器等,可以对这些设备的操作系统指纹信息进行处理,然后改善你的操作系统指纹信息数据库。利用这些信息,可以更好地对网络进行管理。例如,所在单位的某个部门申请了50台服务器,而且声称这些设备都在使用中,如果想了解设备的确切使用情况,就可以使用Nmap进行扫描,也许真正的使用率可能连一半都不到。

有时,单位为了确保安全会及时地更新操作系统,但是有时有些管理人员为了图方便却还在使用老旧的操作系统,例如Windows 2000。通过Nmap的操作系统检测功能,就可以轻而易举地发现这些系统。

如果将新的操作系统指纹信息提交到http://iNSEcure.org/Nmap/submit/,也许在下一个版本的相应的数据库中就会出现你这次提交的设备信息。