Nmap常见扫描方式流量分析

Nmap常见扫描方式流量分析

环境说明

扫描者:manjaro linux, IP地址:192.168.31.160

被扫描者:centos 7,IP地址:192.168.31.175

分析工具:wireshark

nmap 版本:version 7.80

TCP 知识回顾

这里对TCP的三次握手知识进行简单的回顾,方便后面理解Nmap的扫描流量

关于TCP协议相关内容看:http://networksorcery.com/enp/default.htm


「Source Port」:源端口

「Destination Port」:目的端口

「Sequence Number」:序列号。

「Acknowledgment Number」:确认号

「Control Bits」:包含一下几种(这几个字段这里要有印象,后续关于nmap的扫描都和这里会有关系):

字段含义
URG紧急指针是否有效。如果设置1,用于通知接收数据方在处理所有数据包之前处理紧急数据包
ACK确认号是否有效。用于确认主机成功接收数据包。如果「Acknowledgment Number」包含有效的确认号码,则设置ACK标志为。例如tcp三次握手的第二步,发送ACK=1和SYN=1 ,就是告知对方它已经收到初始包
PSH强制将数据压入缓冲区
RST连接重置
SYN表示建立连接
FIN表示关闭连接

下图是TCP三次握手的过程:


SYN 扫描

Nmap 的默认扫描方式就是SYN扫描,在192.168.31.160 执行如下命令进行扫描:

➜ sudo nmap -p22 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-04 11:45 CST
Nmap scan report for 192.168.31.175
Host is up (0.00044s latency).

PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.38 seconds

192.168.31.175 进行tcpdump 命令进行抓包:tcpdump -i any -w syn_scan.pcap,  下面是通过wiresharkfen分析数据包分析截图:


从获取的流量可以很容易看到,这种扫描的的方式是在三次握手的最后一步没有回复正常的ACK,而是发送了RST

nmap 利用客户端回SYN,ACK 的这个数据包其实就已经知道22这个端口是开放的,如果我们扫描一个没有开放的端口:

➜  sudo nmap -p999 192.168.31.175 
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:08 CST
Nmap scan report for 192.168.31.175
Host is up (0.00034s latency).

PORT   STATE  SERVICE
999/tcp closed http
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

同样我们看一下在192.168.31.175 上抓的数据包的情况,被扫描主机直接回复RST,ACK断开连接,namp从而知道被扫描端口是关闭的,数据包如下:

全连接扫描

nmap也可以进行全连接扫描,也就是完成完整的三次握手,当然这种扫描方式的效率是不如SYN扫描的

nmap -sT -p端口 目标主机

NULL扫描

是将一个没有设置任何标志位的数据包发送给TCP端口,在正常的通信中至少要设置一个标志位。

根据FRC 793的要求,「在端口关闭的情况」下,若收到一个没有设置标志位的数据字段,那么主机应该舍弃这个分段,并发送一个RST数据包,否则不会响应发起扫描的客户端计算机。

也就是说,如果TCP端口处于关闭则响应一个RST数据包,若处于开放则无相应。但是应该知道理由NULL扫描要求所有的主机都符合RFC 793规定,但是windows系统主机不遵从RFC 793标准,且只要收到没有设置任何标志位的数据包时,不管端口是处于开放还是关闭都响应一个RST数据包。但是基于Unix(nix,如Linux)遵从RFC 793标准,所以可以用NULL扫描。经过上面的分析,我们知道NULL可以辨别某台主机运行的操作系统是什么操作系统,是为windows呢?还是unix/linux?

NULL的扫描命令参数:nmap -sN

➜  sudo nmap -sN -p22 192.168.31.175  
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:30 CST
Nmap scan report for 192.168.31.175
Host is up (0.00022s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.67 seconds
➜ sudo nmap -sN -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:30 CST
Nmap scan report for 192.168.31.175
Host is up (0.00042s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds
➜  share scp root@192.168.31.175:/root/null.pcap ./     
root@192.168.31.175's password: 
null.pcap                             100% 5188    10.4MB/s   00:00 

分别扫描了一个开放的端口22 和未开放的端口999,下面的数据包中,可以看到,发送的第一个TCP包中「Control Bits」的所有Flags都没有设置,而开发的22端口没有收到任何回复,而关闭的端口,收到了一个RST数据包,nmap也是通过这种方式来判断端口是否开放。当然这种判断对于windows是不准确的了。

null的扫描流量特征还是非常明显的,很容易通过流量分析知道正在被进行null扫描。

FIN扫描

FIN 原理:

与NULL有点类似,只是FIN为指示TCP会话结束,在FIN扫描中一个设置了FIN位的数据包被发送后,若响应RST数据包,则表示端口关闭,没有响应则表示开放。此类扫描同样不能准确判断windows系统上端口开放情况。

FIN扫描命令参数:nmap -sF

➜ sudo nmap -sF -p22 192.168.31.175       
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:46 CST
Nmap scan report for 192.168.31.175
Host is up (0.00014s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds
➜ sudo nmap -sF -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:46 CST
Nmap scan report for 192.168.31.175
Host is up (0.00028s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.36 seconds

对比null扫描,就可以看出来,FIN扫描是发送一个设置FIN的数据包,同样的如果是linux系统,收到这个如果没有收到RST则认为端口是开放的,收到RST则表示端口没有开发,windows依然无法判断。

XMAS-TREE扫描

扫描原理:

XMAS扫描原理和NULL扫描的类似,将TCP数据包中的URG、PSH、FIN标志位置1后发送给目标主机。在目标端口开放的情况下,目标主机将不返回任何信息

和NULL扫描正好相反,XMAS扫描会把所有的标志为都设置

XMAS-TREE扫描命令参数:nmap -sX

➜ sudo nmap -sX -p22 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:53 CST
Nmap scan report for 192.168.31.175
Host is up (0.00028s latency).

PORT   STATE         SERVICE
22/tcp open|filtered ssh
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
➜ sudo nmap -sX -p999 192.168.31.175
Starting Nmap 7.80 ( https://nmap.org ) at 2020-07-06 22:54 CST
Nmap scan report for 192.168.31.175
Host is up (0.00021s latency).

PORT    STATE  SERVICE
999/tcp closed garcon
MAC Address: 4C:1D:96:FC:4D:E2 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.34 seconds

还是扫描开放的22端口和未开放的999端口,可以看到Xmas扫描会发送一个FIN,PSH,URG被设置的数据包,同样如果是linux系统可以根据是否收到RST包进行判断端口是否开放,windows无法进行判断

延伸阅读

  • http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html

  • http://networksorcery.com/enp/default.htm

### nmap端口扫描的技术细节 #### 端口扫描的目的 为了理解为什么需要关注特定的端口,可以回顾一下网络安全实践中的基本概念。端口扫描的主要目的是识别目标机器上开放的服务和应用程序接口。这不仅有助于攻击者寻找潜在的安全漏洞,也是合法渗透测试的重要组成部分[^2]。 #### 主流的nmap端口扫描方法 ##### TCP连接扫描 (`-sT`) 这是最基础也最常见扫描方式之一。它通过建立完整的TCP三次握手来确认指定端口的状态。这种方法虽然简单有效,但由于其明显的特征容易被防火墙或入侵检测系统发现并记录。 ```bash nmap -sT target_ip_address ``` ##### SYN半开扫描 (`-sS`) SYN扫描是一种更隐蔽的方式,因为它只发送SYN包而不完成整个TCP连接过程。这种方式减少了被监测的可能性,因为没有实际的数据传输发生。然而,现代IDS仍然能够识别这种模式下的活动。 ```bash nmap -sS target_ip_address ``` ##### ACK扫描 (`-sA`) ACK扫描主要用于探测防火墙规则集。当向关闭的端口发送带有ACK标志位的数据包时,如果收到RST回复,则说明该端口处于过滤状态;反之则表示未受保护。 ```bash nmap -sA target_ip_address ``` ##### UDP扫描 (`-sU`) 不同于TCP协议,默认情况下许服务不会回应UDP请求,因此这类扫描往往耗时较长且结果不够精确。不过对于某些依赖于UDP的应用程序而言仍然是必要的检查手段。 ```bash nmap -sU target_ip_address ``` ##### 版本检测 (`-sV`) 除了简单的端口状态查询外,版本检测还可以获取运行在各个端口背后的具体应用软件及其版本号等信息。这对于评估系统的脆弱程度非常有帮助。 ```bash nmap -sV target_ip_address ``` --- ### 防御措施 针对上述提到的各种类型的端口扫描行为,可以从以下几个方面着手加强防护: #### 使用防火墙与访问控制列表(ACL) 配置合适的iptables规则可以帮助阻止恶意流量进入内部网络环境。例如拒绝那些具有不正常TCP标志组合的数据包可以有效地减少来自外部威胁的风险[^4]。 ```bash iptables -t filter -I INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -j REJECT iptables -t filter -I INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j REJECT iptables -t filter -I INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j REJECT iptables -t filter -I INPUT -p tcp --tcp-flags ALL SYN -j REJECT ``` #### 实施入侵检测/预防系统(NIDS/IPDS) 部署专业的NIDS/NIPS解决方案可以在第一时间察觉可疑活动并向管理员发出警报。此类工具通常具备强的数据分析能力和实时响应机制,能够在不影响业务连续性的前提下提供有效的安全保障[^3]. #### 应用层加固 确保所有对外提供的服务都经过充分验证,并及时更新补丁以修复已知缺陷。同时考虑采用最小权限原则仅开启必需的功能模块和服务端口,从而缩小暴露面降低风险水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值