如果我们要防御,我们首先需要知道防御什么。资产管理通常依靠网络映射来识别网络上运行的系统。
资产管理和了解您在网络上公开的内容(包括托管哪些服务)对于任何想要保护其网络的人来说都非常重要。
Nmap 长期以来一直被认为是网络工程师和安全专业人员的标准端口扫描器。我们可以用它来发现要攻击或防御的资产。
识别网络上活动主机的一种方法是向网络中的所有 IP 地址发送 ping(即 ICMP 回显请求)。这通常称为 Ping 扫描。
这种方法不太适合发现资产。网络上的系统很可能会忽略传入的 ping,这可能是由于防火墙阻止它们或基于主机的防火墙所致。基于主机的防火墙只是在系统而不是网络上实现的防火墙。
更好的方法包括向系统发送不同类型的数据包,尝试询问任何类型的答案,以确定系统是否处于活动状态。例如,Nmap 将向系统发送以下数据包以尝试引起响应:
根据 TCP 规范(即通信规则),系统在开始通信之前应始终进行三向握手。 Nmap 似乎故意违反上述数据包的规则。您能发现哪个数据包的行为不符合系统的预期吗?
向端口 80 发送 TCP ACK 数据包不符合 TCP 标准的规则。 Nmap 这样做专门是为了尝试使目标系统做出答复。为了发送不符合规则的数据包,Nmap 必须以最高级别的权限运行,例如 root 或本地管理员。因此,大多数端口扫描仪都会更加准确。
可以使用带有 -Pn 标志的 Nmap 来禁用网络映射。 Nmap 现在将认为所有 IP/系统均已启动并直接进行端口扫描。
如果您愿意,现在就在家尝试一下。请小心,如果您在公司环境中,请务必在开始运行扫描仪之前获得许可,因为您不想违反工作空间的任何规则。要立即尝试 Nmap,请按照以下简单步骤操作:
我们添加两个 -v 标志来告诉 Nmap 我们想要详细的输出,这使得扫描完成时看起来更有趣。
ARP 协议包含在 LAN 内,但如果您需要发现的主机位于 LAN 上,我们可以使用此协议来尝试揭示网络上的系统。通过使用 ARP 协议简单地迭代 LAN 网络上的所有可用 IP 地址,我们试图强制系统进行回复。
扫描结果如下所示:
Eve: Please Provide Mac Address of system 192.168.0.1
Eve: Please Provide Mac Address of system 192.168.0.2
Eve: Please Provide Mac Address of system 192.168.0.3
Eve: Please Provide Mac Address of system 192.168.0.4
Eve: Please Provide Mac Address of system 192.168.0.5-254
Default Gateway: 192.168.0.1 is me and my MAC Address is AA:BB:CC:12:34:56
Bob: 192.168.0.3 is me and my MAC Address is: BB:CC:DD:12:34:56
Alice: 192.168.0.4 is me and my MAC Address is: CC:DD:EE:12:34:56
端口扫描是为了尝试确定我们可以连接到哪些服务。每个监听服务都提供可能被攻击者滥用的攻击面。因此,了解哪些端口是开放的非常重要。
攻击者有兴趣了解哪些应用程序正在监听网络。这些应用程序为攻击者提供了机会。可能存在使他们能够成功攻击组织的漏洞。
端口扫描的工作原理是向应用程序发送数据包并查找任何回复。这对于 TCP 来说非常容易,就好像 TCP 服务可用一样,它总是会回复 SYN/ACK 数据包。然而对于 UDP 来说,这就更困难了。为了检测服务是否可用,在大多数情况下,攻击者必须发送特定的输入来强制应用程序进行回复。除非客户端准确发送进行通信所需的输入,否则大多数以 UDP 托管的应用程序都不会回复。
TCP 是一种易于扫描的协议,因为 TCP 标准规定系统在收到 SYN 时应回复 SYN/ACK。我们可以向所有 65536 个端口发送 SYN 数据包,并记录所有返回的 SYN/ACK,并根据 SYN/ACK 的回复来推断哪些端口已打开。当没有收到回复时,我们可以假设端口已关闭或被防火墙等过滤。
通过端口 445 上的 SYN/ACK,我们确定该端口已打开。
使用 UDP 时,很难确定端口是否已启动。对于 UDP 端口,扫描器不能依赖 SYN/ACK。事实上,扫描器几乎总是依赖于使服务侦听引起某种回复。
由于有如此多的端口可能打开,并且不同的服务仅回复正确类型的数据,因此在合理的时间内扫描所有端口变得非常耗时且困难。
考虑以下对话,其中 Eve 试图确定 UPD 端口是否打开:
Eve 需要使用正确的协议,并确保数据包到达目的地,例如没有数据包丢失。否则 Eve 可能不会发现端口已打开。
因此,如果我们想要扫描所有端口,UDP 扫描可能会非常耗时。
市面上有很多扫描仪,但在本节中我们重点讨论如何充分利用 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>
扫描可以以不同的速度完成。较慢的速度被 IDS 系统检测到的可能性较小,而快速扫描可能会使系统不堪重负。 Nmap 支持以下选项:
Nmap 有一个内置的 GUI ("Graphical User Interface"),与其他工具也有长边。 GUI 可用于可视化网络并浏览不同主机上的开放端口。图形用户界面如下所示: