网络侦察技术之主动扫描探测(一)
2024-2-3 10:33:24 Author: mp.weixin.qq.com(查看原文) 阅读量:21 收藏

一.  前言

网络侦察是ATT&CK框架和网络杀伤链的第一步,而主动扫描探测是网络侦察中十分重要的一项技术,其通过向目标网段主动发送特定探测数据包然后根据响应结果获取目标资产的存活状态、资产信息。

主动扫描探测技术通常解决以下几个问题:

1. 目标网段哪些主机是存活的?

2. 目标存活主机哪些端口是开放的?

3. 这些开放的端口上面运行着哪些协议/服务?

4. 这些服务运行在什么操作系统上?

5. 目标服务信息/资源抓取,以支持后续深入分析。

以上问题在侦察过程中是层层推进的,笔者将它们归为三大阶段(如图1所示):

1. 发现阶段,这一阶段包括存活主机发现和端口扫描,目的是去寻找目标网段中存活IP和开放端口信息。

2. 识别阶段,这一阶段包括协议服务识别、产品识别和操作系统(OS)识别,目的是去确定目标主机运行着哪些服务、相关软件产品和操作系统类型及其版本号。

3. 爬取阶段,这一阶段根据攻击者需求爬取目标主机各项服务提供的相关信息与资源,包括banner信息、网页、SSL证书等。

每一阶段都有相关的工具和方法,比如常见的高速网络扫描器Masscan和Zmap,它们通常用于快速扫描存活主机和端口开放探测。协议服务识别可以借助端口号进行简单匹配,也可以使用Nmap的协议服务指纹库进行精确识别,Nmap还提供产品、操作系统及其版本号的识别能力。在爬取阶段,curl可以实现对网页的抓取、openssl可以爬取证书,Zgrab2则不仅可以爬取目标协议的banner信息,也可以自定义爬取该协议的其他相关信息。而Nmap则是一个强大的扫描探测工具,不仅能实现从发现到爬取的全过程,而且拥有脚本引擎供用户进行扩展。

图1 主动扫描探测分三步进行

笔者将通过几篇文章来介绍这些扫描探测工具的底层原理和相关使用建议,本文将以Nmap的实现为例,首先介绍存活主机发现和端口扫描技术。

二.   存活主机发现

顾名思义,存活主机发现技术是用于发现网络中存活在线主机的技术,通常也被称为Ping扫描技术。Ping扫描的实现有很多种,以下我们一一了解Nmap各种Ping扫描技术。

  • ICMP Ping。这是最常见的Ping扫描技术,如图2所示,探测器向目标IP发送ICPM Echo request(回显请求)报文,当收到目标主机响应的ICMP Echo reply(回显回复)报文时,说明目标主机存活。需要注意的是,没有收到ICMP Echo reply报文并不能证明该主机是不存活的,因为管理员可能会将主机的ICMP回显功能关闭,防火墙也可能会对ICMP报文进行拦截。变种ICMP Ping还可以向目标主机发送ICMP其他请求(时间戳请求、信息请求和地址掩码请求)以等待相应的回复报文,这些变种通常在管理员只关闭了ICMP回显回复功能而忘记关闭其他回复的时候可以派上用场。

图2 ICMP Ping

  • ARP Ping。探测器向本地局域网广播用于获取目标主机IP的MAC地址的ARP请求报文,当收到目标主机响应的ARP回复报文时,证明该主机存活。ARP是一个局域网协议,所以该技术只能用于探测同网段主机。

  • TCP SYN Ping。如图3,探测器向目标IP发送一个带SYN标志的TCP空报文,这里需要同时指定一个目标端口号,一般指定为80。通常情况下,当主机存活且目标端口开放时,目标主机会返回一个ACK/SYN报文,当主机存活但目标端口不开放时,目标主机会返回RST报文。所以,只要探测器收到了响应报文(ACK/SYN报文或者RST报文)即说明目标主机是存活的。同样地,考虑到防火墙的影响,没有收到任何回复并不能说明主机不存活。

图3  TCP SYN Ping

  • TCP ACK Ping。探测器直接向目标IP发送带ACK标志的TCP空报文,由于此前双方并没有进行三次握手建立TCP连接,所以当目标主机收到这样的报文时,认为出现了错误,会返回RST报文。同样的,当目标IP不响应时,并不能够说明该主机并不存活。同时使用TCP ACK Ping和TCP SYN ping进行探测可以提高穿越防火墙的能力。

  • UDP Ping。探测器向目标IP发送一个空的UDP数据报。同样的,这种Ping也需要指定目标端口,通常指定为40,125(这两个端口极少被使用)。通常情况下,当目标主机的目标端口关闭时,该主机会返回一个ICMP端口不可达的响应报文,而当目标端口开放时,可能会直接忽略不作任何响应(使用40和125端口可以尽量避免这种情况发生),所以没有收到响应报文并不能证明该主机是非存活的。这种Ping可以绕过仅对TCP进行访问控制的防火墙。

  • SCTP INIT Ping。流控制传输协议(SCTP)也是一个传输层协议,结合了TCP和UDP的大部分特性,同时增加了多宿主、多流特性,常用于SS7/SIGTRAN 相关的服务。同TCP一样,其也是一个面向连接的协议,不过TCP是以字节为单位进行传输的,而SCTP是以数据块为单位进行传输的。SCTP INIT Ping技术会向目标IP的某个端口(通常为80)发送一个最小的SCTP INIT块,当目标主机端口关闭时,会返回一个ABORT块,当端口开放时,目标主机会进行SCTP四次握手的第二步,返回INIT-ACK块。所以类似于TCP SYN Ping,当探测器收到ABORT块响应或INIT-ACK响应时,均表明该主机存活。

  • IP Protocol Ping。这种技术向目标主机发送多个IP空报文,并在IP头部的协议字段设置对应的协议号,比如1(ICMP),2(IGMP),4(IP in IP)。Nmap的IP Protocol Ping 为ICMP、IGMP、TCP、UDP、STCP还会加上对应协议的头部。当收到相同协议进行响应或者直接返回ICMP协议不可达消息时,都表明主机存活。

三.  端口扫描技术

主机存活发现技术是为了找到存活的主机,而端口扫描技术则是紧接着去找到存活主机上都开放了哪些端口,或者不验证一个IP是否存活而直接探测其某些端口是否开放。该技术的主要原理是向目标端口发送特定数据包,然后根据端口响应情况确定端口状态。

在介绍实际的端口扫描方式之前,我们先了解一下Nmap探测一个端口时可能得到的端口状态。

  • 开放(open):该端口会响应TCP、UDP或SCTP的数据包。

  • 关闭(closed):该端口处于关闭状态,即没有被主机监听。

  • 被过滤(filtered):该端口的状态未知,因为探测数据包被防火墙过滤了。

  • 未被过滤(unfiltered):数据包可以到达该端口,但是不确定该端口是否开放,该状态也可以认为是开放|关闭状态(open|closed)。

  • 开放|被过滤(open|filtered):不确定端口处于开放状态还是被过滤状态,但一定不是关闭状态。

  • 关闭|被过滤(closed|filtered):不确定端口处于关闭状态还是被过滤状态,但一定不是开放状态。

下面一一介绍Nmap支持的端口扫描技术。

  • TCP SYN扫描。SYN扫描也叫半开放式扫描,与TCP SYN Ping类似,探测器向目标端口发送TCP SYN报文,当端口开放时,目标端口会响应SYN/ACK报文,否则响应RST。当没有收到任何响应时,说明SYN报文并没有到达目的主机,而是被防火墙过滤了,即filtered状态。该扫描可以清楚地确定一个端口处于什么状态(open、closed或者filtered)。

  • TCP connect扫描。如图4所示,TCP全连接扫描通过同目标端口建立完整的TCP三次握手而实现端口存活探测。该扫描技术的优点是可以通过connect系统调用实现,而不需要包级别的处理权限。缺点是扫描耗时要更长,而且进行了完整的三次握手,产生的TCP连接会被日志记录,隐匿性不好。因为该扫描是通过连接是否被建立进行判断,所以得到的端口状态有两种结果:open和closed|filtered。

图4 TCP connect 扫描

  • UDP扫描。大部分的服务都运行在TCP之上,但是有些服务是基于UDP的,比如DNS,SNMP和DHCP。如图5,UDP扫描会向少部分端口(如53、161)发送相关协议的Payload以提高响应成功率,对于大部分端口则发送空的UDP数据包。该扫描可能产生多种结果,当收到ICMP端口不可达响应(type字段为 3, code字段为3)时,说明端口处于closed状态,收到其他的ICMP端口不可达响应时(type字段为3, code字段为 0、1、 2、 9、10或13),说明该端口处于filtered状态。当端口响应相关协议的UDP报文时,则说明该端口处于open状态,如果没有任何响应,则为open|filtered状态。

图5  UDP扫描

  • SCTP INIT扫描:SCTP INIT 类似于TCP SYN SCAN,其端口探测的主要原理和SCTP INIT Ping相同。探测器向目标端口发送一个最小的SCTP INIT块,以期待收到INIT-ACK块证明该端口是开放的。该扫描类似于TCP SYN,能确定一个端口处于哪种状态。

  • TCP NULL, FIN, and Xmas扫描:这三种扫描因为探测行为相似而被归为一类,他们分别向目标端口发送不带任何标志位(NULL)、仅带FIN标志(FIN)、带URG、 PUSH和FIN标志的TCP报文(Xmas,像点亮圣诞树一样把标志位都点亮)。图6为Xmas扫描,当目的端口关闭时,主机会响应RST报文,否则不做任何响应。因为不牵涉到握手过程,所以这是一种比SYN更加隐蔽的扫描方式。缺点是有些机器在实现TCP并不严格按照RFC793,所以有可能会失效,另外这种扫描也无法区分open和filtered。

图6 Xmas扫描

  • TCP ACK扫描。如图7所示,探测器向目的端口发送带ACK标志的TCP报文,不管端口开放还是关闭,都会响应RST报文,当没有收到任何响应或者收到ICMP错误响应时表明该端口处于filtered状态。该扫描的目的并不是确定一个端口是否开放,而是验证该端口是否被防火墙过滤。

图7 TCP ACK扫描

  • TCP Window扫描。如图8,该扫描和TCP ACK扫描一样,向端口发送ACK标志的TCP报文,不同点在于该扫描利用RST报文的TCP Window字段来区分端口处于开放或者关闭。有些系统的开放端口响应的RST报文的TCP Window字段为正数,而关闭端口响应的RST报文为TCP Window字段为0。这种扫描依赖于具体的系统实现,并不是十分可靠。

图8 TCP window扫描

  • TCP Maimon扫描。该扫描技术是Uriel Maimon于1996年提出,向目的端口发送带FIN和ACK标志的TCP报文,根据RFC793的实现,不论端口是否开放,都应该响应RST报文,如果是这种情况,则该扫描的效果和TCP ACK等同。但是Maimon发现,当时许多类BSD系统在端口开放时会简单地丢弃报文而不做任何响应,这种情况下,该扫描的效果等同于TCP NULL, FIN, and Xmas 扫描。

  • 自定义TCP扫描。准确来说这并不是一种具体的扫描技术,而是Nmap提供给用户的一个自定义TCP扫描接口。用户可以按照自己的需要为TCP报文头设置标志位,其支持URG、ACK、PSH、RST、SYN、和 FIN这6种标志位的随意组合,然后用户还需要告诉Nmap何种响应对应于何种端口状态。这要求用户对TCP协议以及其在不同操作系统上的实现区别有很深的了解。

  • SCTP COOKIE ECHO 扫描。该扫描会向目的端口发送STCP COOKIE ECHO块,当端口开放时,不会作任何响应,否则会响应一个ABORT块。这种扫描比STCP INIT扫描要稍隐匿些,但是当探测器没有收到任何响应时,无法区分open和filtered状态。

  • IDLE扫描。这种扫描是一种隐匿扫描技术,攻击者借助一台处于IDLE状态(除了攻击者和目标机的流量外,不会有任何流量到达该主机)的僵尸主机间接地对目标进行端口扫描,从而隐藏其真实IP。如图9所示,整个过程分为3步。攻击者首先向僵尸主机发送一个SYN/ACK报文,因为此前双方并未进行过任何握手操作,所以僵尸主机会响应一个RST报文,然后从该报文可以的IP头上可以读取到IPID字段,这一步的目的是为了获取僵尸主机的IPID计数器数值。接下来,然后攻击者伪造一个源IP为僵尸主机的SYN报文发送给目标主机和端口,当目标端口开放时,会给僵尸主机返回一个SYN/ACK报文(三次握手中的第二次)。同样地,僵尸主机再次响应一个RST报文,并将IP头的IPID字段数值加1。最后攻击者再次向僵尸主机发送SYN/ACK报文,获取最新IPID数值。如果两次获取的IPID差值为2说明目标端口是开放的,否则如果两次IPID差值为1,说明目标端口不开放。这种扫描依赖于操作系统使用递增的IPID计数器(有些操作系统使用随机IPID计数器),而且还要求僵尸主机处于IDlE状态,扫描条件要求很高。

图9 IDLE扫描

  • IP Protocol扫描。该扫描的原理同IP Protocol Ping,实际上是协议扫描,目的时为了确定目标主机支持何种协议(TCP, ICMP, IGMP等),只是这种扫描可能也需要指定一个端口。当以某种协议向目标主机(和端口)发送响应报文时,如果收到对应协议的响应或者ICMP端口不可达信息时,证明目标主机支持该协议,如果收到ICMP协议不可达回复,则证明目标主机不支持该协议。

  • FTP Bounce扫描。这种扫描是一种利用FTP服务器上的漏洞来检测目标主机上的开放端口的扫描技术。FTP 协议有一个特点就是支持代理 FTP 连接。它允许用户连接到一台 FTP 服务器上,然后要求文件送到一台第三方服务器上。如图10所示,在FTP Bounce扫描中,攻击者先找到一个可用的FTP服务器,并在FTP服务器上执行PORT命令,将目标主机和端口号作为参数传递给FTP服务器。FTP服务器会尝试与目标主机建立连接,并返回连接是否成功的消息给攻击者,从而判断目标端口是否开放。FTP Bounce扫描可以用于绕过防火墙扫描内网主机。但是,FTP Bounce扫描需要找到一台支持使用PORT命令连接目标主机的FTP服务器,但是现在大多数FTP服务器都拒绝使用PORT命令连接到其他主机。

图10  FTP Bounce扫描

以上所述虽名为扫描技术,但实际上讲的是如何使用探测器通过发包的方式去探测一个端口状态的技术,而现实中的扫描往往是针对多个IP多个端口,探测器可能也不止一个(分布式扫描),而这就牵涉到扫描策略和方法的问题了,不是本文讨论的对象。另外,Internet级别的扫描是另一个研究课题,在带宽足够的前提下,Zmap可以在45分钟内扫完IPv4空间的单端口,Masscan则号称能在6分钟实现IPv4全网扫描。而IPv6由于地址空间庞大,所以枚举式的扫描方法是不可取的,目前的研究多是基于种子去发现IPv6活跃地址。

四.  使用建议

大部分情况下,使用nmap的默认参数和选项可以满足我们的扫描需求,但是某些需要考虑检测准确率、速率、隐匿性等情况下,就需要我们能灵活运用各种扫描技术了,以下是笔者根据自己的理解和实践归纳出来的一些场景和使用建议,仅供参考。

  • 精准扫描

  1. 精确识别单IP存活性:该场景下,可以考虑按需依次枚举(或者同时)使用ICMP Ping、TCP SYN Ping、TCP ACK Ping、UDP Ping、SCTP INIT Ping、IP Protocol Ping以提高检测准确率。在局域网环境下,还可以使用ARP Ping。实践中,Nmap默认使用ICMP Ping、443端口SYN Ping、80端口TCP ACK Ping和ICMP时间戳Ping四种方式同时探测目标存活性,要想进一步提高检测准确率,可用以下命令: “nmap -PE -PS80 -PS443 -PP -PU40125 -PS3389 -PA21 -PU161 --source-port 53 <target_ip>  ”。

  2. 精确探测单端口开放性:同样地,可以考虑按需依次枚举(或者同时)使用TCP SYN Scan、TCP connect Scan(低权限时)、UDP Scan、SCTP INIT Scan等方式以提高检测准确率。比如,使用命令”nmap -Pn -sS -sA -sU -sY  -p80 <target_ip>”。

  • 快速扫描

  1. 快速探测大量IP存活性:该场景下,为了加快扫描效率,可以先使用ICMP Ping扫描一轮,然后再使用TCP SYN Ping对剩余IP进行扫描,如果需要提高覆盖率,可以继续使用其他类型Ping对剩余IP进行扫描。实践中可以先使用命令”nmap -sn -PE <target_ips>  ”,然后再使用命令”nmap -sn -PS80<rest_ips>”进行扫描,也可以考虑直接使用”nmap -sn -PE -PS80 <target_ips>”进行扫描。

  2. 快速扫描大量IP的少量端口:直接使用TCP SYN进行无状态高速扫描,这也是Zmap和Masscan的做法。实际中建议使用zmap或者masscan进行扫描:”zmap -p <p1>,<p2><target_ips>  ”

  3. 快速扫描大量IP的大量端口扫描:建议先使用Ping扫描找到存活主机,然后再使用TCP SYN扫描,可以节省大量开销。实践中,先使用”nmap -sn -PE -PS80 <target_ips>”或者”masscan --ping<target_ips>”得到存活主机,然后再使用zmap或masscan对存活主机进行快速端口扫描。

  • 防火墙检测和绕过

  1. 防火墙检测:当只想验证和检测防火墙时,可以使用TCP SYN扫描和TCP ACK扫描,nmap命令为:”nmap -sS -T4 <targets_ips>”和”nmap -sA -T4 <targets_ips>”。有些防火墙可能会伪造一些RST返回以干扰检测,此时可以借助IP分组的IPID连续性与否进行判断。

  2. 防火墙绕过:由于TCP ACK扫描的穿透性要比TCP SYN扫描好,所以可以先借助TCP ACK扫描找到更多的unfiltered状态端口,然后再借助TCP FIN扫描检测目标端口是否开放。FTP Bounce扫描也能用于穿透防火墙。另外,源端口伪造、IP分片、源路由、代理等方法能进一步提高绕过的成功率(可参考Nmap官方书籍第10章)。

  • 隐匿扫描

FIN、Null、Xmas等特殊Flag扫描要比普通SYN扫描隐匿性好些,但是却仍然无法隐藏真实IP。而IDLE扫描和FTP bounce扫描则可以借助僵尸主机或者存在漏洞的FTP服务器实现真实IP隐藏,但是这两者的扫描条件很高。一般情况下,Nmap可以与Proxychains配合使用,借助代理实现真实IP隐藏。

五. 总结

本文简单介绍了主动扫描探测的基本定义和解决的问题,并将主动扫描探测分为发现、识别和爬取三大阶段。本文以Nmap的实现为例,详细介绍了发现阶段所涉及到各种存活主机发现和端口扫描技术并根据一些特殊场景给出了一些使用建议。识别和爬取阶段将于后续文章进行介绍,欢迎读者继续关注。

参考文献

1. Bou-Harb E, Debbabi M, Assi C. Cyber scanning: a comprehensive survey[J]. Ieee communications surveys & tutorials, 2013, 16(3): 1496-1519.

2. [Nmap: the Network Mapper - Free Security Scanner](https://nmap.org/)

3. Durumeric Z, Wustrow E, Halderman J A. {ZaCurity 13). 2013: 605-

4. zmap/zgrab2: Fast Go Application Scanner (github.com)

5. robertdavidgraham/masscan: TCP port scanner, spews SYN packets asynchronously, scanning entire Internet in under 5 minutes. (github.com)

内容编辑:创新研究院 张承万
    责任编辑:创新研究院 陈佛忠

本公众号原创文章仅代表作者观点,不代表绿盟科技立场。所有原创内容版权均属绿盟科技研究通讯。未经授权,严禁任何媒体以及微信公众号复制、转载、摘编或以其他方式使用,转载须注明来自绿盟科技研究通讯并附上本文链接。

关于我们

绿盟科技研究通讯由绿盟科技创新研究院负责运营,绿盟科技创新研究院是绿盟科技的前沿技术研究部门,包括星云实验室、天枢实验室和孵化中心。团队成员由来自清华、北大、哈工大、中科院、北邮等多所重点院校的博士和硕士组成。

绿盟科技创新研究院作为“中关村科技园区海淀园博士后工作站分站”的重要培养单位之一,与清华大学进行博士后联合培养,科研成果已涵盖各类国家课题项目、国家专利、国家标准、高水平学术论文、出版专业书籍等。

我们持续探索信息安全领域的前沿学术方向,从实践出发,结合公司资源和先进技术,实现概念级的原型系统,进而交付产品线孵化产品并创造巨大的经济价值。

长按上方二维码,即可关注我


文章来源: https://mp.weixin.qq.com/s?__biz=MzIyODYzNTU2OA==&mid=2247496694&idx=1&sn=cfcdc140af5b849d7a9ae235faad26e8&chksm=e84c5529df3bdc3f0b679afa8e37e65dcfa7ca4c799f34615f4ab4e081271f6891c5c1cd5ff7&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh