1引言
随着信息技术在社会生活中的应用日益广泛,人们对信息安全的重要性有了更加深刻的认识。作为信息流通与传输的主要媒介,网络的安全问题无疑是信息安全中不可或缺的一环。而作为信息最初的发送方、中间的传递方、最终的接收方,主机的安全问题也占有非常重要的地位。在系统维护人员看来,只有足够安全的网络和主机,才能最大可能地保证信息安全。相应的,黑客(攻击者)也会尽可能地寻找网络和主机的漏洞,从而实施攻击来破坏信息安全。双方攻防的第一步,主要集中在对网络和主机的漏洞扫描上。
网络扫描,是基于internet的、探测远端网络或主机信息的一种技术,也是保证系统和网络安全必不可少的一种手段。主机扫描,是指对计算机主机或者其它网络设备进行安全性检测,以找出安全隐患和系统漏洞。总体而言,网络扫描和主机扫描都可归入漏洞扫描一类。漏洞扫描本质上是一把双刃剑:黑客利用它来寻找对网络或系统发起攻击的途径,而系统管理员则利用它来有效防范黑客入侵。通过漏洞扫描,扫描者能够发现远端网络或主机的配置信息、tcp/udp端口的分配、提供的网络服务、服务器的具体信息等。
2漏洞扫描原理
漏洞扫描可以划分为ping扫描、端口扫描、os探测、脆弱点探测、防火墙扫描五种主要技术,每种技术实现的目标和运用的原理各不相同。按照tcp/ip协议簇的结构,ping扫描工作在互联网络层:端口扫描、防火墙探测工作在传输层;0s探测、脆弱点探测工作在互联网络层、传输层、应用层。ping扫描确定目标主机的ip地址,端口扫描探测目标主机所开放的端口,然后基于端口扫描的结果,进行os探测和脆弱点扫描。
2.1ping扫描
ping扫描是指侦测主机ip地址的扫描。ping扫描的目的,就是确认目标主机的tcp/ip网络是否联通,即扫描的ip地址是否分配了主机。对没有任何预知信息的黑客而言,ping扫描是进行漏洞扫描及入侵的第一步;对已经了解网络整体ip划分的网络安全人员来讲,也可以借助ping扫描,对主机的ip分配有一个精确的定位。大体上,ping扫描是基于icmp协议的。其主要思想,就是构造一个icmp包,发送给目标主机,从得到的响应来进行判断。根据构造icmp包的不同,分为ech0扫描和non—echo扫描两种。
2.1.1ech0扫描
向目标ip地址发送一个icmpechorequest(icmptype8)的包,等待是否收至uicmpechoreply(icmptype0)。如果收到了icmpechoreply,就表示目标ip上存在主机,否则就说明没有主机。值得注意的是,如果目标网络上的防火墙配置为阻止icmpech0流量,ech0扫描不能真实反映目标ip上是否存在主机。
此外,如果向广播地址发送icmpechorequest,网络中的unix主机会响应该请求,而windows主机不会生成响应,这也可以用来进行os探测。
2.1.2non-ech0扫描
向目的ip地址发送一个icmptimestamprequest(icmptypel3),或icmpaddressmaskrequest(icmptypel7)的包,根据是否收到响应,可以确定目的主机是否存在。当目标网络上的防火墙配置为阻止icmpech0流量时,则可以用non.ech0扫描来进行主机探测。
2.2端口扫描
端口扫描用来探测主机所开放的端口。端口扫描通常只做最简单的端口联通性测试,不做进一步的数据分析,因此比较适合进行大范围的扫描:对指定ip地址进行某个端口值段的扫描,或者指定端口值对某个ip地址段进行扫描。根据端口扫描使用的协议,分为tcp扫描和udp扫描。
2.2.1tcp扫描
主机间建立tcp连接分三步(也称三次握手):
(1)请求端发送一个syn包,指明打算连接的目的端口。
(2)观察目的端返回的包:
返回syn/ack包,说明目的端口处于侦听状态;
返回rst/ack包,说明目的端口没有侦听,连接重置。
(3)若返回syn/ack包,则请求端向目的端口发送ack包完成3次握手,tcp连接建立。
根据tcp连接的建立步骤,tcp扫描主要包含两种方式:
(1)tcp全连接和半连接扫描
全连接扫描通过三次握手,与目的主机建立tcp连接,目的主机的log文件中将记录这次连接。而半连接扫描(也称tcpsyn扫描)并不完成tcp三次握手的全过程。扫描者发送syn包开始三次握手,等待目的主机的响应。如果收到syn/ack包,则说明目标端口处于侦听状态,扫描者马上发送rst包,中止三次握手。因为半连接扫描并没有建立tcp连接,目的主机的log文件中可能不会记录此扫描。
(2)tcp隐蔽扫描
根据tcp协议,处于关闭状态的端口,在收到探测包时会响应rst包,而处于侦听状态的端口则忽略此探测包。根据探测包中各标志位设置的不同,tcp隐蔽扫描又分为syn/ack扫描、fin扫描、xmas(圣诞树)扫描和null扫描四种。
syn/ack扫描和fin扫描均绕过tcp三次握手过程的第一步,直接给目的端口发送syn/ack包或者fin包。因为tcp是基于连接的协议,目标主机认为发送方在第一步中应该发送的syn包没有送出,从而定义这次连接过程错误,会发送一个rst包以重置连接。而这正是扫描者需要的结果—只要有响应,就说明目标系统存在,且目标端口处于关闭状态。
xmas扫描和null扫描:这两类扫描正好相反,xmas扫描设置tcp包中所有标志位(urg、ack、rst、psh、syn、fin),而null扫描则关闭tcp包中的所有标志位。
2.2.2udp端口扫描
udp协议是数据包协议,为了要发现正在服务的udp端口,通常的扫描方式是构造一个内容为空的udp数据包送往目的端口。若目的端口上有服务正在等待,则目的端口返回错误的消息;若目的端口处于关闭状态,则目的主机返回icmp端口不可达消息。因为udp端口扫描软件要计算传输中丢包的数量,所以udp端口扫描的速度很慢。