nmap如何猜测操作系统?

信息安全 操作系统 港口 地图
2021-08-15 05:47:22

nmap具有猜测操作系统选项的能力-O我很惊讶它可以找到正确的内核或服务包。

* nmap 如何猜测操作系统?

* Windows 7,8、各种 Linux 系统等的常见签名是什么?

2个回答

启发式地nmap 在探测期间观察系统的行为,开发出类似于真实指纹测试的“指纹”,主要寻找细节:

  • 超出规范的行为和额外规范或未定义的行为
  • 重传次数
  • 对碎片和各种 ICMP 探测的响应
  • TCP 序列号、IP ID 号和 TTL 中的模式
  • 具有各种 TCP 选项和标志的行为

这只是一个快速的总结,你可以在这里阅读更详尽的描述 http://nmap.org/book/osdetect-methods.html

然后将指纹与已知指纹的数据库进行比较。如果您扫描了具有唯一指纹的系统,您将得到一个很好的匹配,否则您将根据最佳匹配得到一个猜测(这有时是错误的)。反正这可能是错的,有些人喜欢玩游戏(古老但有趣)。如果没有好的匹配,nmap将鼓励您找出系统是什么并提交

您可以在(可能)中找到指纹/usr/share/nmap/nmap-os-db,但您必须阅读文档才能了解详细信息。

在当前的 nmap 数据库(6.47)中,有 4485 个指纹用于 5009个CPE(平台)名称,其中 800 多个与各种版本的 MS-Windows 匹配,其中 1000 多个与各种 Linux 系统(包括设备)匹配。

这是 Linux 系统的实际签名,即 Asus Nexus 7 平板电脑:

# Linux 3.1.10-g52027f9 #1 SMP PREEMPT Thu Jun 28 16:19:26 PDT 2012 armv71 GNU/Linux, Asus Nexus 7 Android Tablet
Fingerprint Linux 3.1
Class Asus | Linux | 3.X | general purpose
CPE cpe:/o:asus:linux_kernel:3 auto
SEQ(SP=102-10C%GCD=1-6%ISR=108-112%TI=Z%CI=Z%II=I%TS=6|7)
OPS(O1=M566ST11NW6%O2=M566ST11NW6%O3=M566NNT11NW6%O4=M566ST11NW6%O5=M566ST11NW6%O6=M566ST11)
WIN(W1=3890%W2=3890%W3=3890%W4=3890%W5=3890%W6=3890)
ECN(R=Y%DF=Y%T=3B-45%TG=40%W=3908%O=M566NNSNW6%CC=Y%Q=)
T1(R=Y%DF=Y%T=3B-45%TG=40%S=O%A=S+%F=AS%RD=0%Q=)
T2(R=N)
T3(R=Y%DF=Y%T=3B-45%TG=40%W=3890%S=O%A=S+%F=AS%O=M566ST11NW6%RD=0%Q=)
T4(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T5(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
T6(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)
T7(R=Y%DF=Y%T=3B-45%TG=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)
U1(DF=N%T=3B-45%TG=40%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)
IE(DFI=N%T=3B-45%TG=40%CD=S)

(哇,这不漂亮,因为你可以在你的 nmap 安装中找到它们,nmap-os-db所以我不会展示更多。)

我会选择一个简单的字段IE()——ICMP 回显行为(ping 很简单,对吧?)

IE(DFI=N%T=3B-45%TG=40%CD=S) 

如果你检查一下,你会看到它与超过 1250 个其他系统共享(其中大约三分之二是 Linux 系统)。

从文档中:

IE 测试涉及向目标发送两个 ICMP 回显请求数据包。第一个设置了 IP DF 位,服务类型 (TOS) 字节值为零,代码九(即使它应该为零),序列号 295,随机 IP ID 和 ICMP 请求标识符, 和 120 字节的 0x00 用于数据有效负载。

第二个 ping 查询类似,只是使用了四的 TOS (IP_TOS_RELIABILITY),代码为零,发送了 150 字节的数据,并且 ICMP 请求 ID 和序列号从之前的查询值加一。

这解码为:

  • DFI=N 没有 ICMP 回复将设置 DF(不分段)
  • T=3B-45 TTL 将介于 0x3B 和 0x45 之间
  • TG=40 IP初始TTL猜测
  • CD=S ICMP 响应代码(与 ICMP 请求探测相同)

您可以在此处找到所有这些代码和详细信息其他字段包含 ECN、TCP 序列(SEQ、OPS、WIN、T1)和 TCP 选项(T2-T7)的类似详细数据。

http://nmap.org/book/osdetect-methods.html#osdetect-probes-seq的 mmap 文档中提供了使用的各种测试的列表。有关更具体的详细信息,您必须阅读源代码。

基本上发送了各种不同的探测包并分析了结果。TCP/IP 软件之间的细微差别意味着对某些探测数据包的响应有时会存在细微差别。通过足够的测试,您可以组合出一个非常准确地识别操作系统的指纹。

一个例子可能会有所帮助。如果您从主机接收 TCP 数据包,它包含许多标头选项。RFC793中TCP 协议的定义没有指定这些选项应该按什么顺序排列。因此,如果为 BeOS 编写网络代码的人将这些选项按特定顺序排列,并且您会收到一个带有选项的数据包顺序,那么您可以推断该数据包可能来自 BeOS 主机。这可能不足以确定它是 BeO。也许 Haiku 中的 TCP 堆栈将选项按相同的顺序排列。因此,您必须找到其他一些测试,它可以为 BeOS 的数据包提供与 Haiku 的数据包不同的结果。