网络安全 网络映射与端口扫描
如果我们要防御,我们首先需要知道要防御什么。资产管理通常依赖于网络映射来识别网络上哪些系统处于活动状态。
资产管理和了解你在网络上暴露了什么,包括托管哪些服务,对于任何希望保护其网络的人来说都非常重要。
Nmap - 网络映射器
Nmap 长期以来一直被视为网络工程师和安全专业人员的标准端口扫描器。我们可以用它来发现要攻击或防御的资产。
网络映射
识别网络上哪些主机处于活动状态的一种方法是向网络中的所有 IP 地址发送 ping,即 ICMP 回显请求。这通常被称为 Ping 扫描。
这种方法在发现资产方面并不十分有效。网络上的系统很可能会忽略传入的 ping,可能是由于防火墙阻止了它们,也可能是由于基于主机的防火墙。基于主机的防火墙只是一个在系统上而不是在网络上实现的防火墙。
更好的方法是向系统发送不同类型的包,试图请求任何类型的响应,以确定系统是否处于活动状态。例如,Nmap 会向系统发送以下包,试图引起响应
- ICMP 回显请求
- 到 443 端口的 TCP SYN 包
- 到 80 端口的 TCP ACK 包
- ICMP 时间戳请求
根据 TCP 规范,即通信规则,系统在开始通信之前应始终进行三次握手。Nmap 似乎故意用上面的包破坏了这些规则。你能发现哪个包的行为与系统的预期不符吗?
向 80 端口发送 TCP ACK 包不符合 TCP 标准的规则。Nmap 特意这样做是为了试图让目标系统做出响应。为了发送不符合规则的包,Nmap 必须以最高级别的权限运行,例如 root 或本地管理员。大多数端口扫描器因此会更加准确。
可以使用 Nmap 的 -Pn 标志禁用网络映射。Nmap 现在会将所有 IP/系统视为已启动并直接进入端口扫描。
如果你想尝试一下,现在可以在家尝试一下。注意,如果你处于企业环境中,在开始运行扫描器之前始终获得许可,因为你不希望违反工作空间的任何规则。要立即尝试 Nmap,请按照以下简单步骤操作:
- 从 https://nmap.org 下载 Nmap。确保下载与你的操作系统匹配的版本
- 安装 Nmap 并从命令行终端启动该工具
- 查找你的本地 IP 地址和子网
- 运行 Nmap 扫描它,以查看它可以发现哪些类型的系统:nmap -vv IP/netmask
我们添加了两个 -v 标志,告诉 Nmap 我们想要详细输出,这使得扫描在完成时更有趣。
ARP 扫描
ARP 协议包含在 LAN 中,但如果要发现的主机位于 LAN 上,我们可以使用此协议来尝试揭示网络上的系统。通过简单地使用 ARP 协议遍历 LAN 网络上的所有可用 IP 地址,我们试图强制系统进行响应。
扫描如下所示
Eve:请提供系统 192.168.0.1 的 Mac 地址
Eve:请提供系统 192.168.0.2 的 Mac 地址
Eve:请提供系统 192.168.0.3 的 Mac 地址
Eve:请提供系统 192.168.0.4 的 Mac 地址
Eve:请提供系统 192.168.0.5-254 的 Mac 地址
默认网关:192.168.0.1 是我,我的 Mac 地址是 AA:BB:CC:12:34:56
Bob:192.168.0.3 是我,我的 Mac 地址是:BB:CC:DD:12:34:56
Alice:192.168.0.4 是我,我的 Mac 地址是:CC:DD:EE:12:34:56
端口扫描
端口扫描用于尝试确定我们可以连接到哪些服务。每个监听服务都提供攻击面,攻击者可能会利用这些攻击面。因此,了解哪些端口处于打开状态非常重要。
攻击者有兴趣了解哪些应用程序正在监听网络。这些应用程序代表着攻击者利用的机会。可能存在漏洞,使他们能够成功地攻击组织。
端口扫描通过向应用程序发送数据包并查找任何响应来工作。对于 TCP 来说,这非常容易,因为如果 TCP 服务可用,它将始终以 SYN/ACK 数据包进行响应。然而,对于 UDP 来说,它更困难。为了检测服务是否可用,在大多数情况下,攻击者必须发送特定输入,从而强制应用程序进行响应。大多数在 UDP 中托管的应用程序都不会进行响应,除非客户端发送与进行通信所需的输入完全一致的输入。
TCP 端口扫描
TCP 是一种易于扫描的协议,因为 TCP 标准规定,系统在收到 SYN 时应以 SYN/ACK 进行响应。我们可以向所有 65536 个端口发送 SYN 包,并记录所有返回的 SYN/ACK,并根据 SYN/ACK 的响应得出已打开的端口。当未收到响应时,我们可以假设端口已关闭或被例如防火墙过滤。
通过 445 端口的 SYN/ACK,我们已经确定该端口已打开。
UDP 端口扫描
使用 UDP,很难确定端口是否已启动。对于 UDP 端口,扫描器不能依赖 SYN/ACK。事实上,扫描器几乎总是必须依赖于让监听的服务引起某种响应。
由于可能有大量端口处于打开状态,并且不同的服务只响应正确类型的数据,因此在合理的时间内扫描所有端口变得非常耗时和困难。
考虑以下对话,其中 Eve 试图找出 UDP 端口是否已打开
Eve 需要使用正确的协议进行通信,并确保数据包到达目的地,例如没有数据包丢失。否则,Eve 可能无法发现端口已打开。
因此,如果我们想要扫描所有端口,UDP 扫描可能非常耗时。
有用的 Nmap 扫描类型和选项
有很多扫描器,但是本节重点介绍如何充分利用 Nmap。
可以使用参数 --top-ports 告诉 Nmap 扫描最常见的端口。
nmap --top-ports 100 <target>
扫描器可以尝试确定监听端口后面的应用程序的版本。这被称为服务扫描,可以使用 -sV 标志启用。
nmap -sV <target>
Nmap 有许多内置脚本,旨在针对特定服务并与之交互。脚本可以执行各种操作,例如从服务中提取信息或尝试利用它。我们可以使用 -sC 标志启用脚本扫描器。这仅启用安全检查,因此不会进行拒绝服务或利用尝试。
nmap -sC <target>
可以使用扫描器进行操作系统检测,使它能够尝试确定正在运行的操作系统。它使用许多不同的参数来尝试测量和估计操作系统的可能性。这可以使用 -O 参数启用。
nmap -O <target>
Nmap 的攻击模式一次启用多个标志。扫描器将执行版本和操作系统检测,启用脚本扫描器并扫描前 1000 个最常见的端口。它可以使用 -A 选项启用。
nmap -A <target>
Nmap 还可以通过所有上述标志扫描 IPv6。可以通过添加 -6 标志来启用。
nmap -6 <target>
Nmap 定时选项
扫描可以使用不同的速度执行。速度较慢的扫描器被 IDS 系统检测到的可能性较小,而快速扫描可能会使系统不堪重负。Nmap 支持以下选项
- T0 - 偏执。此选项适用于不想被检测到的攻击者。IDS 系统可以在一定时间内关联多个请求。偏执选项将尝试通过每秒仅发送极少量的包来规避这种情况。
- T1 - 隐蔽。速度更快,但旨在躲避 IDS 系统。
- T2 - 礼貌。速度较慢的扫描,尽其所能不使系统崩溃。
- T3 - 正常。它只是默认值。
- T4 - 激进。快速扫描,快速提供结果。大多数系统可以承受这种速度。
- T5 - 疯狂。我们正在以最大容量和性能发送。
Zenmap
Nmap 除了其他工具之外,还内置了一个 GUI(“图形用户界面”)。GUI 可用于可视化网络并在不同主机上浏览打开的端口。GUI 如下所示