网络扫描作为网络信息收集中最主要的一个环节,其主要是探测目标网络,找出尽可能多的连接目标,然后进一步探测获取目标系统的开放端口、操作系统类型、运行的网络服务、存在的安全弱点等信息。这些工作可以通过网络扫描器来完成。
扫描器一般被认为是黑客进行网络攻击的工具。扫描器对于攻击者来说是必不可少的工具,但它也是网络管理员在网络安全维护中的重要工具。因为扫描软件是系统管理员掌握系统安全状况的必备工具,是其他工具所不能替代的。例如,一个系统存在“ASP源代码暴露”的漏洞,防火墙发现不了这些漏洞,入侵检测系统也只有在发现有人试图获取ASP文件源代码的时候才报警,而通过扫描器,可以提前发现系统的漏洞,打好补丁,做好防范。
因此,扫描器是网络安全工程师修复系统漏洞的主要工具。另外,扫描漏洞特征库的全面性是衡量扫描软件功能是否强大的一个重要指标。漏洞特征库越全面、越强大,扫描器的功能就越强大。
扫描器的定义比较广泛,不限于一般的端口扫描和针对漏洞的扫描,还可以是针对某种服务、某个协议的扫描,端口扫描只是扫描系统中最基本的形态和模块。扫描器的主要功能列举如下。
(1)检测主机是否在线。
(2)扫描目标系统开放的端口,有的还可以测试端口的服务信息。
(3)获取目标操作系统的敏感信息。
(4)破解系统口令。
(5)扫描其他系统的敏感信息。例如,CGI Scanner、ASP Scanner、从各个主要端口取得服务信息的Scanner、数据库Scanner及木马Scanner等。
一个优秀的扫描器能检测整个系统各个部分的安全性,能获取各种敏感的信息,并能试图通过攻击观察系统反应等。扫描的种类和方法不尽相同,有的扫描方式甚至相当怪异,且很难被发觉,却相当有效。
目前扫描器的类型已经有不少,有的在磁盘操作系统(Disk Operating System,DOS)下运行,有的则提供了图形用户界面(Graphical User Interface,GUI)。表2-1所示为一些常用的扫描器。
表2-1 一些常用的扫描器
扫描器的工作原理是向目的主机发送数据包,根据对方反馈的信息来判断对方的操作系统类型、开发端口、提供的服务等敏感信息。首先要根据网络协议设置特定的数据包,为了更好地理解端口扫描器的实现原理,下面先介绍OSI模型和TCP/IP栈,如图2-5所示。
图2-5 OSI模型和TCP/IP栈
探测目的主机是否存活主要使用ICMP,判断端口状态涉及的是TCP与UDP,其他漏洞扫描涉及的是应用层协议。
下面简要介绍一下TCP数据报的内容,其格式如图2-6所示,其主要由源端口号、目的端口号、顺序号与确认号等组成,和端口扫描联系比较多的就是标志位。
图2-6 TCP数据报的格式
TCP的标志位有6bit,每个bit作为一个标志。
(1)SYN标志(同步标志):用来建立连接,让连接双方同步序列号。如果SYN=1,而ACK=0,则表示该数据报为连接请求;如果SYN=1,而ACK=1,则表示接收连接。
(2)ACK标志(确认标志):如果为1,则表示数据报中的确认号是有效的;否则,数据报中的确认号无效。
(3)URG标志(紧急数据标志):如果为1,则表示本数据报中包含紧急数据,此时紧急数据指针有效。
(4)PSH标志(推送标志):要求发送方的TCP立即将所有的数据发送给低层的协议,或者要求接收方将所有的数据立即交给上层的协议。该标志的功能实际相当于对缓冲区进行刷新,如同将缓存中的数据刷新或者写入硬盘一样。
(5)RST标志(复位标志):将传输层连接复位到其初始状态,作用是恢复到某个正确状态,以进行错误恢复。
(6)FIN标志(结束标志):作用是释放(结束)TCP连接。
端口扫描是扫描器的基本功能,是对整个系统分析扫描的第一步。每一个被发现的端口都是一个入口,有很多被称为“木马”的后门程序就是在端口上做文章的。
一般而言,端口扫描器根据操作系统的TCP/IP栈实现时对数据报处理的原则来判断端口的信息,大部分操作系统的TCP/IP栈遵循以下原则。
(1)当一个SYN或者FIN数据报到达一个关闭的端口时,TCP丢弃数据报,同时发送一个RST数据报。
(2)当一个SYN数据报到达一个监听端口时,正常的3阶段握手继续,回答一个SYN+ACK数据报。
(3)当一个包含ACK的数据报到达一个监听端口时,数据报被丢弃,同时发送一个RST数据报。
(4)当一个RST数据报到达一个关闭的端口时,RST被丢弃。
(5)当一个RST数据报到达一个监听端口时,RST被丢弃。
(6)当一个FIN数据报到达一个监听端口时,数据报被丢弃。“FIN行为”(关闭的端口返回RST,监听端口丢弃包)在URG和PSH标志位置位时同样发生。所有的URG、PSH和FIN或者没有任何标记的TCP数据报都会引起“FIN行为”。
上面讲述了TCP/IP数据报的格式和建立连接的3次握手过程,以及端口扫描器在TCP/IP的实现细节。这些对后面的学习非常重要。下面以Nmap(Network Mapper)为例,详细介绍Nmap端口扫描器的功能。