端口扫描工具
此條目需要补充更多来源。 (2015年1月25日) |
端口扫描工具(Port Scanner)指用于探测服务器或主机开放端口情况的工具。常被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务。
端口扫描定义是客户端向一定范围的服务器端口发送对应请求,以此确认可使用的端口。虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段。[1]端口扫描的主要用途仍然只是确认远程机器某个服务的可用性。
扫描多个主机以获取特定的某个端口被称为端口清扫(Portsweep),以此获取特定的服务。例如,基于SQL服务的计算机蠕虫就会清扫大量主机的同一端口以在 1433 端口上建立TCP连接。[2]
类型
TCP扫描
最简单的端口扫描工具使用操作系统原生的网络功能,且通常作为SYN扫描的替代选项。Nmap将这种模式称为连接扫描,因为使用了类似Unix系统的connect()
命令。如果该端口是开放的,操作系统就能完成TCP三次握手,然后端口扫描工具会立即关闭刚建立的该连接,防止拒绝服务攻击。[3]这种扫描模式的优势是用户无需特殊权限。但使用操作系统原生网络功能不能实现底层控制,因此这种扫描方式并不流行。并且TCP扫描很容易被发现,尤其作为端口清扫的手段:这些服务会记录发送者的IP地址,入侵检测系统可能触发警报。
SYN扫描
SYN扫描是另一种TCP扫描。端口扫描工具不使用操作系统原生网络功能,而是自行生成、发送IP数据包,并监控其回应。这种扫描模式被称为「半开放扫描」,因为它从不建立完整的TCP连接。端口扫描工具生成一个SYN包,如果目标端口开放,则会返回SYN-ACK包。扫描端回应一个RST包,然后在握手完成前关闭连接。[3]如果端口关闭了但未使用过滤,目标端口应该会持续返回RST包。
这种粗略的网络利用方式有几个优点:给扫描工具全权控制数据包发送和等待回应时长的权力,允许更详细的回应分析。关于哪一种对目标主机的扫描方式更不具备入侵性存在一些争议,但SYN扫描的优势是从不会建立完整的连接。然而,RST包可能导致网络堵塞,尤其是一些简单如打印机之类的网络设备。
UDP扫描
UDP扫描也是可能的,尽管存在一些技术挑战。 UDP是无连接协议,因此没有等同于TCP SYN的数据包。但是,如果将UDP数据包发送到未打开的端口,目标系统将响应ICMP端口不可达的消息。大多数UDP端口扫描器都使用这种扫描方法,并使用缺少响应来推断端口是否打开。但是,如果端口被防火墙阻止,则此方法将错误地报告端口已打开。如果端口不可达消息被阻塞,则所有端口将显示为打开。这种方法也受到ICMP速率限制的影响。
另一种方法是发送特定于应用程序的UDP数据包,希望生成应用层响应。例如,如果DNS服务器存在,向端口53发送DNS查询将导致响应。这种方法在识别开放端口方面更加可靠。然而,它仅限于应用程序特定的探测包可用时的端口扫描。一些工具(例如,NMAP)通常具有少于20个UDP服务的探针,而一些商业工具(例如,NESUS)有多达70个。在某些情况下,服务能在端口上被侦听,但被配置为不响应特定的探测包.
ACK扫描
ACK扫描是比较不常见的扫描类型之一,因为它不能确切地确定端口是打开的还是关闭的,但是可以确定端口是过滤的还是未过滤的。当尝试探测防火墙及其规则集的存在性时,这尤其有用。简单的包过滤将允许建立连接(带有ACK位集的包),而更复杂的有状态防火墙可能不允许。
窗口扫描
由于其过时的特性,窗口扫描在确定端口是否打开或关闭时是相当不可靠的,已经很少使用。它生成与ACK扫描相同的数据包,在返回时检查数据包的窗口字段是否被修改。当数据包到达目标时,如果端口是打开的,则设计缺陷试图为数据包创建一个窗口大小,在数据包返回发送方之前用1标记数据包的窗口字段。在不支持这种实现的系统中使用这种扫描技术,窗口字段返回0,将打开的端口标记为关闭。
FIN扫描
由于SYN扫描不够隐蔽,防火墙通常会阻止SYN形式的数据包。FIN报文无需修改即可绕过防火墙。关闭的端口会用适当的RST包回复FIN包,而打开的端口则会忽略。这是TCP的一种典型行为,并在某些方面是不可避免的。