端口扫描是指攻击者向目标主机的多个传输层端口依次发送特定构造的探测报文,根据目标主机返回的响应报文判断端口开放或关闭状态,进而收集目标主机开放服务、操作系统类型、服务版本等信息的一种网络侦察技术。在信息安全术语体系中,端口扫描属于攻击前期阶段的信息收集与网络探测活动,它本身并不直接对目标主机造成破坏,却是绝大多数网络攻击发起前不可或缺的前置动作。
从技术规范层面看,端口扫描的探测对象是传输层端口。传输控制协议(TCP)和用户数据报协议(UDP)各自使用十六位长度的端口号字段,理论上可标识从零到六万五千五百三十五共六万五千五百三十六个端口,其中零到一千零二十三为公认端口,一千零二十四到四万九千一百五十一为注册端口,四万九千一百五十二到六万五千五百三十五为动态或私有端口。端口本身并非物理实体,而是操作系统网络协议栈用于区分不同应用进程的逻辑标识,一个端口号在某个时间点上至多只能绑定一个处于监听状态的进程。端口扫描之所以能够推断目标主机的状态,正是利用了操作系统网络协议栈在处理不同标志位组合的报文时表现出的行为差异。
理解端口扫描必须把它放回完整的攻击流程中审视。一次典型的网络入侵通常遵循侦察、扫描、获取访问、维持访问、清除痕迹这一链条。其中扫描阶段的核心任务就是回答三个问题:目标主机上有哪些端口是开放的、开放端口上运行着什么服务、这些服务是否存在已知漏洞。端口扫描正是回答第一个问题的主要手段,而后续的服务版本识别和漏洞探测都建立在端口扫描结果之上。
从这个定位可以引出一个重要判断,即端口扫描的合法性边界。单纯进行端口扫描在很多国家和地区并不构成直接违法,因为扫描行为本身只是向公开可达的网络服务发送正常范围的探测报文,但这种行为一旦与未授权访问、漏洞利用、拒绝服务攻击相结合,就会构成完整的入侵链条。软考命题在考察这一知识点时,往往把端口扫描定性为攻击的前置侦察手段而非攻击本身,考生需要准确区分端口扫描与端口攻击之间的界限。端口扫描的合法性还与扫描的目标范围密切相关。针对单一主机少量端口的探测,与针对整个网段成千上万端口的大规模扫描,在性质上存在显著差异,后者往往伴随明显的攻击意图,许多安全设备会专门针对大范围端口扫描设置告警阈值。从知识体系角度看,端口扫描还须与漏洞扫描区分开来。漏洞扫描是在端口扫描确认开放端口的基础上,进一步向开放服务发送特定构造的请求报文,通过比对服务返回的响应特征来判断目标是否存在已知漏洞。端口扫描回答的是端口开不开的问题,漏洞扫描回答的是开了的端口有没有洞的问题,二者层次分明、前后衔接,共同构成攻击前的侦察链条。软考命题常将二者并置考察,考生若混淆了扫描的层次,就容易在概念题中失分。
端口扫描的绝大多数技术手段都建立在传输控制协议(TCP)连接建立过程的特性之上,因此要理解扫描原理,必须首先吃透TCP的三次握手与报文标志位机制。
TCP是一种面向连接、可靠传输的协议,两个主机之间要建立TCP连接,需要完成三次报文交互。第一次,客户端向服务器发送一个同步序列号标志位(SYN)置位、确认标志位(ACK)清零的报文,并携带一个初始序列号;第二次,如果服务器对应的端口处于监听状态,它会回复一个SYN和ACK同时置位的报文,确认客户端的序列号并给出自己的初始序列号;第三次,客户端再回复一个ACK置位的报文,双方连接就此建立,进入数据传输阶段。这就是三次握手的基本流程。
TCP报文首部包含六个标志位,分别是紧急标志位(URG)、确认标志位(ACK)、推送标志位(PSH)、复位标志位(RST)、同步标志位(SYN)和终止标志位(FIN)。端口扫描技术之所以花样繁多,正是因为这六个标志位可以组合出多种不同的报文形态,而操作系统网络协议栈对于不同标志位组合的报文有着严格且可预测的处理规则。例如,当一台主机的某个端口处于关闭状态时,它收到一个SYN报文,操作系统会直接回复一个RST复位报文表示拒绝;而当端口处于开放监听状态时,它收到SYN报文则会回复SYN加ACK报文表示接受连接请求。这种开放与关闭端口在响应行为上的差异,构成了所有基于TCP的端口扫描的判定基础。
端口扫描的本质,是通过观察目标主机对不同探测报文的响应,来反推端口的开放、关闭或过滤状态。一个端口在网络层视角下存在四种基本状态:开放状态表示端口上有一个进程正在监听,能够接受连接;关闭状态表示端口上没有进程监听,主机可达但该端口不可用;过滤状态表示探测报文被防火墙或访问控制列表拦截,既没有确认也没有拒绝响应,通常表现为无响应;未过滤状态表示能够确定端口可达但无法判断其开放或关闭。
判定逻辑的关键在于,扫描者并不一定需要完成完整的三次握手才能判断端口状态。例如,在SYN半开扫描中,扫描者发送SYN报文后,只要收到SYN加ACK响应就可以断定端口开放,随后立即发送RST报文中断连接,而根本不需要完成第三次握手。相反,如果收到RST响应,则判定端口关闭。如果报文发出后超时无任何响应,则判定端口被过滤或主机不可达。这种利用协议栈行为差异进行状态推断的思路,是端口扫描技术最核心的底层逻辑,也是软考命题反复考察的地方。此外,扫描过程中还涉及超时与重传机制。扫描者发送探测报文后,需要等待一定时间观察响应,若在规定时间内未收到任何报文,通常意味着端口被防火墙过滤或主机不可达。为了兼顾扫描速度与判定准确性,扫描工具会设置合理的超时阈值,并对未响应的探测进行有限次重传。超时时间过短会导致把过滤状态误判为关闭状态,超时时间过长则会拖慢整体扫描进度。因此,成熟的端口扫描工具都会在速度与准确性之间做出权衡,这一工程层面的考虑也常被软考以情景题形式考察,要求考生理解无响应这一现象在扫描者视角下的多重含义。
TCP全连接扫描又称TCP连接扫描,是最直接也最容易被记录的一种扫描方式。它的做法是调用操作系统的标准连接函数,对目标端口执行完整的三次握手。如果连接成功建立,说明端口开放;如果收到复位响应或连接被拒绝,说明端口关闭。这种扫描方式的优点是实现简单、无需特权权限、判定结果准确,普通用户态的应用程序即可完成。
但全连接扫描的缺陷同样明显。由于它真正建立了完整的TCP连接,目标主机上的应用程序和日志系统都会完整记录这次连接事件,入侵检测系统可以轻易捕捉到这种扫描行为。对于开启了连接审计的服务器而言,一次大规模的全连接扫描会在日志中留下大量连接建立与断开的记录,痕迹极为明显。因此,全连接扫描虽然原理最简单,却是最容易被发现和追踪的扫描手段,常用于合法授权的安全评估场景,攻击者在需要隐蔽时一般不会优先选择它。
SYN半开扫描又称半连接扫描,是目前应用最广泛的一种扫描技术。它的核心思路是利用TCP三次握手可以中途终止的特性:扫描者发送SYN报文,如果收到SYN加ACK响应,说明端口开放,此时扫描者不再发送第三次握手报文,而是立即发送一个RST复位报文中断连接;如果收到RST响应,说明端口关闭;如果超时无响应,说明端口被过滤。
半开扫描之所以被称为半开,是因为TCP连接在未完成三次握手的状态下就被中断了,目标主机的应用程序层面根本没有感知到这次连接请求,连接从未真正建立。由于应用程序不会记录未建立的连接,半开扫描能够绕过相当一部分基于应用日志的检测。但需要注意的是,现代操作系统和入侵检测系统已经能够在内核层面识别大量的SYN报文异常流量,通过统计SYN报文与RST报文的配比来判断是否存在半开扫描行为,因此半开扫描也并非完全不可检测。
FIN扫描、NULL扫描和Xmas扫描同属于隐蔽扫描族,它们共同的特点是发送非常规的报文标志位组合,利用操作系统网络协议栈对异常报文的处理差异来判定端口状态。
FIN扫描的做法是向目标端口发送一个仅FIN标志位置位的报文。按照TCP协议规范,当主机收到一个发往关闭端口的FIN报文时,应当回复RST复位报文;而当端口处于开放状态时,收到这种不属于任何已建立连接的FIN报文,正确的处理方式是直接丢弃、不做任何响应。因此,扫描者根
本篇完!