概述
这段时间的工作与网络扫描有关,今天在这里总结一下最近了解的各类扫描器,方便自己以后查阅。也希望能对想要快速了解各类扫描器特性的朋友,带来一些帮助。
本文主要回答两个个问题:
- 现有的扫描器有哪些?
- 他们的扫描结果是什么?
此外,在本文中,我还分析了各工具的技术特点。
现有的扫描器
网络扫描器,又称端口扫描器(port scanner)在安全领域有着诸多应用。
从扫描规模上看,有支持全网扫描的,比如Shodan、Zoomeye、ZMap。也有支持小范围精确扫描的,比如Nmap,Xprobe2,p0f等。
如果考虑采用的扫描策略,还可以分为主动扫描器和被动扫描器。主动扫描是“搜”,被动扫描是“听”。
如果考虑指纹识别的功能,可以分为简单的使用设备指纹识别的Shodan,设备指纹结合Web应用指纹的Zoomeye,基于TCP/IP协议栈指纹的Nmap。
关于各个扫描器的特性,我会在下一节详细分析。
各类扫描器的功能分析
Shodan
根据维基百科,Shodan是由程序员 John Matherly 打造的搜索引擎。初衷是为了搜索联网的设备。
- 扫描策略:主动扫描。
- 识别机制:强度中等,对与某些特定端口通信之后返回的 banner 信息的采集和索引,主要针对设备指纹。
- 产品功能:IP地址定位、 为扫描结果绘制地图、 数据分析与可视化、 REST API、 Python Package、 RSS订阅等。
- 扫描规模:全网。
- 返回字段:Country、 Organization、 ISP、 Last Update、 Hostnames、 Ports、 Services。
Zoomeye
Zoomeye是国内互联网安全厂商知道创宇的一个产品。相比于Shodan它更侧重于Web层面的资产发现。
- 扫描策略:主动扫描。
- 识别机制:强,设备指纹识别方法与Shodan类似,加强了对Web服务的识别能力,并结合了Nmap等工具。
- 产品功能:IP地址定位、 绘制扫描结果地图、 REST API、 Python Package、 社区机制。
- 扫描规模:全网。
- 返回字段:Country、 City、 Last Update、 Key Words、 Port。
值得一提的是,Zoomeye团队通过把一些工控协议常用端口的扫描结果以及一些工控设备的搜索Dork收集到一起,推出了一个工控专题,地址:http://ics.zoomeye.org/。
Zmap
Zmap是美国密歇根大学研究者开发的一款工具。在第22届USENIX安全研讨会,以超过Nmap 1300倍的扫描速度声名鹊起。相比大名鼎鼎的Nmap,全网扫描速度是他最大的亮点。在千兆网卡状态下,45分钟内可扫描全网络IPv4地址。
- 扫描策略:主动扫描。
- 识别机制:无,需自行编写扩展。
- 产品功能:可用于全网扫描的扫描节点。
- 扫描规模:全网。
Nmap
Nmap 是一个免费开放的网络扫描和嗅探工具包,也叫网络映射器(Network Mapper)。Nmap 使用TCP/IP协议栈指纹来准确地判断出目标主机的操作类型。
- 扫描策略:主动扫描。
- 识别机制:基于TCP/IP协议栈指纹。
- 产品功能:主机发现、端口扫描、操作系统识别。
- 扫描规模:选定网段或指定ip。
下面详细解释一下nmap的操作系统指纹识别策略。
首先,Nmap 通过对目标主机进行端口扫描,找出有哪
些端口正在目标主机上监听。当侦测到目标主机上有多于一个开放的TCP 端口、一个关闭的TCP 端口和一个关闭的UDP 端口时,Nmap 的探测能力是最好的。然后,Nmap 对目标主机进行一系列测试如下表,利用得出的测试结果建立相应的目标主机的Nmap指纹。最后,将此Nmap 指纹与指纹库中指纹进行查找匹配,从而得出目标主机的操作系统类型。
测试 | 描述 |
---|---|
T1 | 发送TCP 数据包(Flag=SYN)到开放的TCP 端口上 |
T2 | 发送一个空的TCP 数据包到开放的TCP 端口上 |
T3 | 发送TCP 数据包(Flag=SYN,URG,PSH,FIN)到开放的TCP 端口上 |
T4 | 发送TCP 数据包(Flag=ACK)到开放的TCP 端口上 |
T5 | 发送TCP 数据包(Flag=SYN)到关闭的TCP 端口上 |
T6 | 发送TCP 数据包(Flag=ACK)到关闭的TCP 端口上 |
T7 | 发送TCP 数据包(Flag=URG,PSH,FIN)到关闭的TCP端口上 |
Xprobe2
Xprobe2是基于ICMP协议指纹特征的主动探测远程操作系统类型的工具,通过主动发送UDP和ICMP请求报文到目标主机来触发ICMP消息,根据ICMP消息中网络特征值进行基于签名数据库的模糊匹配以及合理的推测, 通过模糊矩阵统计分析来探测操作系统,从而确定远程操作系统的类型。
- 扫描策略:主动扫描。
- 识别机制:基于ICMP协议指纹。
- 产品功能:操作系统识别。
- 扫描规模:指定ip。
下面简述Xprobe2的识别策略。
在Xprobe2 探测过程中,会发送不同类型的数据包到目标主机上,同时也会收到目标主机发送的响应数据包。当每收到响应数据包时,都会根据该数据包的网络特征值进行打分,来预测是何种操作系统的可能性。例如,3 分代表肯定,2 分代表有可能是,1 分代表有可能不是,0 分代表肯定不是。然后,针对不同的操作系统类型i, 将每次测试的得分数进行加和,以总分来判断远程操作系统的类型,其判断的模糊矩阵如下表。
测试操作系统1 | 操作系统2 | … | 操作系统i | |
---|---|---|---|---|
测试1 | 分数 | 分数 | … | 分数 |
测试2 | 分数 | 分数 | … | 分数 |
测试3 | 分数 | 分数 | … | 分数 |
… | … | … | … | … |
测试N | 分数 | 分数 | … | 分数 |
总分 | S1 | S2 | … | Si |
在整个探测过程中,Xprobe2将依次进行三类测试,分别是探索模块、信息采集模块和指纹模块如下表。
模块 | ICMP | TCP | UDP |
---|---|---|---|
探索模块 | ICMP Echo | TCP Ping | UDP ping |
信息采集模块 | TTL | 端口扫描 | \ |
指纹模块 | ICMP Echo、 ICMP Port Unreachable、SMB | ICMP Timestamp、TCP Handshake、SNMP | ICMP Address Mask、TCP RST |
因此,Xprobe2 与Nmap的严格匹配操作系统指纹不同,它会根据与签名数据库探测数据包的特征值推测出结果。
p0f
p0f是继Nmap、Xprobe2之后另一款操作系统指纹识别工具。p0f也是基于TCP/IP协议栈指纹的,它的特色在于,它采取了被动扫描的策略。
- 扫描策略:被动扫描。
- 识别机制:基于TCP/IP协议栈指纹。
- 产品功能:操作系统识别。
- 扫描规模:给定数据包。
参考文献
[1] https://en.wikipedia.org/wiki/Shodan_(website)
[2] https://www.zoomeye.org/help/manual
[3] 张琦,操作系统指纹识别工具Nmap与Xprobe的分析和研究,科技传播, 2010
[4] https://nmap.org/man/zh/
[5] https://en.wikipedia.org/wiki/P0f