Nmap是一个用来扫描网络扫描的实用工具,它可以用来扫描目标地址的存活情况、开放端口、协议,甚至能判断目标主机的操作系统版本。在Linux运维、网络、安全等方面有很广泛的应用。
相关知识:tcp协议连接过程、tcp协议报文、arp协议、nping、nc、IDS、IPS、iptables、HIDS、NIDS、tcpdump、wireshark
nmap安装
1 | # linux系统可以通过包管理工具进行安装 |
Nmap包含四项基本功能
- 主机发现(Host Discovery)
- 端口扫描(Port Scanning)
- 版本侦测(Version Detection)
- 操作系统侦测(Operating System Detection)
nmap的探活机制
默认情况下,nmap在做端口扫描之前,会先对目标地址进行探活操作,在得不到存活反馈的情况下,nmap会直接结束扫描过程,并输出目标地址不存活的信息。在这种情况下,我们得到的扫描结果就不够准确了,因此,我们可以使用-Pn
参数来跳过探活阶段,直接进行端口扫描。
1 | # 默认情况下会先进行探活 |
那么nmap的探活机制是什么样的呢?我们可以通过抓包的方式来对nmap的探活机制进行分析。
1 | tcpdump host c.isme.pub -w nmap.cap |
- mac nmap 7.92版本抓包结果
- linux nmap 7.01版本抓包结果
- linux nmap 7.92版本抓包结果
通过以上抓包结果分析能够得出大概结论,默认情况下:
- nmap是以icmp协议为主结合tcp(80、443)协议来判断目标地址是否存活
- 在mac的nmap中探活去掉了icmp协议,只使用tcp(80、443)协议来判断目标地址是否存活
仅对目标地址进行探活
使用-sP
参数只会对目标地址探活,不会进行端口扫描
1 | $ nmap -sP c.isme.pub |
使用ARP协议进行探活
如果我们是在针对局域网的目标地址进行扫描,那么我们可以通过ARP协议来进行探活,这样不仅速度快,而且探活结果也更加准确,但是ARP协议只适用于局域网内,不能用于公网扫描。
1 | $ nmap -PR 10.10.10.10 |
半开扫描和全开扫描
半开扫描和全开扫描与TCP连接的三次握手有关系,所谓三次握手就是建立TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。这3个包的发送过程,类似于我们打电话,首先自我介绍,然后对方介绍,最后问好,整个流程如下图所示
全开扫描
tcp三次握手的过程全部完成即为全开扫描。
1 | nmap -sT -Pn -p 80 c.isme.pub |
半开扫描(SYN扫描)
SYN扫描,又称半开扫描,是使用频率最高的扫描选项,扫描原理是在TCP三次握手过程中,不进行最后一次握手,因此执行的速度比全开扫描更快,效率更高,使用参数为-sS
Tcp SYN Scan (sS) 它被称为半开放扫描
- 优点:Nmap发送SYN包到远程主机,但是它不会产生任何会话,目标主机几乎不会把连接记入系统日志。(防止对方判断为扫描攻击),扫描速度快,效率高,在工作中使用频率最高。
- 缺点:它需要
root/administrator
权限执行,非root
用户可以用sT,但是效率低利用三次握手有可能会被检测为恶意攻击行为。
1 | nmap -sS -Pn -p 80 c.isme.pub |
UDP扫描
它不需要发送任何的SYN包,因为这种技术是针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应,
如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的,udp端口扫描速度比较慢
1 | $ nmap -sU -Pn -p 81 c.isme.pub |
FIN扫描(FIN scan(sF)
)
有时候TcpSYN
扫描不是最佳的扫描模式,因为有防火墙的存在,目标主机有时候可能有IDS
和IPS
系统的存在,防火墙会阻止掉SYN数据包。
FIN扫描发送了一个设置了FIN标志的数据包并不需要完成TCP的握手,和sS扫描效果差不多,比sT速度快
1 | $ nmap -sF -Pn -p 80-81 c.isme.pub |
通过抓包可以看到,有明确FIN回包的情况下会认为目标端口处于open状态,目前回包RST/ACK
报文会认为端口处于关闭状态,目标地址没有明确回包的情况下会认为是filtered状态
比较奇怪的是不管是有没有fin回包,nmap都会标记为open|filtered状态,目前怀疑是因为nmap不确定目标是否有iptables策略导致,暂时没有深究原理
ACK扫描(ACK scan(sA)
)
ACK扫描一般用于判断目标地址的端口是否有防火墙策略,nmap发送一个ACK请求,通过目标地址是否回复RST报文判断目标端口是否有防火墙策略
- 如果目标没有回复,会认为目标地址有防火墙策略
- 如果目标有回复,会认为目标地址没有防火墙策略
1 | $ nmap -sA -p 80 -Pn c.isme.pub |
端口扫描
端口发现
Nmap默认扫描的端口是1000个Nmap认为比较常用的1000个端口,但是实际上电脑的端口范围是0-65535
。如果我们想要扫描目标主机的全部端口,我们可以在参数-p
后面加上*
或1-65535
。
1 | nmap -p '*' c.isme.pub |
端口状态
nmap扫描出来的端口通常来说会有以下六种状态
open
closed
filtered
unfiltered
open|filtered
closed|filtered
open
端口处于打开状态,并且能够回应当前扫描节点的请求,
从抓包的结果上看,目标端口可能正常的进行tcp三次握手,nmap会认为目标端口存活
udp场景下目标地址有明确的udp回包
closed
端口处于关闭状态,但是端口可能随时开放
从抓包的结果上看,nmap拿到了目标端口的RST/ACK
报文,nmap会认为目标端口处于closed状态
在udp探测场景下,目标地址没有明确的udp回包,有icmp协议回包的端口不可达
filtered
无法判断端口是否存活,当前扫描节点被目标的防火墙设备阻断了请求
从抓包的情况下分析可以发现,nmap向目标地址发送syn请求没有得到回应,这种情况下nmap会认为目标端口处于filtered状态
open|filtered
在udp场景下,目标地址接受了udp包,但是没有回包,很有可能被防火墙设备阻断了请求的情况下会出现这种状态
常用扫描实例
目标地址存活探测
1 | # 跳过存活探测 |
识别目标操作系统
Nmap不仅能扫描IP还能扫描端口,同时Nmap还可以识别操作系统的类型。为什么要识别操作系统是什么类型呢?因为系统不一样,渗透的方法就不同,linux系统和Windows系统有区别,安卓系统和苹果系统有区别,所以识别出是什么系统还是非常重要的。
1 | $ nmap -O -sS c.isme.pub -p 80 -Pn |
从抓包结果上看包的内容比较复杂,目前没有具体分析
版本扫描
1 | nmap -sS -sV c.isme.pub -p 80 -Pn |
从抓包结果上看 nmap会先针对端口判断协议,然后根据不同协议发送大量请求,针对目标的回包内容分析目标使用的软件版本信息。由于发送的包数量很多,因此这个扫描过程也会比较慢
端口扫描
1 | # 全端口扫描 |
其他
1 | # iptables -I INPUT -s 10.0.1.162 -j DROP 拒绝10.0.1.162扫描 |
总结
nmap是一个非常强大的扫描工具,运行模式和可使用的参数非常多,在nmap扫描的过程中通过抓包分析可以让我们更好的理解nmap的运行机制。
同时在使用nmap的过程中,还需要注意防火墙、入侵检测系统(IDS)以及其他工具对扫描操作的影响
通常来说 TCP connect 会引起IDS系统的反应(默认的nmap扫描是-sT模式)
但IDS不一定会记录俗称“半连接”的TCP SYN扫描(-sS方式的)
- 避免误解:不要随意选择nmap的扫描目标,有些系统会将端口扫描视为恶意行为,端口扫描有可能会触发IDS报警或其他报警。
- 关闭不必要的开放服务:通过nmap的扫描结果可以考虑将不需要使用的服务关闭,或者不需要开放到大范围的端口加上访问控制策略(ACL),只开放需要开放到外界的端口
参数详解
1 | Nmap 7.92 ( https://nmap.org ) |
附录
IDS、IPS、HIDS、NIDS
IDS
入侵检测系统(intrusion detection system
,简称IDS
)是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。它与其他网络安全设备的不同之处便在于,IDS
是一种积极主动的安全防护技术。
入侵检测系统(IDS)检查所有进入和发出的网络活动,并可确认某种可疑模式,IDS利用这种模式能够指明来自试图进入(或破坏系统)的某人的网络攻击(或系统攻击)。
入侵检测系统与防火墙不同,防火墙关注入侵是为了阻止其发生。防火墙限制网络之间的访问,目的在于防止入侵,但并不对来自网络内部的攻击发出警报信号。而IDS却可以在入侵发生时,评估可疑的入侵并发出警告。而且IDS还可以观察源自系统内部的攻击。从这个意义上来讲,IDS可能安全工作做得更全面。
IDS从本质上可以分为两类:网络型IDS(NIDS)和主机型IDS(HIDS)两种。
- 基于网络的NIDS,是指对收集漏洞信息、造成拒绝访问及获取超出合法范围的系统控制权等危害计算机系统安全的行为,进行检测的软件与硬件的组合。
- 基于主机的HIDS,需要安装到被保护的主机,可以查看和监控流量、日志、文件等信息,并核对他们是否和预期相同,检测并报告结果。
HIDS
HIDS
全称是Host-based Intrusion Detection System
,即基于主机型入侵检测系统。作为计算机系统的监视器和分析器,它并不作用于外部接口,而是专注于系统内部,监视系统全部或部分的动态的行为以及整个计算机系统的状态。
NIDS
网络入侵检测系统(network intrusion detection system
,NIDS
),是指对收集漏洞信息、造成拒绝访问及获取超出合法范围的系统控制权等危害计算机系统安全的行为,进行检测的软件与硬件的组合。
IPS
入侵防御系统(IPS: Intrusion Prevention System
)是电脑网络安全设施,是对防病毒软件(Antivirus Programs
)和防火墙(Packet Filter, Application Gateway
)的补充。 入侵防御系统(Intrusion-prevention system
)是一部能够监视网络或网络设备的网络资料传输行为的计算机网络安全设备,能够及时的中断、调整或隔离一些不正常或是具有伤害性的网络资料传输行为。
wireshark
- ip地址过滤:
ip.dst==192.168.0.1
ip.src==192.168.0.1
- 端口过滤:
tcp.port==80
tcp.dstport==80
tcp.srcport==80
- 协议过滤
- http
- tcp
- ssl
- http请求方法过滤
http.request.method==GET
http.request.method==POST
- 多个过滤条件可以用and连接