使用 Nmap SYN 扫描进行网络安全检测

NmapNmapBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习 Nmap SYN 扫描,这是网络安全中用于隐蔽端口侦察的一项关键技术。SYN 扫描能够在不完全建立 TCP 连接的情况下,高效识别目标系统上的开放端口,因此比传统方法更不容易被检测到。这对于安全专业人员评估网络漏洞和加强防御至关重要。

在本次实验结束时,你将了解如何进行 SYN 扫描、解读扫描结果,并认识到它们在网络安全评估中的重要性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/installation("Installation and Setup") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/syn_scan("SYN Scan") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/installation -.-> lab-415934{{"使用 Nmap SYN 扫描进行网络安全检测"}} nmap/save_output -.-> lab-415934{{"使用 Nmap SYN 扫描进行网络安全检测"}} nmap/port_scanning -.-> lab-415934{{"使用 Nmap SYN 扫描进行网络安全检测"}} nmap/target_specification -.-> lab-415934{{"使用 Nmap SYN 扫描进行网络安全检测"}} nmap/syn_scan -.-> lab-415934{{"使用 Nmap SYN 扫描进行网络安全检测"}} nmap/service_detection -.-> lab-415934{{"使用 Nmap SYN 扫描进行网络安全检测"}} end

创建用于扫描的目标服务

在这一步中,你将创建一个可控环境,用于练习 Nmap SYN 扫描。在开始扫描任何网络或系统之前,务必了解道德扫描需要获得适当的授权。为避免任何法律问题,我们将搭建一个可以安全扫描的自有服务。

  1. 首先,你需要打开一个终端。终端是一个基于文本的界面,允许你通过输入命令与计算机的操作系统进行交互。打开终端后,你需要导航到项目目录。项目目录是存储与本次实验相关的所有文件的地方。使用以下命令将当前目录更改为项目目录:

    cd /home/labex/project
  2. 现在,我们将使用流行的编程语言 Python 来创建一个简单的 HTTP 服务器。HTTP 服务器是一种可以向客户端(如 Web 浏览器)提供网页的软件。Python 具有内置功能,便于搭建此类服务器。我们将使用这个服务器作为 Nmap SYN 扫描的目标。在终端中运行以下命令:

    python -m http.server --bind localhost 8080 &

    此命令将在端口 8080 上启动一个简单的 Web 服务器。端口是计算机网络中的通信端点。不同的服务使用不同的端口进行通信。命令末尾的 & 符号会使服务器在后台运行。这意味着服务器将持续运行,你可以继续使用同一个终端窗口运行其他命令。

  3. 启动服务器后,我们需要验证它是否确实在运行。我们可以通过检查系统上的开放网络连接来实现这一点。ss 命令是一个可以显示套接字统计信息的工具,其中包括有关开放网络连接的信息。我们将使用它来检查服务器是否在端口 8080 上监听。运行以下命令:

    ss -tulwn | grep 8080

    | 是管道运算符,它将 ss 命令的输出作为 grep 命令的输入。grep 命令在 ss 命令的输出中搜索字符串 8080。如果服务器正在运行,你应该会看到类似以下的输出:

    tcp   LISTEN 0      1            0.0.0.0:8080       0.0.0.0:*

    此输出表明服务器正在端口 8080 上监听,这意味着它已成功运行并准备好被扫描。

理解并执行 Nmap SYN 扫描

现在我们已经有一个目标服务在运行了,是时候深入了解 SYN 扫描了。SYN 扫描是网络安全测试的重要组成部分,它能让我们发现目标系统上的开放端口。在本节中,我们将学习 SYN 扫描的工作原理,然后使用强大的网络扫描工具 Nmap 对我们的 HTTP 服务器进行 SYN 扫描。

什么是 SYN 扫描?

在开始实际扫描之前,了解 SYN 扫描的底层机制至关重要。为此,我们先看看正常的 TCP 连接是如何建立的。

正常的 TCP 连接

在正常的 TCP 连接中,会进行三次握手。这是在客户端和服务器之间建立可靠连接的基本过程:

  • 步骤 1:客户端发送 SYN 数据包
    客户端通过向服务器发送一个 SYN(同步)数据包来发起连接。这个数据包就像是发起对话的请求,询问服务器是否准备好进行通信。
  • 步骤 2:服务器发送 SYN - ACK 数据包
    服务器收到 SYN 数据包后,如果它可用且愿意通信,就会用一个 SYN - ACK(同步 - 确认)数据包进行响应。这个数据包确认了客户端的请求,同时表明服务器已准备好建立连接。
  • 步骤 3:客户端发送 ACK 数据包
    最后,客户端发送一个 ACK(确认)数据包来完成三次握手。完成这一步后,TCP 连接就完全建立了,客户端和服务器之间可以交换数据。

SYN 扫描过程

另一方面,SYN 扫描采用了不同的方法:

  • 步骤 1:Nmap 发送 SYN 数据包
    我们的扫描工具 Nmap 向目标端口发送初始的 SYN 数据包。这与正常 TCP 连接的第一步类似。
  • 步骤 2:目标返回 SYN - ACK 响应
    如果目标端口是开放的,它会像在正常 TCP 连接中一样,用 SYN - ACK 数据包进行响应。
  • 步骤 3:Nmap 终止连接
    Nmap 不会发送最后的 ACK 数据包来完成握手,而是终止连接。这使得扫描更不容易被检测到,因为完整的连接从未建立。此外,它比全连接扫描更快,全连接扫描会为每个被扫描的端口完成整个三次握手过程。

执行 SYN 扫描

步骤 1:导航到项目目录

首先,我们要确保位于正确的项目目录中。这很重要,因为我们将把扫描结果保存到该目录下的一个文件中。要导航到项目目录,请在终端中运行以下命令:

cd /home/labex/project

步骤 2:执行 SYN 扫描

现在,我们准备好使用 Nmap 执行 SYN 扫描了。在终端中运行以下命令:

sudo nmap -sS localhost -p 8080 > /home/labex/project/nmap-syn-scan-results.txt

让我们分解这个命令,了解每个部分的作用:

  • sudo:此命令用于以提升的权限运行后续命令。SYN 扫描需要 root 权限,因为它们涉及发送原始网络数据包,所以我们需要使用 sudo 来执行 nmap 命令。
  • nmap:这是我们使用的网络扫描工具。Nmap 广泛用于网络探索和安全审计。
  • -sS:此选项指定我们要执行 SYN 扫描。
  • localhost:这是我们扫描的目标。在这种情况下,我们正在扫描自己的机器。
  • -p 8080:此选项告诉 Nmap 仅扫描端口 8080。我们感兴趣的是检查本地机器上的这个特定端口是否开放。
  • > /home/labex/project/nmap-syn-scan-results.txt:命令的这部分将 nmap 扫描的输出重定向到项目目录中名为 nmap - syn - scan - results.txt 的文件。这样,我们以后就可以查看结果。

步骤 3:查看扫描结果

扫描完成后,我们可以查看结果。在终端中运行以下命令:

cat /home/labex/project/nmap-syn-scan-results.txt

你应该会看到类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-18 12:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000097s latency).

PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

这个输出提供了有价值的信息。它确认了本地机器上的端口 8080 是开放的,并且正在运行一个 HTTP 服务。这些信息可用于进一步的安全分析或网络故障排除。

分析扫描结果及其安全影响

在执行 SYN 扫描后,理解如何解读结果及其安全影响至关重要。这一步很关键,因为它能帮助你识别网络中的潜在风险。下面让我们深入了解细节。

解读扫描结果

  1. 首先,让我们仔细查看扫描结果。我们将使用 cat 命令来查看存储 Nmap SYN 扫描结果的文件内容。cat 命令是在终端中显示文件内容的简单方法。

    cat /home/labex/project/nmap-syn-scan-results.txt

    当你运行此命令时,会看到一个输出。以下是输出各部分的含义:

    • Host is up:此消息表明目标主机在网络中是可达的。如果主机处于活动状态,意味着你的扫描能够与目标进行通信。
    • 延迟值:它显示了目标对扫描的响应速度。延迟值越低,说明目标响应越快。
    • 8080/tcp open:这表明目标主机上的端口 8080 是开放的,并且准备好接受传入连接。开放端口可能是攻击者的潜在入口。
    • http-proxy:这是 Nmap 对端口 8080 上运行的服务的猜测。Nmap 会根据扫描期间收到的响应来尝试识别服务。
  2. 在实际的安全评估中,目标主机上的每个开放端口都代表着以下几点:

    • 攻击者的潜在入口:攻击者可以利用开放端口来访问目标系统。例如,如果开放端口上运行着 Web 服务器,攻击者可能会尝试利用 Web 应用程序中的漏洞。
    • 可能存在漏洞的服务:每个在开放端口上运行的服务都有可能存在安全缺陷。攻击者可以利用这些漏洞来破坏系统。
    • 需要保护的攻击面的一部分:攻击面是攻击者可以尝试进入系统的所有点的总和。开放端口是攻击面的一部分,需要进行适当的保护。

安全最佳实践

在保护网络时,你应该遵循以下最佳实践:

  1. 只开放必要的端口:开放不必要的端口会增加网络的攻击面。通过关闭未使用的端口,可以减少攻击者的潜在入口数量。
  2. 每个开放端口都应有合理的业务用途:如果一个端口是开放的,它应该有合理的原因,例如运行 Web 服务器或数据库服务。这有助于确保网络的使用既高效又安全。
  3. 所有服务都应保持更新以防止被利用:软件供应商会定期发布更新来修复安全漏洞。通过保持服务更新,可以保护网络免受已知威胁。
  4. 防火墙规则应限制对敏感端口的访问:防火墙可用于控制谁可以访问网络上的特定端口。通过设置适当的防火墙规则,可以将对敏感端口的访问限制为仅授权用户或系统。

清理环境

  1. 现在,我们需要通过停止之前启动的 HTTP 服务器来清理环境。首先,我们需要识别 HTTP 服务器的进程 ID(PID)。PID 是系统为每个运行的进程分配的唯一编号。我们将使用 ps aux 命令列出所有运行的进程,然后过滤结果以找到 HTTP 服务器进程。

    ps aux | grep "http.server" | grep -v grep

    当你运行此命令时,会看到类似于以下的输出:

    labex      1234  0.0  0.1  31116  3164 pts/0    S    12:00   0:00 python -m http.server 8080

    输出的第二列显示了 HTTP 服务器进程的 PID。

  2. 接下来,我们将使用 PID 来停止服务器。我们将使用 kill 命令,该命令会向进程发送终止信号。以下命令会自动查找并终止 HTTP 服务器进程:

    kill $(ps aux | grep "http.server" | grep -v grep | awk '{print $2}')

    此命令首先使用与之前相同的过滤方法找到 HTTP 服务器进程的 PID,然后将 PID 传递给 kill 命令。

  3. 最后,我们需要验证服务器是否已停止。我们将使用 ss 命令,该命令用于显示套接字统计信息。通过过滤输出以仅显示端口 8080 的信息,我们可以检查服务器是否仍在运行。

    ss -tulwn | grep 8080

    如果服务器已成功停止,此命令应该没有输出,这表明服务器不再在端口 8080 上监听。

总结

在本次实验中,你学习了如何执行和理解 Nmap SYN 扫描,这是网络安全侦察中的一项关键技术。你使用 Python HTTP 服务器搭建了一个可控环境,进行了 SYN 扫描以查找开放端口,分析了扫描结果,并清理了测试环境。这些技能对于合规的网络扫描和漏洞评估至关重要。

理解 SYN 扫描能让安全专业人员高效地检测网络漏洞,同时降低被发现的风险。在你的网络安全学习之旅中不断前进时,请始终确保在应用这些技术之前获得扫描网络的许可。