购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 端口扫描

2.3.1 端口扫描技术基本原理

对于位于网络中的计算机系统来说,一个端口就是一个潜在的通信通道,也就是一个入侵通道。对目标计算机进行端口扫描,我们能得到许多有用的信息,从而发现系统的安全漏洞。通过端口扫描可以使用户了解系统目前向外网提供了哪些服务,从而为用户管理网络提供了参考信息。

从技术原理上来说,端口扫描向目标主机的TCP/UDP服务端口发送探测数据包,并记录目标主机的响应。通过分析响应来判断服务端口是打开还是关闭,就可以得知端口提供的服务或信息。端口扫描也可以通过捕获本地主机或服务器的流入/流出IP数据包来监视本地主机的运行情况,不仅能对接收到的数据进行分析,而且能够帮助用户发现目标主机的某些内在的弱点,而不会提供进入一个系统的详细步骤。一般说来,端口扫描的目的通常是如下的一项或者多项。

●发现开放端口。发现目标系统上开放的TCP或UDP端口。

●了解主机操作系统信息。端口扫描可以通过操作系统的“指纹”来推测被扫描操作系统或者应用程序的版本等信息。

●了解软件或者服务版本。软件或服务版本可以通过“标志获取”或者应用程序的“指纹”来识别获得。

●发现脆弱的软件版本。识别软件和服务的缺陷,从而有助于发起针对漏洞的攻击。

端口扫描主要有经典的扫描器(全连接)以及SYN(半连接)扫描器。此外,还有秘密扫描等。TCP扫描方式是通过与被扫描主机建立标准的TCP连接,因此这种方式最准确,但是容易被目标主机察觉、记录。SYN方式是通过与目标主机建立半打开连接,这样就不容易被目标主机记录,但是扫描结果会出现漏报,而且在网络状况不好的情况下这种漏报是严重的。

2.3.2 端口扫描技术的主要种类

1.TCP全连接扫描

全连接扫描是TCP端口扫描的基础,现有的全连接扫描包括TCP connect()扫描和TCP反向ident扫描等。

TCP connect()扫描的实现原理是,扫描主机通过TCP/IP协议的三次握手与目标主机的指定端口建立一次完整的连接。连接由系统调用connect开始。如果端口开放,则连接将建立成功。否则,若返回-1,则表示端口关闭。如果建立连接成功,则响应扫描主机的SYN/ACK连接请求,该响应表明目标端口处于监听(打开)的状态。如果目标端口处于关闭状态,则目标主机会向扫描主机发送RST的响应。

反向ident扫描协议允许看到通过TCP连接的任何进程的拥有者的用户名,即使这个连接不是由这个进程开始的。比如,连接到HTTP端口,然后用identd来发现服务器是否正在以root权限运行。这种方法的缺点是只能在和目标端口建立了一个完整的TCP连接后才能看到。

2.TCP半连接(SYN)扫描

若端口扫描没有完成一个完整的TCP连接,在扫描主机和目标主机的一个指定端口建立连接的时候只完成了前两次握手,在第三次握手时,扫描主机中断了本次连接,使连接没有完全建立起来,这样的端口扫描称为半连接扫描,也称为间接扫描。现有的半连接扫描有TCP SYN扫描和IP ID头dumb扫描等。

TCP SYN扫描的优点在于,即使日志中对扫描有所记录,但是尝试进行连接的记录也要比全扫描少得多。其缺点是在大部分操作系统下,发送主机需要构造适用于这种扫描的IP包,在通常情况下,构造SYN数据包需要超级用户或者授权用户访问专门的系统调用。

3.UDP扫描

在UDP扫描中不使用工具来设置特定的状态标志。如果源UDP包的响应,即ICMP端口不可达消息,则说明端口已经关闭。UDP扫描的过程比较长,且速度比较慢。

4.标志获取扫描

标志获取扫描是指连接到系统的特定端口,检查和监听该端口的应用软件的标志的过程。它可以利用TCP端口连接来获得特定系统上运行的软件和程序版本信息。在实际的应对过程中,系统管理员可能会更改或者删除相关的标志,从而隐藏被监听的应用程序。

5.包分片

许多端口扫描器都支持包分片功能。这个功能有助于包穿透包过滤设备并逃避入侵检测系统的监测。包分片技术将TCP或者UDP包头分成多个包,增加访问控制设备检测端口扫描信息的难度。当前大多数防火墙和IDS实现都能在评估原始IP包前先对其进行重组,这可以阻挡包分片的企图,只有一些旧的防火墙和IDS设备缺乏这种功能。

6.欺骗扫描

Nmap和其他一些端口扫描工具都有“欺骗”功能,能在直接扫描的同时进行一个或者多个欺骗性的扫描。由于这种欺骗性通常掩盖了真实的源地址,并与真实的扫描同时进行,因此目标系统追踪扫描来源的难度大大增加。

7.标识扫描

标识扫描用来识别与特定TCP连接绑定的用户账户,它可以通过与113号TCP端口进行通信来完成,该端口会返回该连接所有者的身份信息。这种扫描仅仅对于运行ident服务的系统有效。它也可以用于识别使用特权账号(例如root)的服务。

8.FTP反弹扫描

FTP反弹扫描利用FTP服务器进行欺骗扫描,它利用的是FTP协议对代理FTP连接的支持这一特性。利用FTP服务器作为反弹“代理”,黑客能隐藏源扫描器的原始地址。

9.源端口扫描

端口扫描工具中的源端口扫描允许扫描设置静态的TCP或者UDP源扫描端口,以避开包过滤访问控制设备。用于扫描的源端口通常与常用服务的端口相关联(如HTTP、DNS、SMTP和FTP等),这些端口经常处于访问控制设备的许可范围之内。

10.主机扫描

主机扫描的目的是确定在目标网络上的主机是否可达。这是信息收集的初级阶段,其效果直接影响到后续的扫描。它主要包括以下几类。

● ICMP Echo扫描。

● ICMP Sweep扫描。

● Broadcast ICMP扫描。

● Non-Echo ICMP扫描。

(1)ICMP Echo扫描和ICMP Sweep扫描

Ping的实现机制在判断在一个网络上主机是否开机时非常有用。向目标主机发送ICMP Echo Request(type 8)数据包,等待回复的ICMP Echo Reply(type 0)包。如果能收到,则表明目标系统可达,否则表明目标系统已经不可达或发送的包被对方的设备过滤了。该机制的优点是简单,系统支持,缺点是很容易被防火墙限制。在实际使用的过程中,可以通过并行发送,同时探测多个目标主机,以提高探测效率(ICMP Sweep扫描)。

(2)Broadcast ICMP扫描

该扫描机制将ICMP请求包的目标地址设为广播地址或网络地址,则可以探测广播域或整个网络范围内的主机。该机制的缺点是只适合于UNIX/Linux系统,而Windows操作系统会忽略这种请求包。这种扫描方式容易引起广播风暴,从而占用大量的网络资源。

(3)Non-Echo ICMP扫描

该扫描机制指的是除了上述3种之外的一些其他ICMP类型包,它们也可以用于对主机或网络设备的探测。

● Stamp Request(type 13)。

● Reply(type 14)。

● Information Request(type 15)。

● Reply(type 16)。

● Address Mask Request(type 17)。

● Reply(type 18)。

11.操作系统“指纹”扫描

根据各个操作系统在TCP/IP协议栈实现上的不同特点,采用黑盒测试方法,通过研究其对各种探测的响应形成识别指纹(footprint),进而识别目标主机运行的操作系统。根据采集指纹信息的方式,它又可以分为被动扫描和主动扫描两种方式。

(1)被动扫描

通过抓包程序(如TCPDUMP、Sniffer和Wireshark等)收集数据包,再对数据包的不同特征(TCP Window Size、IP TTL、IP TOS和DF位等参数)进行分析来识别操作系统。被动扫描基本不具备攻击特征,具有很好的隐蔽性,但其实现依赖扫描主机所处的网络拓扑结构。它和主动探测相比较,具有速度慢、可靠性不高等缺点。

(2)主动扫描

主动扫描采用向目标系统发送构造的特殊包,并监控其应答的方式来识别操作系统类型。它具有速度快、可靠性高等优点,但同样依赖于目标系统网络拓扑结构和过滤规则。

主动扫描主要包括如下几种技术。

● FIN探测。发送一个FIN包给一个打开的端口,一般的行为是不响应的。

● BOGUS标记探测。设置一个未定义的TCP“标记”在SYN包的TCP头里。Linux系统到内核2.0.35版本之前都在回应中保持这个标记。

● TCP ISN取样。其原理是通过在操作系统对连接请求的回应中寻找TCP连接初始化序列号的特征。

●不分段位。许多操作系统开始在送出的一些包中设置IP的“Don’t Fragment”(不分段)位。

● TCP初始化窗口。检查返回包的窗口大小。例如,queso和Nmap保持对窗口的精确跟踪,因为它对于特定OS基本上是常数。

● ACK值。在不同实现中的一些情况下,ACK域的值是不同的。如果发送了一个FIN|PSH|URG到一个关闭的TCP端口。大多数实现会设置ACK为发送的初始序列数,而Windows会将回送序列数加1。

● ICMP错误信息终结。一些操作系统跟踪限制各种错误信息的发送率。例如,Linux内核限制目的不可达消息的生成每4秒钟80个。一种测试方法是发送一串包到一些随机的UDP端口并计数收到的不可达消息。

● ICMP消息引用。ICMP错误消息可以引用一部分引起错误的源消息。对一个端口不可达消息,基本上所有实现只送回IP请求头和8个字节。然而,Solaris送回的稍多,Linux送回的更多。

● SYN洪水限度。如果收到过多的伪造SYN数据包,一些操作系统会停止新的连接尝试。许多操作系统只能处理8个包。

2.3.3 快速安装Nmap

1.Nmap简介

Nmap是一个网络探测和安全扫描程序,系统管理者可以使用这个软件扫描大型的网络,获取主机正在运行以及提供什么服务等信息。Nmap支持很多扫描技术,例如,UDP、TCP connect()、TCP SYN(半开扫描)、FTP代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)和Null扫描。Nmap还提供了一些高级的特征,例如,通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行Ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。

为了提高Nmap在non-root状态下的性能,软件的设计者付出了很多的努力。但是,一些内核界面(如raw socket)需要在root状态下使用。所以应该尽可能在root状态下使用Nmap。

Nmap运行通常会得到被扫描主机端口的列表。Nmap总会给出Well Known端口的服务名(如果可能)、端口号、状态和协议等信息。每个端口的状态有open、filtered和unfiltered。

● open状态意味着目标主机能够在这个端口使用accept()系统调用接受连接。

● filtered状态表示防火墙、包过滤和其他的网络安全软件掩盖了这个端口,禁止Nmap探测其是否打开。

● unfiltered状态表示这个端口关闭,并且没有防火墙/包过滤软件来隔离Nmap的探测企图。通常情况下,端口的状态基本都是unfiltered状态,只有在大多数被扫描的端口处于filtered状态下,才会显示处于unfiltered状态的端口。

根据使用的功能选项,Nmap也可以报告远程主机的一些特征,如使用的操作系统、TCP序列、运行绑定到每个端口上的应用程序的用户名、DNS名、主机地址是否是欺骗地址,以及其他一些信息。

2.快速安装

在使用之前,我们需要下载该软件的源码包进行安装。其下载网址为http://linux.softpedia.com/get/System/Networking/Nmap-184.shtml。下载完成后,用户执行如下安装命令即可,这里以nmap-5.00.gtz版本为例进行介绍。

①解压缩软件包。

②切换到安装目录。

③使用configure命令生成make文件。

④编译源代码。

⑤安装相关模块。

2.3.4 使用Nmap确定开放端口

功能选项可以组合使用。一些功能选项只能在某种扫描模式下使用。Nmap会自动识别无效或者不支持的功能选项组合,并向用户发出警告信息。使用Nmap,用户可以参考使用如下一些常用的选项。

1.主要扫描类型选项

(1)—sT

TCP connect()扫描是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听,connect()就会成功返回,否则说明这个端口是不可达的。这项技术最大的优点是,用户不需要root权限。任何Linux用户都可以自由地使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。

(2)—sS

TCP同步扫描(TCP SYN),因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。用户可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN/ACK(响应)包,就表示目标端口正在监听。如果返回RST数据包,就表示目标端口没有监听程序。如果收到一个SYN/ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接,这实际上是由我们的操作系统内核自动完成的。这项技术最大的好处是,很少有系统能够把这记录到系统日志中。不过,用户需要root权限来定制SYN数据包。

(3)—sF、—sX、—sN

秘密FIN数据包扫描、圣诞树(Xmas Tree)和空(Null)扫描模式在即使SYN扫描都无法确定的情况下使用。一些防火墙和包过滤软件能对发送到被限制端口的SYN数据包进行监视,而且有些程序(如synlogger和courtney)能够检测那些扫描。这些扫描方式的理论依据是,关闭的端口需要对用户的探测包回应RST包,而打开的端口必需忽略有问题的包。FIN扫描使用暴露的FIN数据包来探测,而圣诞树扫描打开数据包的FIN、URG和PUSH标志。但微软公司决定忽略这个标准,所以这种扫描方式对Windows 95/NT无效。不过,从另外的角度来讲,可以使用这种方式来分别两种不同的平台。如果使用这种扫描方式可以发现打开的端口,用户就可以确定目标主机运行的不是Windows系统。如果使用—sF、—sX或者—sN扫描显示所有的端口都是关闭的,而使用SYN扫描显示有打开的端口,用户就可以确定目标主机可能运行的是Windows系统。现在这种方式没有什么太大的用处,因为Nmap有内嵌的操作系统检测功能,而且其他几个系统使用和Windows同样的处理方式,包括Cisco、BSDI、HP-UX、MYS和IRIX。在应该抛弃数据包时,以上这些系统都会从打开的端口发出复位数据包。

(4)—sP

有时用户只是想知道此时网络上哪些主机正在运行,可以采用Ping扫描。通过向用户指定的网络内的每个IP地址发送ICMP Echo请求数据包,Nmap就可以完成这项任务。如果主机正在运行,就会作出响应。但一些站点会主动阻塞ICMP Echo请求数据包。在默认的情况下,Nmap也能向80端口发送TCP ACK包,如果用户收到一个RST包,就表示主机正在运行。Nmap还可以发送一个SYN包,然后等待一个RST或者SYN/ACK包。对于非root用户,Nmap使用connect()方法。在默认的情况下(root用户),Nmap并行使用ICMP和ACK技术。需要注意的是,Nmap在任何情况下都会进行Ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果用户只想知道目标主机是否运行,而不想进行其他扫描,才会用到这个选项。

(5)—sU

如果用户想知道在某台主机上提供哪些UDP服务,可以使用UDP扫描方法。Nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果用户收到端口不可达的ICMP消息,端口就是关闭的,否则就假设它是打开的。

(6)—sA

ACK扫描是一项高级的扫描方法,通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,Nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。

(7)—sW

对滑动窗口的扫描是一项高级扫描技术,它非常类似于ACK扫描,它可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。这些系统包括某些版本的AIX、Amiga、BeOS、BSDI、Cray、Tru64 UNIX、DG/UX、OpenVMS、Digital UNIX、OpenBSD、OpenStep、QNX、Rhapsody、SunOS 4.x、Ultrix、VAX、VxWorks。

(8)—sR

RPC扫描方法与Nmap的其他不同的端口扫描方法结合使用。选择所有处于打开状态的端口,然后向它们发出SunRPC程序的Null命令,以确定它们是否是RPC端口,如果是该端口,就确定是哪种软件及其版本号。因此,用户能获得防火墙的一些信息。目前诱饵扫描还不能与RPC扫描结合使用。

2.通用扫描选项

(1)—P0

在扫描之前,不必Ping主机。有些网络的防火墙不允许ICMP Echo请求穿过,使用这个选项可以对这些网络进行扫描。例如,在扫描microsoft.com站点时,用户应该一直使用—P0或者—PT 80选项。

(2)—PT

扫描之前,使用TCP Ping确定哪些主机正在运行。Nmap不是通过发送ICMP Echo请求包,然后等待响应来实现这种功能,而是向目标网络(或者单一主机)发出TCP ACK包,然后等待回应。如果主机正在运行,就会返回RST包。只有在目标网络/主机阻塞了Ping包,而允许用户对其进行扫描时,这个选项才有效。对于非 root用户,可以使用connect()系统调用来实现这项功能。使用—PT <端口号>来设定目标端口。其默认的端口号是80,因为这个端口通常不会被过滤。

(3)—PS

对于root用户来说,这个选项让Nmap使用SYN包而不是ACK包对目标主机进行扫描。如果主机正在运行,就返回一个RST包(或者一个SYN/ACK包)。

(4)—PI

设置这个选项,让Nmap使用真正的Ping(ICMP Echo请求)来扫描目标主机是否正在运行。使用这个选项让Nmap发现正在运行的主机的同时,Nmap也会对用户的直接子网广播地址进行观察。若直接子网广播的报文中源地址为一些外部可达的IP地址,则路由设备可把外部的包转换为一个内部的IP广播包,然后向一个计算机子网发送。这些IP广播包应该删除,否则会造成拒绝服务攻击(如Smurf)。

(5)—PB

这是默认的Ping扫描选项。它使用ACK(—PT)和ICMP(—PI)两种扫描并行扫描。如果防火墙只能过滤其中一种包,用户使用这种方法就能够穿过防火墙。

(6)—O

这个选项激活对TCP/IP指纹特征的扫描,获得远程主机的标志。换句话来说,Nmap使用一些技术检测目标主机操作系统网络协议栈的特征。Nmap使用这些信息建立远程主机的指纹特征,把它和已知的操作系统指纹特征数据库进行比较,就可以知道目标主机操作系统的类型。

(7)—I

这个选项可以打开Nmap的反向标志扫描功能。Dave Goldsmith 于1996年向bugtap发出邮件时注意到这个协议,ident协议允许使用TCP连接给出任何进程拥有者的用户名,即使这个进程并没有初始化连接。例如,用户可以连接到HTTP端口,接着使用identd确定这个服务器是否由root用户运行。这种扫描只能在同目标端口建立完全的TCP连接时(例如,—sT扫描选项)才能成功。使用—I选项时,远程主机的 identd精灵进程就会查询在每个打开的端口上监听的进程的拥有者。显然,如果远程主机没有运行identd程序,这种扫描方法是无效的。

(8)—f

这个选项可以让Nmap使用碎片IP数据包发送SYN、FIN、XMAS和Null。使用碎片数据包增加包过滤和入侵检测系统的难度,使其无法知道用户的企图。因此,在Nmap中使用了24个字节的碎片数据包。虽然包过滤器和防火墙不能防这种方法,但是有很多网络出于性能上的考虑,会禁止数据包的分片。注意,这个选项不能在所有的平台上使用。它在Linux、FreeBSD、OpenBSD以及其他一些UNIX系统中能够很好地工作。

(9)——v

冗余模式。建议使用这个选项,它会给出扫描过程中的详细信息。使用这个选项,用户可以得到事半功倍的效果。使用—d选项,用户可以得到更加详细的信息。

(10)—h

快速参考选项。

(11)—oN

把扫描结果重定向到一个可读的logfilename文件中。

(12)—oM

把扫描结果重定向到logfilename文件中,这个文件使用主机可以解析的语法。用户可以使用—oM—来代替logfilename,这样输出就被重定向到标准输出stdout。在这种情况下,正常的输出将被覆盖,错误信息可以输出到标准错误stderr。需要注意的是,如果同时使用了—v选项,在屏幕上将会显示出其他的信息。

(13)—resume

某个网络扫描可能由于control-C或者网络损失等原因被中断,用户使用这个选项可以接着以前的扫描进行新的扫描。logfilename是被取消扫描的日志文件,它必须是可读形式或者主机可以解析的形式。而且接着进行的扫描不能增加新的选项,只能使用与被中断的扫描相同的选项。Nmap会接着日志文件中的最后一次成功扫描进行新的扫描。

(14)—iL

从inputfilename文件中读取扫描的目标。在这个文件中要有一个主机或者网络的列表,由空格键、制表键或者Enter键作为分隔符。如果使用-iL-,Nmap就会从标准输入stdin读取主机名字。

(15)—iR

让Nmap自己随机挑选主机进行扫描。

(16)—p <端口范围>

这个选项让用户选择要进行扫描的端口号的范围。例如,—p 23表示只扫描目标主机的23号端口。—p 20- 30,139,60000-表示扫描20号~30号端口,139号端口以及所有大于60 000的端口。在默认情况下,Nmap扫描从1~1024号端口以及nmap-services文件(如果使用RPM软件包,一般在/Usr/Share/Nmap/目录中)中定义的端口列表。

(17)—F

快速扫描模式,只扫描在nmap-services文件中列出的端口。显然,这比扫描所有的端口(65 535个)要快。

(18)—D

使用诱饵扫描方法对目标网络/主机进行扫描。如果Nmap使用这种方法对目标网络进行扫描,那么从目标主机/网络的角度来看,扫描好像从其他主机发出的一样。从而,即使目标主机的IDS(入侵检测系统)对端口扫描发出报警,它们也不可能知道哪个是真正发起扫描的地址。这种扫描方法可以有效地对付如路由跟踪、response-dropping等积极的防御机制,能够很好地隐藏用户的IP地址。每个诱饵主机名用逗号分隔开。用户也可以使用ME选项,它代表用户自己的主机,让它和诱饵主机名混杂在一起。如果用户把ME放在靠后的位置,一些端口扫描检测基本不会显示用户的IP地址。如果用户不使用ME选项,Nmap会把用户的IP地址随机夹杂在诱饵主机之中。需要注意的是,用户用来作为诱饵的主机应该正在运行或者用户只是偶尔向目标主机发送SYN数据包。如果在网络上只有一台主机运行,目标主机将很轻松就会确定是哪台主机进行的扫描。或许,用户还要直接使用诱饵主机的IP地址而不是其域名,这样诱饵网络的域名服务器的日志上就不会留下关于用户的记录。还要注意,一些企业部署的防端口扫描检测软件会拒绝路由试图进行端口扫描的主机,从而使得进行端口扫描的主机的流量无法到达被扫描网络。因而,用户需要让目标主机和一些诱饵断开连接。如果诱饵是目标主机的网关或者就是自己,就会给目标主机造成很大的影响。所以,用户需要慎重使用这个选项。诱饵扫描既可以在起始的Ping扫描下使用,也可以在真正的扫描状态下使用。它也可以和—O选项组合使用。使用太多的诱饵扫描可以减缓用户的扫描速度,甚至可能造成扫描结果不正确。同时,有些ISP会把用户的欺骗包过滤掉。现在大多数的ISP不会对此进行限制。

(19)—S <IP_Address>

在一些情况下,Nmap可能无法确定用户的源地址。此时,就可以使用这个选项给出用户的IP地址。在欺骗扫描时,用户也可以使用这个选项。使用这个选项可以让目标主机认为是其他的主机对自己进行扫描。

(20)—e

告诉Nmap使用哪个接口发送和接收数据包。Nmap能够自动对此接口进行检测,如果无效,就会通知用户。

(21)—g

设置扫描的源端口。一些简单的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接。显然,如果攻击者把源端口修改为20或者53,就可以摧毁防火墙的防护。在使用UDP扫描时,先使用53号端口。而使用TCP扫描时,先使用20号端口。注意,只有在能够使用这个端口进行扫描时,Nmap才会使用这个端口。例如,如果用户无法进行TCP扫描,Nmap会自动改变源端口,即使用户使用了—g选项。对于一些扫描,使用这个选项会造成性能上的损失。

(22)—r

告诉Nmap不要打乱被扫描端口的顺序。

(23)—randomize_hosts

使Nmap在扫描之前,打乱每组扫描中的主机顺序,Nmap每组可以扫描2 048台主机。这样,可以使扫描更不容易被网络监视器发现,尤其和--scan_delay 选项组合使用,更能有效不被发现。

(24)—M

设置进行TCP connect()扫描时,最多使用多少个套接字进行并行的扫描。使用这个选项可以降低扫描速度,避免远程目标主机死机。

3.高级设置选项

Nmap在运行时通常能够很好地根据网络特点进行调整。扫描时,Nmap会尽量减少被目标主机检测到的机会,同时尽可能加快扫描速度。然而,Nmap默认的适时策略有时候不太适合用户的目标。使用下面这些选项,可以有效地控制Nmap的扫描时间。

(1)—T

设置Nmap的扫描策略,主要有如下几种。

● Paranoid:为了避开IDS的检测,使扫描速度极慢,Nmap串行所有的扫描,每隔至少5分钟发送一个包。

● Sneaky:与Paranoid基本相同,只是数据包的发送间隔是15秒。

● Polite:不增加太大的网络负载,避免目标主机死机,串行每个探测,并且使每个探测有0.4 秒的间隔。

● Normal:它是Nmap默认的选项,在不是网络过载或者主机/端口丢失的情况下,尽可能快速地扫描。

● Aggressive:设置5分钟的超时限制,使对每台主机的扫描时间不超过5分钟,并且使对每次探测回应的等待时间不超过1.5秒。

● Insane:只适合快速的网络或者用户不在意丢失某些信息,每台主机的超时限制是75秒,对每次探测只等待0.3秒。

用户也可以使用数字来代替上述这些模式,例如,—T 0相当—T Paranoid,—T 5等于—T Insane。并且,上述这些模式不能和下面介绍的选项组合使用。

(2)--host_timeout

设置扫描一台主机的时间,以毫秒为单位。在默认的情况下,没有超时限制。

(3)--max_rtt_timeout

设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制,就会重传或者超时。其默认值大约为9 000毫秒。

(4)--min_rtt_timeout

当目标主机的响应很快时,Nmap就会缩短每次探测的超时时间。这样虽然可以提高扫描的速度,但是可能丢失某些响应时间比较长的包。使用这个选项,可以让Nmap对每次探测至少等待用户指定的时间,以毫秒为单位。

(5)--initial_rtt_timeout

设置初始探测的超时值。一般这个选项只在使用—P0选项扫描有防火墙保护的主机时才有用。其默认值是6 000毫秒。

(6)--max_parallelism

设置最大的并行扫描数量。--max_parallelism 1表示同时只扫描一个端口。这个选项对其他的并行扫描也有效,例如,Ping Sweep和RPC scan。

(7)--scan_delay

设置在两次探测之间,Nmap必须等待的时间。这个选项主要用于降低网络的负载。

4.扫描实施第一步:发现活动主机

使用Nmap扫描整个网络寻找目标,已确定目标主机是否处于连通状态。通过使用—sP选项进行Ping扫描。在默认的情况下,Nmap给每个扫描到的主机发送一个ICMP Echo和一个TCP ACK,主机对任何一种的响应都会被Nmap得到,扫描速度非常快,在很短的时间内可以扫描一个很大的网络。该选项使用如下所示。

通过该扫描,可以发现该公司网络中有125台主机是活跃的,下一步就是要进行更详细的扫描,确定这些主机到底有些什么活动端口。

5.扫描实施第二步:扫描端口扫描

通常情况下,当Nmap的使用者确定了网络上运行的主机处于连通状态,其下一步的工作就是进行端口扫描,且端口扫描使用—sT参数。如下面结果如示。

我们可以清楚地看到,端口扫描采用多种方式对网络中主机的TCP活动端口进行了全面的扫描,由于扫描的主机数太多(125台),上面仅给出了2台主机的TCP端口情况,即主机10.1.4.1和主机10.1.4.11。主机10.1.4.1打开的端口非常多,网络服务也相对比较丰富,并且从IP地址的构成来看,该主机有可能是网关(一般网关的IP地址设置为×.×.×.1),于是,小王就锁定了这台主机进行后续的扫描。

6.扫描实施第三步:主机操作系统识别

通常一个入侵者可能对某个操作系统的漏洞很熟悉,能很轻易地进入此操作系统的计算机。一个常见的选项是TCP/IP上的指纹,带有—O选项决定远程操作系统的类型。这可以和一个端口扫描结合使用,但不能和Ping扫描结合使用。Nmap通过向主机发送不同类型的探测信号,缩小查找的操作系统的范围。如下面的扫描结果所示。

从上述扫描结果可以看到,10.1.4.1这台主机运行的是Windows系列的操作系统,并且提供了一些比较常用的网络服务。

7.扫描实施第四步:扫描总结归纳

通过上述3步的扫描实施,小王逐步总结出了如下几点结论和经验。

●端口扫描的步骤是先发现活动主机,然后发现活动主机的活动端口,从而确定需要重点关注或者需要供给的主机,一般这些主机是服务端口开得多的主机。然后对重点关注的主机实行操作系统扫描,从而确定其操作系统类型,以便从操作系统层面来寻找突破口。在一般情况下,如果是Windows操作系统,那么就有比较大的攻击或者安全维护的空间。

●除了上述几个常用的扫描选项外,在扫描过程中还需要综合采用其他选项,以保证扫描不被对方发现,否则对于具有丰富管理经验的管理员来说,很容易发现这种扫描行为,从而引起反追踪等。

●在使用Nmap进行扫描后,对于它提供的开放端口的号及其对应的服务名称,我们还可以使用表2-1进行比较对照,以更好地确认端口及其对应的开放服务,从而为下一步工作做好准备。

表2-1 常用端口及对应服务列表

续表

续表

续表

续表

续表

续表 V+xsd9gmXCCDP0/VYCldjALEWVWzpW3k+x3NDTnOLy5KFwkYfeX6dR3effXeIor8

点击中间区域
呼出菜单
上一章
目录
下一章
×