网络安全对抗演练:扫描器 Nmap 的设备指纹算法

admin 2025年6月26日16:32:03评论4 views字数 3685阅读12分17秒阅读模式
本文偏技术细节,网络扫描工具中最著名的非Nmap莫属,在作者看来Nmap是个好用并且有学习价值的工具,否则也不会从1997年出现至今经久不衰。作为开源软件,凝结了大量安全研究人员的努力,无论是代码结构上的设计还是细节处每一个建立在对网络协议深刻理解的完备考虑,都有一定程度工程和学习的指导意义。

本系列文章来自作者对Nmap源码改造移植后整理出的学习笔记。Nmap系列分为多个章节,本篇是最后一篇,描述Nmap的设备识别算法。

本文面向对Nmap有高级用法的读者。

目录

  1. 指纹生成算法
  2. 指纹比对算法
    1. 如何自定义设备指纹
  3. 总结

一、指纹生成

Nmap在扫描网络中的设备期间,会发送 16 个探测包。同时将探测采集到的信息结果,做一定的变换,计算出下面的 28 个指标集合。这些指标计算的源码非常晦涩难懂,例如GCD就是计算最大公约数,W1就是计算窗口大小,可以看懂个大概。但是像TG、RD、RUCK和TS等的源码含义几乎看不懂。。。

GCD:用前六个非 T 类型探测包的 TCP 序列号差值,取这些差值的最大公约数。ISR:计算探针返回包的 SEQ 差值与发送时间差的比率(即 SEQ 发送速率),取平均值后通过公式转换,反映系统响应速率特征。C:对 SEQ 发送速率取以 2 为底的对数,再转换为无符号整数,用于量化速率特征。SP:评估 TCP 序列号的可预测性程度,辅助判断操作系统的序列号生成策略。ID:通过 TCP、UDP、ICMP 响应包的 IP ID 号,判断 IP ID 生成算法(如增量、随机、中断增量等),不同系统的生成规则不同。SS:判断目标是否在 TCP 和 ICMP 协议中共享 IP ID 序列,用于辅助系统识别。TS:分析 TCP 时间戳选项的增量速率,根据每秒增量值判断系统特征(如支持频率、是否不支持等)。O 系列(O1-O6):记录 TCP 数据包的选项参数及顺序,不同系统对 TCP 选项的支持和实现存在差异。W 系列(W1-W6):记录 TCP 连接的初始窗口大小,不同操作系统的默认窗口值具有特征性。R:标记目标是否响应探测包(Y 为响应,N 为不响应),是后续指标分析的前提。DF:检查 IP 包的 “不分片” 标志是否启用,用于判断网络层传输策略。DFI:在两个 ICMP 请求中检查 “不分片” 标志的一致性,辅助识别系统网络栈特性。T:记录初始生存时间(IP.TTL),不同系统的默认 TTL 值不同(如 Windows 通常为 128,Linux 为 64)。TG:将初始 TTL 值归类为 3264128 或 255,简化 TTL 特征以匹配操作系统指纹。CC:通过 ECN 探测包的 SYN/ACK 响应,判断系统对显式拥塞控制的支持情况(Y/S/N/O)。Q:检测 TCP 包的异常特征(如保留字段非零、URG 指针异常),反映系统网络栈的实现 quirks。S:对比返回包的 TCP 序列号与发送时的确认号关系,判断系统的序列号处理逻辑(Z/A/A+/O)。A:对比返回包的 TCP 确认号与发送时的序列号关系,辅助识别系统响应特征(Z/S/S+/O)。F:记录 TCP 响应包的标志位组合(如 ECE、URG、ACK 等),不同系统的标志位设置规则不同。RD:计算 RST 包数据的 CRC32 校验和,某些系统在 RST 数据校验上存在特殊处理。IPL:记录 IP 包头长度,用于验证数据包格式的一致性。UN:检查 ICMP 端口不可达报文中未使用字段是否非零,部分系统存在该字段异常的特征。RIPL:在 UDP 测试中,校验 ICMP 返回包的 IP 总长度,与预期值对比(如 328 字节对应 “G”)。RID:校验 ICMP 返回包的 IP ID 是否与发送时一致,用于判断系统对 IP ID 的处理策略。RIPCK:验证 ICMP 返回包的 IP 校验和完整性,判断系统是否修改了校验和。RUCK:检查返回的 UDP 包校验和是否正确,反映系统对 UDP 校验的处理机制。RUD:验证返回的 UDP 数据是否完整,辅助判断网络传输中的数据一致性。CD:对比两个 ICMP 响应的代码值,判断其一致性(如相同值、与发送方一致或其他),用于识别系统响应模式。
二、指纹比对

在生成上面的指标之后,就获得了这个网络设备的指纹。但是现在还不知道这个设备是什么,需要拿着这些计算出的指标,在 nmap-os-db文件中查找比对。例如下面的这个指纹库的样例,如果计算出的指纹和如下数据值范围有可观的相似度,那么就说明当前扫描到的这个设备,是一个 3com 或者是一个 华为的交换机。

# 3Com Switch 4210 26-Port Software Version 3Com OS V3.01.01s56, Bootrom  Version is 4.01# Quidway S5624F, VRP software, Version 3.10, Release 1510P02Fingerprint 3Com 4210or Huawei Quidway S3928P-EI or S5624F switch (VRP  3.10)Class 3Com | embedded || switchClass Huawei | VRP | 3.X | switchCPE cpe:/o:huawei:vrp:3.10 autoSEQ(SP=FF-109%GCD=1-6%ISR=105-111%TI=I%II=I%SS=S%TS=U)OPS(O1=M200%O2=M200%O3=M200%O4=M200%O5=M200%O6=M200)WIN(W1=2000%W2=2000%W3=2000%W4=2000%W5=2000%W6=2000)ECN(R=Y%DF=N%T=FB-105%TG=FF%W=2000%O=M200%CC=N%Q=)T1(R=Y%DF=N%T=FB-105%TG=FF%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=Y%DF=N%T=FB-105%TG=FF%W=1FC4%S=O%A=O%F=A%O=%RD=0%Q=)T4(R=Y%DF=N%T=FB-105%TG=FF%W=2000%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=N%T=FB-105%TG=FF%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=N%T=FB-105%TG=FF%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=N%T=FB-105%TG=FF%W=0%S=Z%A=S%F=AR%O=%RD=0%Q=)U1(DF=N%T=FB-105%TG=FF%IPL=38%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=0%RUD=G)IE(DFI=S%T=FB-105%TG=FF%CD=S)

在计算的过程中,每个指标需要按照不同权重加和。权重表在 nmap-os-db 文件的最开始处。其内容如下所示。

MatchPointsSEQ(SP=25%GCD=75%ISR=25%TI=100%CI=50%II=100%SS=80%TS=100)OPS(O1=20%O2=20%O3=20%O4=20%O5=20%O6=20)WIN(W1=15%W2=15%W3=15%W4=15%W5=15%W6=15)ECN(R=100%DF=20%T=15%TG=15%W=15%O=15%CC=100%Q=20)T1(R=100%DF=20%T=15%TG=15%S=20%A=20%F=30%RD=20%Q=20)T2(R=80%DF=20%T=15%TG=15%W=25%S=20%A=20%F=30%O=10%RD=20%Q=20)T3(R=80%DF=20%T=15%TG=15%W=25%S=20%A=20%F=30%O=10%RD=20%Q=20)T4(R=100%DF=20%T=15%TG=15%W=25%S=20%A=20%F=30%O=10%RD=20%Q=20)T5(R=100%DF=20%T=15%TG=15%W=25%S=20%A=20%F=30%O=10%RD=20%Q=20)T6(R=100%DF=20%T=15%TG=15%W=25%S=20%A=20%F=30%O=10%RD=20%Q=20)T7(R=80%DF=20%T=15%TG=15%W=25%S=20%A=20%F=30%O=10%RD=20%Q=20)U1(R=50%DF=20%T=15%TG=15%IPL=100%UN=100%RIPL=100%RID=100%RIPCK=100%RUCK=100%RUD=100)IE(R=50%DFI=40%T=15%TG=15%CD=100)

操作系统扫描的结果最多会有 10 个,且默认保留大于 0.85 的指纹数据。

指纹的自定义

如果发现Nmap扫描不准,例如把打印机识别成了智能马桶,可以将这个打印机的指纹添加到指纹库中,下次再扫描时就会显示正确的结果了。也可以贡献这些数据到nmap开源项目中。

网络安全对抗演练:扫描器 Nmap 的设备指纹算法
 

原文始发于微信公众号(青木生长):网络安全对抗演练:扫描器 Nmap 的设备指纹算法

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月26日16:32:03
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   网络安全对抗演练:扫描器 Nmap 的设备指纹算法https://cn-sec.com/archives/4202888.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息