Hacker Geek:使用TTL和TCP窗口大小的操作系统指纹

您是否知道,只需查看联网设备在网络上的通信方式,即可了解该设备运行的是哪种操作系统?让我们来看看如何发现我们的设备运行的是什么操作系统。

你为什么要这么做?

出于许多原因,确定机器或设备正在运行的操作系统非常有用。首先让我们从日常的角度来看一下,想象一下你想换到一家新的ISP,它提供每月50美元的无上限互联网服务,这样你就可以试用他们的服务了。通过使用操作系统指纹识别,您很快就会发现他们有垃圾路由器,并且在一堆Windows Server2003机器上提供PPPoE服务。听起来不太划算了,是吧?

这一点的另一个用途,尽管不那么合乎道德,是安全漏洞是特定于操作系统的事实。例如,您执行端口扫描并发现端口53处于打开状态,而计算机正在运行过时且易受攻击的BIND版本,则您只有一次机会利用安全漏洞进行攻击,因为失败的尝试将使守护程序崩溃。

操作系统指纹识别是如何工作的?

在对当前流量进行被动分析甚至查看旧的数据包捕获时,最简单、最有效的操作系统指纹识别方法之一是只需查看TCP会话中第一个数据包的IP报头中的TCP窗口大小和生存时间(TTL)。

以下是较为流行的操作系统的值:

操作系统有不同值的主要原因是TCP/IP的RFC没有规定默认值。另一件需要记住的重要事情是,TTL值并不总是与表中的值匹配,即使您的设备运行的是所列操作系统之一,您也会看到,当您通过网络发送IP数据包时,发送设备的操作系统会将TTL设置为该操作系统的默认TTL,但是当数据包经过路由器时,TTL会降低1。因此,如果您看到TTL为117,则可以预期这是一个TTL为128的数据包,并且在被捕获之前已经经过了11台路由器。

使用tshark.exe是查看这些值的最简单方式,因此一旦您捕获了数据包,请确保安装了Wireshark,然后导航至:

现在按住Shift键并右键单击Wireshark文件夹,然后从上下文菜单中选择在此处打开命令窗口

现在键入:

确保将“C:\Users\Taylor Gibb\Desktop\blah.pcap”替换为数据包捕获的绝对路径。一旦您按下Enter,您将看到捕获的所有SYN信息包,一种更易于阅读的表格格式

这是我连接到How-to Geek网站的随机数据包捕获,在Windows正在做的所有其他聊天中,我可以肯定地告诉你两件事:

我的本地网络是192.168.0.0/24。 我使用的是Windows 7机顶盒

如果您看一下表的第一行,您会发现我没有撒谎,我的IP地址是192.168.0.84,我的TTL是128,我的TCP窗口大小是8192,这与Windows 7的值相匹配。

接下来我看到的是一个74.125.233.24地址,TTL为44,TCP窗口大小为5720。如果我查看我的表,没有TTL为44的操作系统,但它确实显示Google服务器运行的Linux具有TCP窗口大小5720。在对IP地址进行快速网络搜索后,您会发现它实际上是Google Server。

您还使用tshark.exe做什么,请在评论中告诉我们。