您的位置:首页 > 理论基础 > 计算机网络

使用TCP/IP协议栈指纹进行远程操作系统辨识

2016-03-10 10:40 246 查看

使用TCP/IP协议栈指纹进行远程操作系统辨识

( ps:主要参照fyoder的《使用TCP/IP协议栈指纹进行远程操作系统辨识》一文)

1、什么是协议栈指纹

协议栈指纹就是各个厂家,如微软和RedHat等在编写自己的TCP/IP协议栈时,却做出了不同的解释。这些解释因具有独一无二的特性,故被称为“指纹”。(来自百度知道)

2、协议栈指纹有什么用

协议栈指纹识别是一项强大的技术,能够以很高的概率迅速确定操作系统的版本。因为由于各个厂家在编写自己的TCP/IP协议栈存在差别,而我们通过这些细微的差别,可以准确定位操作系统的版本。

3、协议栈指纹识别技术

3.1经典技术

3.1.1 TELNET 服务

我简单做了测试,以win7系统开启telnet服务器,然后用kali 1.0和win10去连接,服务器ip为192.168.80.130。



然后下面是kali和win10分别返回的截图





由此既可以判断出系统是windows系统,但是具体是什么版本的windows系统目前看来是无法判断的。

3.1.2 FTP 服务

同样,原理合上述差不多,此处就不做赘述。

3.2 现有指纹技术

1、FIN 探测器

这里我们发送一个 FIN 包(或任何其他不带 ACK 或 SYN 标记的数据包)给一个打开的端口并等待回应。按照 RFC,正确的行为是不响应 ,但例如 MS Windows、BSDI、CISCO、HP/UX、MVS 和 IRIX 等都会发回一个 RESET从而暴露OS版本特征。

2、BOGUS 标记探测器

发送一个含有未定义的TCP标记(64或者128)的TCP头的SYN包,那么一些操作系统的回应将包含这个未定义的标记,而其它一些系统收到SYN+BOGUS包将关闭连接,利用这些特性可以识别一些操作系统。

3、ISN采样探测

这个方法是找出当响应一个连接请求时由 TCP 实现所选择的初始化序列数的式样,这样可以区分一些操作系统。 例如传统的 64K 、随机增量或真“随机”。Windows(和一些其他系统)则使用一个“时间相关”模型,每过一段时间 ISN 就被加上一个小的固定数, 不用说, 这几乎和老的 64K 实现一样容易攻破。甚至还可以通过计算其随机

数的变化量、 最大公约数以及序列数的其他函数之间的差异之类的方法再进一步地进行分组。

4、ICMP 消息引用

RFC 规定 ICMP 错误消息可以引用一部分引起错误的源数据包。对于一个端口不可达消息,几乎所有实现都只送回 IP 头和其后的 8 个字节。所以可以在对方没有开放端口的情况下就能探测到对方的OS

5、TCP 选项

即TCP报文的选项域: 每个选项的开始是1字节的kind字段,说明选项的类型。

Kind=0:选项表结束(1字节)

Kind=1:无操作(1字节)

Kind=2:最大报文段长度(4字节)

Kind=3:窗口扩大因子(4字节)

Kind=8:时间戳(10字节)

TCP报文的选项通常是可选的 ,所以并非所有实现都支持;如果某个实现发送了设置选项的请求,目标将通过在回复中进行设置来表示响应;只需在一个数据包中进行设置,一次就能测试

所有选项。而不同的操作系统支持的选项集不同,故可以通过选项的取值来分辨出它们
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: