网络扫描通过扫描本地主机,能检测主机当前可用的服务及其开放端口,帮助网络管理员查找安全漏洞,查杀木马、蠕虫等危害系统安全的病毒。一些扫描器还封装了简单的密码探测,利用自定义规则的密码生成器来检测过于简单和不安全的密码。
网络扫描一般包括2个阶段:(1)对整个网络扫描一遍,从而找到活动主机(因为许多子网配置得很稀疏,大部分IP地址是空的)。(2)对每个活动主机进行穷尽式的端口扫描。
网络扫描也是网络入侵的基础。一次成功的网络入侵离不开周密的网络扫描。攻击者利用网络扫描探知目标主机的各种信息,根据扫描的结果选择攻击方法以达到目的。因此,若能及时监测、识别网络扫描,就能预防网络攻击。为了得到被扫描主机的信息,网络扫描报文对应的源地址往往是真正的地址,因此监测网络扫描可以定位攻击者。
1 网络扫描原理
网络扫描通过检测目标主机TCP/IP不同端口的服务,记录目标给予的回答。通过这种方法,可以搜集到很多目标主机的各种信息(如是否能用匿名登录,是否有可写的FTP目录,是否能用Telnet等)。在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏洞存在。
在匹配原理上,网络漏洞扫描器一般采用基于规则的匹配技术。根据安全专家对网络系统安全漏洞、黑客攻击案例的分析和系统管理员关于网络系统安全配置的实际经验,形成一套标准的系统漏洞库,然后在此基础上构成相应的匹配规则,由程序自动进行系统漏洞扫描的分析工作。如在对TCP 80端口的扫描过程中,发现/cgi-bin/phf或/cgi-bin/Count.cgi,则根据专家经验以及CGI程序的共享性和标准化,可以推知该WWW服务存在2个CGI漏洞。
1.1 主机在线探测
为了避免不必要的空扫描,在扫描之前一般要先探测主机是否在线。其实现原理和常用的ping命令相似。具体方法是向目标主机发送ICMP报文请求,根据返回值来判断主机是否在线。所有安装了TCP/IP协议的在线网络主机,都会对这样的ICMP报文请求给予答复。该方法不仅能探测主机是否在线,而且能根据ICMP应答报文的TTL(TTL是位于IP首部的生存时间字段)值来粗略分辨出目标主机操作系统,为下一步的扫描工作提供依据。RFC793说明了TCP怎样响应特别的信息包:这些响应基于2个TCP状态,即关闭(CLOSED)和监听(LISTEN)。
RFC793描述了当一个端口在关闭状态时,必须采用下面的规则:(1)任意进入的包含RST标志的信息段(segment)将被丢弃。(2)任意进入的不包含RST标志的信息段(如SYN、FIN和ACK)会导致在响应中回送一个RST。
当一个端口处于监听状态时,将采用下面的规则:(1)任意进入的包含RST标志的信息段将被忽略。(2)任意进入的包含ACK标志的信息段将导致一个RST的响应。
如果SYN位被设置,且进入的信息段不被允许,则将导致一个RST的响应;若进入的信息段被允许,则将导致响应中发送一个SYN|ACK 信息包。
这样,通过2个ACK信息包的发送就可以验证计算机是否处于在线状态。
1.2 端口状态探测
发送1个SYN包到主机端口并等待响应。如果端口打开,则响应必定是SYN|ACK;如果端口关闭,则会收到RST|ACK响应。这个扫描可以称为半打开(half-scan)扫描。如NMAP(Network Mapper)在进行端口状态探测时会发送1个SYN包到主机,如果端口关闭就发送RST信息通知NMAP。但如果NMAP发送SYN信息包到打开状态的端口,端口就会响应SYN|ACK信息包给NMAP。当NMAP探测到SYN|ACK信息包后自动回应RST,并由这个RST断开连接。一般情况下,计算机不会记录这种情况,但对于NMAP来说也已经知道端口是否打开或者关闭。如果被扫描主机安装了防火墙则会过滤掉请求包,使发送者得不到回应,这时就需发送设置了TCP首部中标志位的FIN、PSH和URG位(其中FIN表示发端完成发送任务,PSH表示接收方应该尽快将这个报文段交给应用层,URG表示紧急指针有效)的echo request请求信息包。因为一些配置较差的防火墙允许这些信息包通过。
1.3 操作系统探测
每个操作系统,甚至每个内核修订版本在TCP/IP栈方面都存在微小的差别,这将直接影响对相应数据包的响应。如NMAP提供了一个响应列表,把所接收到的响应与表中的各项响应进行比较,如果能与某种操作系统的响应相匹配,就能识别出被探测主机所运行的操作系统的类型。在进行网络入侵攻击时,了解操作系统的类型是相当重要的,因为攻击者可以由此明确应用何种漏洞,或由此掌握系统存在的弱点。
2 主要扫描技术
2.1 TCP connect扫描
这是最基本的TCP扫描。利用操作系统提供的系统调用connect(),与每一个感兴趣的目标计算机的端口进行连接。如果端口处于侦听状态,则connect()就能成功。否则,该端口是不能用的,即没有提供服务。该技术的优点是响应速度快,并且使用者不需要任何权限。系统中的任何用户都有权利使用该调用。另一个优点就是速度很快。但缺点是容易被发觉,并且易被过滤掉。使用该方法时目标计算机的logs文件会显示一连串的连接和连接时出错的服务消息,并且能很快将连接关闭。
2.2 TCP SYN扫描
TCP SYN扫描是半开放式扫描,扫描程序不必打开一个完全的TCP连接。扫描程序发送的是SYN数据包。返回RST,表示端口没有处于侦听状态;返回SYN/ACK信息表示端口处于侦听状态,此时扫描程序必须再发送一个RST信号来关闭这个连接过程。这种扫描技术的优点是一般不会在目标计算机上留下记录。但这种方法必须要有管理员权限才能建立自己的SYN数据包。通常这个条件很容易满足。
2.3 TCP FIN扫描
有时SYN扫描不够秘密,防火墙和包过滤器就会对一些指定的端口进行监视,并能检测到这些扫描。相反,FIN数据包可能会没有任何麻烦地被放行。这种扫描方法的思想是关闭的端口会用适当的RST来回复FIN数据包;而打开的端口会忽略对FIN数据包的回复。但这种方法和系统的实现有关。有的系统不管端口是否打开,都回复RST,这时这种扫描方法就不适用了。在区分Unix和NT操作系统时,这种方法是有效的。
2.4 IP段扫描
IP段扫描并不是直接发送TCP探测数据包,而是将数据包分成2个较小的IP段。这样就将一个TCP头分成好几个数据包,从而很难探测到过滤器。但必须小心,一些程序在处理这些小数据包时会丢弃。
2.5 TCP反向ident扫描
ident协议(RFC1413)允许看到通过TCP连接的任何进程的拥有者的用户名。例如用户能连接到http端口,然后用identd来发现服务器是否正在以管理员权限运行。这种方法只能在和目标端口建立了完整的TCP连接后才能使用。
2.6 FTP代理间接扫描
FTP协议支持代理(proxy)FTP连接,攻击者可以通过FTP server-PI(协议解释器)使源主机和目标主机建立控制通信连接。然后,请求该server-PI激活一个有效的server -DTP(即数据传输进程)来给其他主机发送信息。因此,攻击者可以用代理服务技术来扫描代理服务器所在网段主机的TCP端口。这样,攻击者就可以绕过防火墙,通过连接到防火墙内部的一个FTP服务器进行端口扫描。该方法的优点是很难被跟踪,能穿过防火墙;其缺点是速度很慢。
2.7 UDP不可达扫描
该方法与前述方法的不同之处在于使用的是UDP协议。UDP协议对数据包的请求不回应,打开的端口对扫描探测不发送确认,关闭的端口也不发送错误数据包。但是许多主机在用户向一个未打开的UDP端口发送数据包时,会返回一个ICMP_PORT_UNREACH错误信息。这样攻击者就能判断哪些端口是关闭的。UDP包和ICMP错误消息都不保证能到达。因此,在扫描时必须在探测包看似丢失时重传。RFC793对ICMP错误消息的产生速率做了规定,因此,这种扫描方法很慢。
当非管理员用户不能直接读取端口且不能到达错误信息时,Linux能间接地在它们到达时通知用户,如对一个关闭的端口的第2个write()调用将失败;在非阻塞的UDP套接字上调用recvfrom()时,如果ICMP出错信息还没有到达,则返回EAGAIN(重试),否则返回ECONNREFUSED(连接被拒绝)。
3 网络扫描检测的实现
因为网络扫描首先需要对整个网络扫描一遍,从而找到活动主机(因为许多子网配置得很稀疏,所以大部分IP地址是空的),然后对每个活动主机进行穷尽式的端口扫描。因此可以设计一个网络陷阱机来检测网络扫描。其原理与实现过程如下。
在网络陷阱机上虚拟多个IP地址,这些地址与需重点保护的主机的IP地址相邻,并且服务与开放端口及需重点保护的主机相同。网络陷阱机与交换机或路由器的映射端口(span port)相连,这样连接就能采集到流经整个网络的数据。
3.1 数据包过滤
数据包过滤的主要目的是缩减数据。为了防止丢包,包过滤只做简单的基于包头内容的过滤(如IP地址、TCP/IP端口、TCP标志位等),去除不关心的网络数据包的数据而只留下其报头,并将其结果存入指定数据库。经过包过滤之后的网络包数据量将大大减少。包过滤规则的BNF范式描述如下:
例如,在以下规则中:“{12,4}=={16,4}20”,表示若从第12字节偏移处开始的4个字节(源IP地址)等于从第16个字节偏移处开始的4个字节(目的IP地址),则将包的前20字节获取过来,而抛弃包的其余内容。利用此语法定义的过滤规则简单且过滤条件基本上是简单的比较运算,适于计算机进行高效快速地处理。
3.2 网络扫描检测
检测程序对指定数据库文件进行分析。当源地址连续相同的IP请求连接记录大于某一阀值时,则认为此地址的用户可能在扫描网络,这时将此地址上报给执行程序。执行程序通过对可疑IP地址某一时间段内的所有记录进行分析,来发现网络扫描。例如若发现可疑IP对其他主机进行了穷尽式的端口连接,则认为该IP地址用户在进行网络扫描。
但是隐蔽扫描的IP地址很可能是伪装的,且扫描时间也可能不连续,因此用上面的方法不一定能检测到隐蔽扫描。
网络扫描的目的是要发现网络中活动主机并找出其安全漏洞,因此服务与端口开放较多的重点保护主机是扫描者的重点对象。检测程序对指定数据库文件进行分析,比较受保护主机的请求连接和网络陷阱机与之相近IP地址的请求连接,如在某时间段内的非常用连接相近,则认为此地址的主机可能被扫描。将此地址上报给执行程序,执行程序对可疑主机IP地址某一时间段内的所有记录进行分析,如发现有穷尽式的端口连接,则认为该主机被网络扫描。
4 结束语
网络扫描是一把双刃剑。网络管理员通过网络扫描能检测网络中主机存在的漏洞,从而查漏补缺,使得网络运行更为安全可靠。然而现在网络扫描技术的发展,特别是黑客的积极参与使得网络扫描技术成为一种危害网络安全的行为。只有对网络扫描进行有效监控,才能更有效地保护网络,将网络优势发挥出来。