操作系统协议栈指纹
(Namp使用手册)[https://nmap.org/man/zh/man-port-scanning-techniques.html]
前置知识–主动扫描摘记(主动指纹识别是指主动往远程主机发送数据包并对相应的响应进行分析的过程,使扫描器在更短的时间内获得比被动扫描更准确的结果。):
网络层:ping命令,icmp协议,速度快(可跨网段):防护墙可以静ping(检测报文中协议类型为01,即icmp协议便丢弃)。
- ping失败后,可查看arp缓存表(arp -a)是否存在mac地址(仅限同一个子网)
运输层(TCP,UDP):端口扫描,
- :one:TCP协议扫描,全连接扫描
- :two:UDP协议扫描
- :three: SYN扫描
系统的指纹实际上来源于TCP/IP协议栈。TCP/IP协议栈技术只是在RFC文档中描述,并没有一个统一的行业标准,各个公司在编写应用于自己的操作系统的TCP/IP协议栈时,对RFC文档做出了不尽相同的诠释,造成了各个操作系统在TCP/IP协议的实现上有所不同。通过比较不同的操作系统的TCP/IP协议栈的细微差异,就可以判定操作系统类型及版本,这种方式也称为“指纹方法学”。
例如我们可以通过ping命令观测TLL值得大小来是否为windows和liunx系统。亦可以使用nmap扫描指定好参数就可以探别系统版本和信息。
TTL即Time to live,是由发送数据包的计算机等设备设置的。数据包每次经过路由转发后,该值都会被减1,当TTL值变为0,该数据包便会被丢弃。
常见系统的TTL值->实际探测会因为经过路由不断衰减而改变,但一般大致范围不会变(可计算),不影响判断。
Windows 9x/NT/2000 Intel 128
Digital Unix 4.0 Alpha 60
Linux 2.2.x Intel 64
Netware 4.11 Intel 128
参考王轶骏,薛质,李建华的《基于TCP/IP协议栈指纹辨识的远程操作系统探测》论文后可以得知:文章内容实现远程操作系统辨识的各种技术类型进行了概括(基于TCPP协议栈的指纹查询和辨识)
通过探测并仔细分析这些TCP/IP协议栈指纹的细微差异,就能够精确地辨识出远程操作系统,这就是“栈指纹辨识”(Stack Fingerprinting)技术。最为经典的栈指纹辨识技术由Fydo提出,它通过构造并发送不同类型的数据包(既有正常的也有畸形的数据报)来收集并分析远端操作系统的响应,从而区别不同的TCPP协议栈。这一期间,还出现了基于初始序列号(ISN)采样的指纹辨识技术[)。这些技术都已在Nmp和Queso等经典的工具中得到了体现,在此就不再赘述。此后,真正在指纹辨识方法学上有所突破的则是以下两种:基于TO(重传超时时间)采样的辨识技术和基于引CMP响应的辨识技术。
1 --《基于TCP/IP协议栈指纹辨识的远程操作系统探测》
TCP 与 ICMP 指纹识别
对操作系统的扫描大多是通过TCP/IP协议簇进行的。应因为TCP/IP是互联网的基础协议,网络上所有的通信交互都通过该协议簇进行,所以操作系统OS想要与外界通信(这是必然的)一定要实现该协议。这些标记对操作系统特别重要,每个操作系统根据数据包的不同类型做出不同的反应,如果是TCP包就发送 到系统自己的网络栈。
ICMP协议也经常被用来进行指纹识别。许多traceroute功能使用ICMP协议发现起点到目标的网络路径。如果数据报没有被正确 处理,不管是设备没有激活还是数据报自己的问题,ICMP都会返回错误消息,这些错误消息有时也很有用。
本机实验
本机环境下的域下有多台靶机,实验使用kali,Ubuntu,windows7进行实验。
ip地址分别win7:192.168.65.138,ubuntu:192.168.65.137
分别ping两台主机,得到结果:
可以看到win系统的TTL值为128,liunx(Ubuntu)系统的TTL值为:64.因为是本地主机并未经过路由,因此TTL并未减小。
使用TCP/UDP进行路由追踪可以看到(未经过其他路由转发):
通过nmap扫描系统类型可以看到:
通过比较不同的操作系统的TCP/IP协议栈的细微差异,可以识别出OS类型甚至是具体版本。