绕过防火墙和IDS检测的NMAP高级技巧有哪些?
NMAP参数详解
在网络安全测试中,Nmap无疑是端口扫描与网络探测的瑞士军刀。然而,现代防御体系早已不是十年前的模样,配置得当的防火墙(Firewall)和入侵检测系统(IDS)会像精密的筛网,轻易过滤掉那些粗暴的SYN洪水或全端口扫描。一位经验丰富的渗透测试者,其高明之处往往不在于他扫描了多少个端口,而在于他如何让扫描流量“看起来”不像扫描。这背后,是一系列精妙且需要深刻理解网络协议栈的规避技巧。
时间伪装:让扫描“慢”下来
IDS最常见的检测规则之一就是基于流量速率。想象一下,一台主机在几毫秒内向目标的所有65535个端口发送SYN包,这种异常行为就像在寂静的图书馆里突然敲锣打鼓。Nmap提供了多种参数来打乱这个节奏。
--scan-delay <time>:在发送每个探测包之间插入固定的延迟,例如--scan-delay 1s会让扫描慢如蜗牛,但极难被基于速率的规则触发。--max-rate <number>:直接限制每秒发送包的最大数量,将扫描流量稀释到正常背景噪音的水平。--max-parallelism <number>和--min-parallelism <number>:控制并行探测的数量。降低并行度,配合随机化,能让扫描行为更接近人类或合法应用的试探性连接。
数据包“化妆术”:碎片化与MTU操纵
有些古老的防火墙或IDS为了性能,可能只检查IP分片的首个片段。Nmap的-f选项会将TCP头分成多个小IP片段发送。更精细的控制可以使用--mtu <size>,指定一个非常规的MTU(如24字节),迫使数据包被分割。这种技巧的目标是让目标主机在重组数据包后看到完整的TCP SYN请求,而中间设备看到的只是一堆无害的、不构成威胁的碎片。不过,随着现代系统对碎片攻击的防御加强,其有效性已大不如前。
源地址的“影子舞团”:诱饵扫描
这是Nmap中最具迷惑性的技巧之一。-D <decoy1,decoy2,ME,...>选项允许你指定一系列诱饵IP地址。Nmap会从这些伪造的源地址向目标发送大量冗余的探测包,同时混杂着你真实的扫描流量。从目标的视角看,攻击仿佛来自互联网上成百上千个不同地点,这让管理员难以分辨真正的攻击源,也极大地增加了日志分析的噪音。你可以使用RND:参数随机生成诱饵,或者精心选择一些活跃的、信誉良好的IP地址(比如大型云服务商的IP),效果更佳。
协议栈的“非主流”路径
绕过状态防火墙的一个经典思路是发送它“不认识”或“不处理”的包。这就是NULL扫描(-sN)、FIN扫描(-sF)和Xmas扫描(-sX)的用武之地。它们发送的TCP包分别设置了全零标志位、仅FIN标志位、以及FIN、URG、PUSH标志位(像点亮灯的圣诞树)。根据RFC,关闭的端口应当回复RST,而开放或被过滤的端口则无响应。但问题在于,这些非标准的扫描方式无法在Windows系统上正常工作,且许多现代IDS已经将其特征纳入规则库。
更隐蔽的是-sI <zombie host[:probeport]>(空闲扫描)。它利用一台第三方“僵尸主机”(其IP ID序列为递增的),通过它向目标发送伪造的探测包,并观察其IP ID的增长情况来推断目标端口状态。这种扫描完全不暴露扫描者的真实IP,堪称“无痕”攻击。但找到合适的、IP ID可预测的僵尸主机本身就是个技术活。
应用层隐身:伪装成合法流量
最高级的规避发生在应用层。Nmap的NSE(Nmap Scripting Engine)脚本http-default-accounts或smb-brute在进行认证尝试时,其流量模式与正常用户登录并无二致。关键在于速率和模式的模仿。此外,通过--source-port <portnumber>或-g选项,可以将扫描流量源端口伪装成53(DNS)、80(HTTP)等常见服务端口。某些配置粗糙的防火墙规则可能只允许来自特定端口(如53)的入站UDP流量,这便给了扫描可乘之机。
说到底,这些技巧并非“银弹”。它们的有效性完全取决于防御者的配置深度和规则的新旧。一次成功的规避扫描,往往是多种技巧的组合:用诱饵分散注意力,以极低的速率和随机延迟发送经过碎片化的数据包,并选择非常规的扫描标志位。真正的较量,发生在对网络协议理解的毫厘之间。当你的扫描流量在IDS的日志里看起来就像一阵无关紧要的微风时,你才算真正摸到了网络侦察的艺术门槛。

参与讨论
这招真的管用
先把–scan-delay调到几秒,再配合-f碎片化,外加-D随机诱饵,一套下来几乎让防火墙摸不着头脑,真是渗透神器。再配合–max-rate限制速率,基本看不出异常。
可以把源端口伪装成53,这样很多只放行DNS流量的防火墙会直接放行扫描。
这种碎片化方式在新版linux内核上还有效果吗?会不会被内置的防护直接丢掉?