Nmap与Queso扫描在IDS眼中的检测级别分析
发布时间:2026/10/22 12:55:46 锦皓数字建站

做网络安全的提到 Nmap 应该没人陌生端口扫描、服务识别、脚本扩展几乎是一站式解决。而 Queso 这个名字年轻一点的同行可能压根没听过它是很早期的一款操作系统指纹识别工具比 Nmap 内嵌的 OS 检测功能还要早。把这两个工具放在一起聊“入侵检测级别分析”本质上是在回答一个问题当你在网络里发起一次探测行为时对方的安全设备到底有多大概率能看见你告警会打到什么级别甚至会不会直接被拦下来。这个问题对三类人都有价值。做攻防演练的人想知道探测动作如何暴露自己安全运维人员需要反过来知道扫描器在 IDS 里的样子才能把规则调准、把误报压下去刚入行的新人则可以借此把 TCP/IP 栈特征、指纹识别、入侵检测这些知识点串成一条线。这篇文章我会从两个工具的探测原理出发拆解它们在 IDS 眼中的暴露特征再分享一组在隔离网络里实测对比的结果最后把常见问题排查经验和一些实操心得一并整理出来。整个实验都在我自己的受控环境中进行这一点后面会再强调。1. 为什么把 Nmap 和 Queso 放在一起谈1.1 两个工具的经典定位Nmap 的全称是 Network Mapper它的定位是一个综合性的网络探测与安全审计工具。端口扫描是它的核心能力服务版本识别、操作系统指纹、UDP 探测、防火墙规避技术、脚本引擎 NSE 等也都集成在同一个框架里。它的设计目标非常明确尽可能全面、高效地把目标主机的网络信息摸清楚。Queso 的定位则窄得多。它只做一件事就是操作系统指纹识别。通过向目标发送一组精心构造的 TCP 探测包收集响应报文中的 TTL 值、窗口大小、DF 标志、TCP 选项等细节将这些数值组合成一个特征向量再与本地指纹库比对推断目标操作系统类型。这个工具出现的年代很早早到当时 Nmap 自己都还没有内置的 OS 检测能力。两个工具放在一起看有意思的地方在于一个是覆盖面极广的“瑞士军刀”一个是功能极专的“手术刀”。但它们的底层动作其实一样都是发送构造特殊的数据包、观察目标响应、从响应差异里推断目标状态。这也意味着它们在被入侵检测系统观察时的行为模式既有共同点也有显著差异。1.2 检测级别分析到底在分析什么先说清楚“检测级别”这个词在这里的定义。它不是指工具本身的检测能力有多强而是指工具发出的探测行为在入侵检测系统面前有多容易被发现和定性。我习惯用一个 L0 到 L4 的级别来描述L0几乎不留下可被识别的网络痕迹L1会产生连接日志或流量记录但不触发告警L2统计型异常检测可能产生告警但没有明确的攻击签名L3特征签名能明确识别出扫描探测行为告警级别升高L4特征签名明确且处置策略激进IPS 可以直接阻断并溯源分析一个探测动作处于哪个级别主要看四个维度。第一是单包特征也就是数据包有没有明显的异常标志位组合第二是复合指纹也就是多个探测包组合起来是否构成某种已知工具的探测模式第三是统计行为比如短时间内的连接频率、端口数量、连接失败比例第四是协议上下文比如一个源 IP 同时向大量目标端口发起 SYN或者持续发送只有扫描器才会发的 TCP 选项序列。明确了这套评价框架后面所有对比和实测记录才有统一的标尺。2. 入侵检测系统如何盯上扫描行为2.1 特征匹配与行为建模两条主线入侵检测系统识别扫描行为的思路大体分两类。一类是特征匹配也叫签名检测它维护一个规则库每条规则描述一种已知攻击或探测行为的数据包特征网络流量经过实时比对命中规则就产生告警。这类检测的优点是准确率高、误报率相对可控缺点是很依赖规则库的更新速度新型的探测手法规避了已知特征就可能直接漏过。另一类是行为建模也叫异常检测。它先记录网络在一段时间内的正常流量基线然后周期性对比当前流量与基线的偏差。比如某个 IP 平时一分钟只建立几十个连接突然在五秒内扫了上千个端口行为评分就会急剧上升。这类检测不依赖具体规则能抓住没有已知签名的扫描行为但误报率通常偏高运维人员经常被正常的业务突发流量触发告警折腾到失去耐心。实际部署的入侵检测系统基本都是两条路线混合使用。特征匹配负责“看得准”行为建模负责“看得全”。对于 Nmap 和 Queso 这类主动扫描工具来说它们的探测包大多有非常明确的特征因此在特征匹配这一层就已经非常显眼。2.2 Nmap 各类扫描模式在 IDS 眼中的曝光度对比Nmap 支持的扫描模式非常多不同模式在 IDS 眼中的“曝光度”差异很大。我把常用的几种模式整理成了一张表方便对照。扫描模式原理简述典型检测级别暴露原因TCP Connect-sT完整三次 TCP 握手L2-L3连接日志必然存在大量握手会话触发行为告警SYN 半开扫描-sS只发 SYN不完成握手L3大量 SYN 包无响应或 RST 后结束特征签名明确FIN / NULL / Xmas-sF/-sN/-sX构造异常标志位组合L3正常应用几乎不会发送这类包签名命中率极高UDP 扫描-sU发送 UDP 探测包L2-L3UDP 流量本身就敏感ICMP 不可达回复会放大存在感空闲扫描-sI借僵尸主机的 IPID 序列间接探测L1源 IP 被伪装常规签名不覆盖但行为异常可能被统计捕获OS 指纹-O多组 TCP 探测包比对响应特征L3探测包组合本身就是一种强签名特征综合扫描-A端口扫描 服务识别 OS 指纹 脚本L3-L4探测流量种类多暴露面明显放大这里有个容易忽略的点即使两个模式都被标为 L3它们被发现的路径并不一样。SYN 半开扫描靠的是“大量 SYN 无后续握手”这个特征而异常标志位扫描靠的是“单个包内容不合法”。理解这一点很重要因为防御方排查时要看的规则类型完全不同。3. 指纹识别技术如何暴露行为特征3.1 Queso 的指纹识别原理与暴露点Queso 的探测原理可以概括成“发一组怪包看一组怪响应”。它会向目标主机的某个开放端口发送多个精心构造的 TCP 数据包这些包往往包含各种不常见的标志位组合和 TCP 选项。目标主机的操作系统网络协议栈在回应这些包时会根据自己的实现细节给出不同的 TTL、窗口大小、时间戳行为、TCP 选项排序等结果。每个操作系统的协议栈都有自己独特的实现偏好比如某些版本的 Linux 在收到特定标志位组合时会返回带某个窗口缩放因子的包某些版本的 Windows 则会在 TCP 选项中包含特定的时间戳。这些偏好组合起来就构成了该操作系统在网络层上的“指纹”。Queso 把观察到的一组数值与指纹库比对就能推断出目标大概运行的是什么系统。从行为检测的角度看Queso 有一个致命的弱点它发送的探测包组合太特殊了。一个正常的浏览器、数据库客户端或者即时通讯软件几乎不可能发出那样一组带有异常标志位组合的 TCP 包。这意味着 IDS 规则库里识别 Queso 的特征写起来很容易命中率也非常高。只要规则库里有一条匹配这类组合的规则Queso 的探测行为几乎必被标注为 L3-L4 级别。3.2 Nmap 对 Queso 的继承与升级Nmap 内嵌的 OS 指纹检测功能在设计思路上继承了 Queso 的基本逻辑发送一组特定的探测包收集响应差异匹配指纹库。但 Nmap 在此基础上做了大量升级探测包的种类更多、优先级分析更细、指纹库规模也大得多。现代版本 Nmap 的 OS 检测会综合更多字段比如 TCP 初始序列号的可预测性、TCP 时间戳的更新频率、IP ID 生成方式等。这种继承和升级是一把双刃剑。从识别能力的角度看Nmap 比 Queso 准得多这是好事从被检测的角度看探测包数量越多、组合越复杂数据包形态上的“特异性”也越强IDS 的特征规则反而更容易命中。所以我的实测结论是单论识别准确性Nmap 远胜 Queso单论被检测的难易程度两者没有本质差别都处于很容易被特征签名捕获的区间。Queso 在今天还有多少实用价值坦率说作为主力工具已经不太合适了指纹库老旧、不支持现代操作系统的新的 TCP 栈特性、也不支持 IPv6。它真正的价值在教学和交叉验证上。理解 Queso 的探测包设计能帮人建立“操作系统在网络层如何暴露自身”的直观认识在测试某些老旧的嵌入式设备时Queso 的简单探测偶尔反而比 Nmap 的复杂探测更容易得到稳定响应。4. 受控网络实测检测级别量化对比4.1 实验环境与准备为了把“检测级别”从纸面概念变成可观察的数据我搭了一套隔离实验环境。整张实验网络不连接外部网络使用文档保留网段 192.0.2.0/24避免影响真实环境也避免打扰他人。环境里有三台虚拟机。第一台是攻击机安装 Nmap 和 Queso第二台是目标机运行常见 Web 服务和数据库服务操作系统选择的是较常见的服务器版本第三台是检测机部署一套开源的网络入侵检测系统镜像口接在同一个虚拟交换机上监听整个网段的流量。检测机上同时开启特征匹配模块和行为统计模块并加载了一套包含常见扫描签名的规则集。开始测试前我先采集了十分钟的基线流量确认在没有任何探测行为的正常情况下检测系统不会产生任何扫描类告警。这一步非常关键否则后面出来的告警数据会被环境自身的偶发流量污染无法判断到底是谁触发的。4.2 分阶段测试记录与结果对比整个测试分成四个阶段每个阶段之间重置检测机的告警统计避免前后数据叠加。第一阶段用 Queso 对目标机做一次完整指纹识别。Queso 的探测包数量不多但在检测机上几乎立刻产生了一条级别很高的告警规则名称直接指向目标机的 TCP 标志位异常组合。随后从告警详情里能看到探测包中同时包含 FIN、URG 和 PSH 标志位的组合这在正常业务流量里几乎不可见。这个结果和前面的分析一致Queso 的特征暴露非常明显。第二阶段用 Nmap 的 SYN 半开扫描对目标机进行全端口扫描。告警数量明显增多检测机先产生了一条统计类告警提示某个源 IP 在短时间内连接了大量端口紧接着特征规则也命中将行为定性为端口扫描。整个过程从开始扫描到告警产生间隔不超过两秒。检测级别实测为 L3。第三阶段分别测试 Nmap 的 FIN 扫描、UDP 扫描和空闲扫描。FIN 扫描的告警特征非常单一但命中极快规则匹配点几乎只在包标志位上。UDP 扫描的告警则更多来自行为统计因为正常的应用很少向目标连续发送大量 UDP 探测包。空闲扫描最安静检测机没有产生任何告警但在流量日志里能看到目标机与僵尸主机之间出现了异常的 IPID 序列波动这种流量在专网环境里其实可以被更高级的关联分析模型发现只是常规规则集不会覆盖。第四阶段测试用随机目标顺序、源端口绑定、慢速扫描结合的方式执行一次 SYN 扫描。结果很有意思源端口绑定完全无效检测机照样告警慢速扫描确实让行为统计类告警消失了但特征签名规则仍然在少数几次 SYN 后就直接命中。也就是说速率降低只对行为建模有效对特征匹配几乎没有影响。四个阶段的告警数据对比如下测试阶段告警数量最高告警等级触发机制Queso 指纹识别1高特征匹配Nmap SYN 全端口扫描7高特征匹配 行为统计Nmap FIN 扫描2中高特征匹配Nmap UDP 扫描4中行为统计为主Nmap 空闲扫描0无常规规则集不覆盖慢速 SYN 源端口伪造3高特征匹配这些数据再次验证了一个结论对主动探测工具来说特征匹配层面的暴露基本上无法靠调整速率来规避。真正决定检测级别的是你发出的数据包内容本身像不像这个工具而不是你发得多快。5. 从结果反推攻防双方的博弈细节5.1 为什么高速率扫描总是被秒杀很多人在实验环境里第一次用 Nmap 做全端口扫描时都会惊讶于 IDS 的反应速度。其实这个机制不复杂。行为统计模块维护着一个滑动窗口窗口里记录着单位时间内同源 IP 的新连接数、失败连接数、重置连接数等指标。一旦指标超过阈值告警立刻产生。Nmap 的默认速率对于内网环境来说太快了几千个端口几秒钟就扫完了这在行为特征上是非常突出的异常。从防御视角来看这个特征的可用性很高。规则配置时可以把阈值设置得相对保守一些因为正常的业务主机几乎不可能在几秒钟内对同一台服务器的所有端口发起连接。合理的告警阈值可以在不漏报正常扫描行为的前提下把业务突发流量带来的误报控制在一定水平。从工具使用者视角来看最简单的规避思路是降速比如采用 T1 或者 T2 级别的计时策略。实测下来行为统计类告警确实会消失但特征签名类告警仍然存在。换句话说降速只能让你的行为看起来不那么突兀并不能改变数据包本身的辨识度。真想降低暴露面得从数据包构造层面想办法。5.2 分片、诱饵、源端口看起来有效实际如何网络上关于 Nmap 规避检测的讨论经常提到三个技巧分片、诱饵和伪造源端口。这三个我都做了实测结论差异很大。分片是把探测包的 TCP 头拆成多个分段发送。早期的一些防火墙只会检测完整的 TCP 头分片确实能绕过它们。但现代 IDS 几乎都具备 IP 分片重组能力会在重组后重新执行规则匹配所以分片实际带来的规避效果非常有限。更麻烦的是一部分检测系统会把非正常的分片流当作异常事件单独记录反倒增加了暴露面。诱饵是生成多个伪造源 IP 的探测包让目标看起来像是被多台主机同时扫描。这在日志层面确实能增加分析成本但现代 IDS 完全可以关联到诱饵包的 TTL 值、TCP 窗口大小等细节判断出这些流量实际来自同一台设备。所以诱饵对单点 IDS 的迷惑效果在下降反而可能触发“多源协同扫描”这类更高级的告警。伪造源端口则是把探测包的源端口绑定为 53 或 80制造一种“这是 DNS/HTTP 流量”的假象。实测表明早期规则确实会被骗过但只要检测系统进入基于会话状态的深度检测模式这个技巧基本失效。因为状态引擎会检查源端口是否为已知服务并且校验整个会话的协议交互是否符合服务预期。相比之下把注意力放在数据包构造本身比如调整 TCP 选项的排列、减少特征鲜明的标志位组合才是更有效的方向。从防御角度补一句针对这些手法的规则设计重点应该放在“组合特征”而不是“单点特征”。单看一个诱饵包它和正常流量没有区别但把同源多目标、TTL 异常、TCP 窗口一致性等特征关联起来就能把伪装撕开。5.3 对防御体系建设带来的几点参考实测数据本身只是验证了一些已知结论真正有价值的是它对防御体系的参考意义。第一规则库一定要覆盖早期工具的探测特征。Queso 这种工具虽然已经很少被日常使用但其探测包特征可能在一些定制工具中被复用。规则库里保留这些签名成本很低却能有效避免漏报。第二行为统计的阈值需要根据自身网络的基线做调优。很多 IDS 默认阈值来自通用场景放到一对一的实验室环境或者大流量生产环境都不一定合适。没有经过基线调优的告警系统要么在敏感场景下不触发要么在日常流量里被误报淹没。第三告警必须结合上下文关联分析。单看“SYN 扫描”和单看“TCP 选项异常”也许都不足以定性攻击意图但如果同时出现“扫描 指纹识别 服务版本探测”的组合那几乎可以确定是一次有预谋的信息收集动作。把告警事件串成攻击链比单点告警有价值得多。6. 常见问题与排查技巧实录6.1 常见问题速查实际操作中会遇到不少书本上没有的情况我把最典型的几个列成了一张速查表。问题表现可能原因排查与应对思路扫描后 IDS 一条告警都没有监听位置不在流量路径上或者规则库未包含相关签名检查镜像口配置查看检测机是否确实收到了目标机的响应流量再确认规则集版本Queso 识别结果与实际系统不符指纹库老旧虚拟机/容器环境的协议栈特征与实体机差异大用 Nmap 的 OS 检测交叉验证同时参考服务版本信息和 TTL 分析诱饵扫描导致告警数量暴增检测系统把多个伪造源 IP 关联为“多源协同扫描”这类场景下诱饵不但没有隐藏痕迹反而放大了异常特征应减少使用或放弃使用慢速扫描仍然触发告警特征签名规则不看速率只看数据包内容确认命中的是哪一类规则如果是签名类则只能从数据包构造层面调整扫描过程导致目标服务响应异常某些异常标志位组合触发了老旧系统协议栈的缺陷对老旧设备使用更保守的扫描模式避免同时发送大量非常规组合包Nmap 的 OS 检测输出多个候选系统目标在网络层做了协议栈伪装或者中间设备修改了 TTL对比候选系统的 TTL 基数、TCP 选项顺序并结合开放端口指纹综合判断6.2 经验技巧与潜在坑位排查经验里最容易被忽略的一点是拿到告警后第一步不是马上调规则而是确认告警所引用的数据包确实来自你正在进行的测试。有一次我在实验环境里看告警日志发现一个持续不断的扫描告警但当时根本没有跑扫描工具。排查后才发现那是检测机所在虚拟网络里的一台设备在后台执行自动更新其流量特征恰好被某条规则误判为扫描。类似情况在生产环境里更常见把自动化运维工具的周期性行为当作扫描告警是安全团队被误报折腾得最头疼的场景之一。另一个坑是版本差异。不同版本的 Nmap 在默认行为上存在差异比如某些版本会默认带上服务版本探测而某些版本需要显式指定。这意味着同一条命令在不同版本上产生的流量形态不同、暴露面也不同。做规则测试或者复现问题时最好固定工具版本并在记录中标注版本信息。还有一点关于 Queso 的使用在虚拟机里做指纹识别时结果非常不稳定。虚拟机的虚拟网卡对 TCP 选项的处理和实体网卡不一样TTL 也经常是经过虚拟交换机调整过的默认值。这时候 Queso 的指纹匹配准确率会明显下降不能把它的输出当作决定性结论。更合理的做法是用它做初步筛查再用 Nmap 或者协议栈层面的详细分析做最终确认。最后想说的一点个人体会把 Nmap 和 Queso 放在一起做了这么一轮分析之后我的感受是真正决定检测级别的不是工具本身而是你对流量结构有多少理解。Nmap 功能强大但如果使用者不清楚每一种扫描模式在网络上呈现出的数据包形态那它和蒙眼开枪没有区别Queso 虽然古老但它的设计思路能让人直观地看到操作系统协议栈是如何在网络层暴露自己的。我给新人的建议是不要一上来就急着找所谓“隐身扫描”技巧。先在受控环境里把每种扫描模式的流量特征看明白搞清楚哪些行为会被特征匹配捕获、哪些会被行为建模发现再考虑如何调整。这些基本功一旦打牢无论是做攻防对抗还是做安全运营分析你都会比别人多一层判断力。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。