简介
在本次实验中,你将学习高级 Nmap 技术,以在现实世界的网络安全场景中绕过防火墙保护。在使用 iptables 配置的防火墙时,你将练习诸如分段扫描和诱饵 IP 欺骗等规避方法。
实践练习将指导你完成 Nmap 的安装、防火墙规则配置和结果分析。通过可控的扫描实验,你将获得评估和绕过网络安全措施的实践经验。
在本次实验中,你将学习高级 Nmap 技术,以在现实世界的网络安全场景中绕过防火墙保护。在使用 iptables 配置的防火墙时,你将练习诸如分段扫描和诱饵 IP 欺骗等规避方法。
实践练习将指导你完成 Nmap 的安装、防火墙规则配置和结果分析。通过可控的扫描实验,你将获得评估和绕过网络安全措施的实践经验。
在这一步中,你将安装 Nmap,它是一款强大的网络扫描工具,用于安全审计和网络探测。Nmap 通过发送数据包并分析响应来识别网络上的主机和服务。你可以把它想象成一个数字地图绘制者,能发现哪些设备连接到了网络以及它们正在运行哪些服务。
LabEx 虚拟机 (VM) 环境已经安装了必要的依赖项,这使得安装过程变得简单直接。按照以下步骤安装 Nmap:
在你的 LabEx VM 中打开终端(你可以使用 Xfce 终端,或者在桌面上右键单击并选择“打开终端”)。终端是你输入本次实验所有命令的地方。
首先,更新软件包列表以确保你能获取到最新版本。这就像在下载新软件之前刷新应用商店一样:
sudo apt update
使用以下命令安装 Nmap。-y
标志会在安装过程中自动确认所有提示:
sudo apt install -y nmap
安装完成后,通过检查其版本来验证 Nmap 是否正确安装。这可以确认安装是否成功:
nmap --version
你应该会看到类似于以下的输出:
Nmap version 7.92 ( https://nmap.org )
为了进一步验证,对本地主机(你自己的机器)进行一次简单的扫描。这有助于你在扫描其他目标之前了解 Nmap 的工作原理:
nmap -sV 127.0.0.1
此命令会扫描你的本地机器 (127.0.0.1
) 并显示开放端口(-sV
标志用于检测服务版本)。你会看到在你的机器上运行的服务列表,这有助于你理解 Nmap 的输出格式。
在这一步中,你将使用 iptables
配置一个简单的防火墙,为你的 Nmap 扫描测试创建一个受保护的目标环境。防火墙就像安全屏障,用于控制网络流量,对于网络安全专业人员来说,了解如何对其进行扫描至关重要。此设置将模拟现实世界中网络扫描需要绕过防火墙保护的场景。
首先,让我们验证你的系统上是否安装了 iptables
。iptables
是一个用户空间实用程序,允许管理员在 Linux 中配置防火墙规则。它应该已经预先安装在 LabEx VM 中:
sudo iptables --version
在创建新规则之前,清除现有的防火墙规则是一个好习惯。这确保我们从一个干净的状态开始,避免与之前的配置发生冲突:
sudo iptables -F
sudo iptables -X
现在我们将设置默认策略。默认策略决定了那些不匹配任何特定规则的数据包的处理方式。我们将丢弃所有传入和转发的流量,同时允许传出连接:
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
即使有严格的防火墙规则,我们也需要允许本地主机(lo)通信。许多系统服务依赖于内部通信,因此这个例外是必要的:
sudo iptables -A INPUT -i lo -j ACCEPT
让我们创建特定的规则来模拟一个受保护的 Web 服务器。这些规则将只允许在 SSH(22)、HTTP(80)和 HTTPS(443)的标准端口上接收传入流量,模拟典型的生产服务器配置:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT ## SSH
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT ## HTTP
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT ## HTTPS
配置规则后,验证它们非常重要。-L
标志列出所有规则,-n
显示数字输出(更快且避免 DNS 查询),-v
提供详细信息:
sudo iptables -L -n -v
你应该会看到显示你配置的规则的输出,以及对不匹配流量的默认丢弃策略。
最后,我们将保存规则以使其持久化。这一步在我们的 LabEx 环境中尤为重要,因为我们不能在 Docker 中使用 systemctl 来在重启后保留规则:
sudo sh -c "iptables-save > /etc/iptables.rules"
在这一步中,你将学习如何使用 Nmap 执行分段扫描,以绕过基本的防火墙保护。防火墙通常会检查完整的网络数据包,但分段扫描会将数据包拆分成更小的片段,这使得那些不会重组片段的简单防火墙规则更难检测到扫描。
首先,验证上一步中的防火墙规则仍然有效。这有助于在测试绕过技术之前建立一个基准:
sudo iptables -L -n -v
对本地主机执行标准的 Nmap SYN 扫描,以查看在不使用任何绕过技术的情况下防火墙的响应。这将显示哪些端口被防火墙主动阻止:
nmap -sS 127.0.0.1
注意哪些端口显示为被过滤或关闭 —— 这些就是防火墙正在保护的端口。
现在使用 -f
选项执行分段扫描。这会告诉 Nmap 将 TCP 头部拆分成多个更小的数据包(8 字节的片段):
nmap -f -sS 127.0.0.1
一些防火墙可能无法正确重组这些片段,从而使扫描能够通过。
为了进行更激进的分段,可以使用 --mtu
选项设置更小的数据包大小。这将最大传输单元(MTU)设置为 16 字节,创建更小的片段:
nmap --mtu 16 -sS 127.0.0.1
更小的片段可能会绕过更原始的防火墙实现。
将分段扫描与时间控制相结合,以增加扫描的隐蔽性。-T2
选项会使扫描速度变慢,从而降低触发入侵检测系统的可能性:
nmap -f -T2 -sS 127.0.0.1
这种方法模拟了更正常的网络流量模式。
比较不同扫描类型的结果,以评估分段扫描的有效性:
nmap -sS 127.0.0.1 | grep filtered
nmap -f -sS 127.0.0.1 | grep filtered
注意被过滤端口数量的任何差异 —— 被过滤端口数量减少表明成功绕过了防火墙。
在这一步中,你将学习如何使用 Nmap 的诱饵扫描技术,将你的真实 IP 地址隐藏在多个虚假源地址之中。这有助于躲避检测,因为这样一来,就更难识别出实际的扫描机器。当安全系统看到来自多个 IP 的流量时,它们很难确定哪个才是真正的扫描器。
首先,验证你当前的 IP 地址,以便了解我们要隐藏的内容。这可以建立一个基准,让你看到诱饵 IP 是如何掩盖你的真实地址的:
ip a
记下你的实际 IP 地址(通常以 172 或 192 开头)。这就是我们要隐藏在诱饵中的地址。
使用 -D
选项执行带有诱饵 IP 的基本扫描。在这里,我们指定了三个虚假 IP,并使用 ME
占位符包含了我们的真实 IP:
sudo nmap -D 192.168.1.1,192.168.1.2,192.168.1.3,ME 127.0.0.1
ME
占位符代表你的真实 IP 地址,它将与诱饵 IP 混合在一起。
为了使诱饵更逼真,可以使用随机 IP 地址。这通常比使用可预测的 IP 模式更好:
sudo nmap -D RND:5 127.0.0.1
这会生成 5 个随机的诱饵 IP 地址,对于监控系统来说,这些地址看起来更自然。
将诱饵技术与之前的绕过技术(如分段扫描 -f
和时间控制 -T2
)结合使用:
sudo nmap -D 10.0.0.1,10.0.0.2,10.0.0.3 -f -T2 127.0.0.1
叠加多种绕过方法会使检测变得更加困难。
通过检查(模拟的)防火墙日志来验证诱饵效果。这可以显示防火墙是如何看到多个源 IP 的:
sudo iptables -L -n -v | grep -E "192.168|10.0"
你应该会看到扫描中使用的所有诱饵 IP 的条目。
对于高级用法,可以指定诱饵网络。这会从同一网络创建一系列诱饵地址:
sudo nmap -D 192.168.1.1-10 127.0.0.1
这会从 192.168.1.0 网络生成 10 个连续的诱饵 IP。
在这最后一步中,你将通过分析防火墙日志并比较不同扫描方法的结果,来评估扫描绕过技术的有效性。这有助于你了解哪些技术成功绕过了防火墙检测,哪些被标记为可疑活动。
首先,检查当前的防火墙日志,查看检测到的扫描尝试。这能让你在测试绕过方法之前,了解正常的防火墙活动是什么样的:
sudo iptables -L -n -v | grep -E "DROP|REJECT"
此命令会显示有多少数据包被防火墙规则阻止,计数器则表明了检测到的尝试次数。
现在创建两份扫描报告用于比较 —— 一份使用基本扫描,另一份使用绕过技术。两者之间的差异将显示出绕过技术的有效性:
nmap -sS 127.0.0.1 -oN basic_scan.txt
nmap -f -D RND:3 127.0.0.1 -oN evasion_scan.txt
第一条命令执行标准的 SYN 扫描,而第二条命令使用了分段扫描(-f)和诱饵 IP(-D RND:3)。
分析扫描结果之间的差异,查看在每种情况下哪些端口被过滤:
diff basic_scan.txt evasion_scan.txt
特别注意每份报告中“filtered”端口的数量 —— 绕过扫描中被过滤的端口数量减少,表明成功绕过了防火墙。
为了专门检查绕过是否成功,重置防火墙计数器,然后在监控检测情况的同时运行一次绕过扫描:
sudo iptables -Z && sudo nmap -f -D RND:3 127.0.0.1 && sudo iptables -L -n -v
计数器的值显示了在你尝试绕过防火墙期间,有多少数据包被检测到。
为了进行全面测试,结合多种绕过技术,以最大程度地提高绕过安全防护的几率:
sudo nmap -f -D RND:5 -T2 --data-length 24 127.0.0.1 -oN final_scan.txt
这里使用了分段扫描、5 个诱饵 IP、较慢的扫描时间(-T2)以及随机数据填充(--data-length 24)。
最后,生成一份总结报告,比较基本扫描和绕过扫描中被过滤的端口数量:
echo "Basic scan filtered ports:" && grep filtered basic_scan.txt | wc -l
echo "Evasion scan filtered ports:" && grep filtered evasion_scan.txt | wc -l
两次扫描中被过滤端口数量的显著减少,表明成功绕过了防火墙。
在本次实验中,你学习了用于网络安全评估的重要 Nmap 防火墙绕过技术。这些练习引导你完成了 Nmap 的安装、基本扫描,并使用 iptables 创建了一个受控的测试环境,以模拟受保护的网络。
你练习了两种主要的绕过方法:使用数据包分段来绕过检测系统,以及使用诱饵 IP 地址来隐藏扫描的来源。这些技能使你能够在遵循道德测试标准的同时,通过模拟现实世界的攻击模式来评估网络防御能力。