操作系统指纹识别概述

时间:2022-04-26
本文章向大家介绍操作系统指纹识别概述,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

作者 Taskiller

操作系统指纹识别一般用来帮助用户识别某台设备上运行的操作系统类型。通过分析设备往网络发送的数据包中某些协议标记、选项和数据,我们可以推断发送这些数据包的操作系统。

只有确定了某台主机上运行的操作系统,攻击者才可以对目标机器发动相应的攻击。例如,如果要使用缓冲区溢出攻击,攻击者需要知道目标的确切操作系统与架构。

为什么要进行操作系统指纹识别?

能够探测到远程操作系统版本的网络侦察工具是非常有价值的,因为许多安全漏洞都依赖于操作系统的版本,如果没有这些信息,攻击者的攻击和利用都会受到限制。所以攻击发动之前要做的就是收集目标操作系统信息。 例如,没有操作系统指纹识别技术,攻击者就无法知道目标服务器运行的是IIS服务还是Apache服务,有可能用IIS的漏洞去攻击Apache服务,最后无功而返。

TCP与ICMP指纹识别

TCP指纹识别

对操作系统的扫描是通过TCP/IP协议簇进行的。TCP/IP是互联网的基础协议,网络上所有的通信交互都通过该协议簇进行,因此
操作系统必须实现该协议,使其与网络上其它计算机进行通信。IP用来将一个逻辑地址分配给网络上的机器,TCP用一种网络公认
的方式传输IP数据包。这些标记对操作系统特别重要,每个操作系统根据数据包的不同类型做出不同的反应,如果是TCP包就发送
到系统自己的网络栈。

TTL(Time to live)是由发送数据包的计算机或设备设置的。数据包每次经过路由转发后,该值都会被减1,所以如果一个数据包在网络上传输太久,途经太多跳数(机器间的路由),TTL值就会变为0(因为每经过一次路由转发都会将该值减1),该数据包就会被丢弃。

ICMP指纹识别

ICMP协议也经常被用来进行指纹识别。许多traceroute功能使用ICMP协议发现起点到目标的网络路径。如果数据报没有被正确
处理,不管是设备没有激活还是数据报自己的问题,ICMP都会返回错误消息,这些错误消息有时也很有用。

每个请求和应答的数据包头部看起来都不一样。

操作系统指纹识别的类别

1、主动指纹识别

主动指纹识别是指主动往远程主机发送数据包并对相应的响应进行分析的过程,使扫描器在更短的时间内获得比被动扫描更准确的结果。传统的方法是在探测到几个合法数据包时检查目标网络元素的TCP/IP栈行为。

Nmap

网络侦察的第一步是确定网络中哪些机器是处于激活状态的。Nmap就是这样一款检测操作系统是流行工具,不仅可以检测远程操作系统是否运行,同时也可以执行各种端口扫描。

nmap通过向目标主机发送多个UDP与TCP数据包并分析其响应来进行操作系统指纹识别工作。在使用Nmap扫描系统的同时,该工具会根据响应包分析端口的打开和关闭状态。下图选项告诉Nmap在发现主机后不执行端口扫描,只打印出响应扫描器的主机,一般被称为“ping扫描”。这种扫描不会引起目标网络太多注意。对攻击者来说,了解有多少主机处于激活状态比列出每个IP的端口和主机名要有价值得多。

用Nmap探测操作系统非常简单,只需要在运行时使用-O参数。下图是扫描一台Windows机器的结果:

下图是扫描一台Linux机器的结果:

Xprobe2

也可以使用xprobe2探测远程操作系统。Xprobe2根据Ofir Arkin的ICMP指纹识别研究执行远端TCP/IP协议栈的指纹识别工作,该工具依靠不同的方法识别操作系统是否处于激活状态,包括模糊签名匹配、概率猜测与联合匹配,以及一个签名数据库。

IDS系统很容易检测TCP扫描,因此要想隐藏扫描的话,使用Xprobe2自带的ICMP模块是个不错的选择。

当前,xprobe2包含以下模块:

· icmp_ping: ICMP回显探索模块

· tcp_ping: 基于TCP的ping探索模块

· udp_ping: 基于UDP的ping探索模块

· ttl_calc: 基于TCP和UDP的 TTL距离计算

· portscan: TCP 与 UDP 端口扫描

· icmp_echo: ICMP回显请求指纹识别模块

· icmp_tstamp: ICMP时间戳请求指纹识别模块

· icmp_amask: ICMP地址掩码请求指纹识别模块

· icmp_port_unreach: ICMP端口不可达指纹识别模块

· tcp_hshake: TCP握手指纹识别模块

· tcp_rst: TCP RST指纹识别模块

· smb: SMB指纹识别模块

· snmp: SNMPv2c指纹识别模块

要识别一台远程主机,我们只需调用xprobe2并给出远程主机的IP地址或主机名作为参数:

2、被动指纹识别

被动指纹识别是分析一台网络主机中发过来的数据包的过程。这种情况下,指纹识别工具被当作嗅探工具,不会向网络发送任何数据包。称其“被动”是因为这种方法不会与目标主机进行任何交互。基于这对这些数据包的嗅探跟踪,用户可以确定远程主机的操作系统。被动扫描通常比主动扫描更通用但准确性也更低,因为这种扫描对被分析数据的控制更少。

NetworkMiner

NetworkMiner是一款网络取证分析工具。NetworkMiner也可被用作检测操作系统、会话、主机名、开放端口等的被动网络嗅探器和数据包捕获工具,而不需要向网络发送任何流量。

要执行操作系统指纹识别,需要运行NetworkMiner并选择抓包的网络接口,我们可以根据IP地址、MAC地址、主机名、操作系统等为主机分类。设置好之后单击Start。

NetworkMiner会在“Host”选项卡中显示每台主机的操作系统,并在主机的树形列表的操作系统名旁边显示相应的icon图标。也可以展开每个主机,使用户可以查看指定主机对操作系统指纹匹配的更详细分析。

用Ping命令检测操作系统

也可以通过执行ping命令,根据目标响应信息的TTL值来确定目标主机的操作系统类型。

上表列出了常见操作系统的相应TTL值。

Linux机器的扫描结果如下:

通过下图显示的ping结果可以看到,TTL的值为128,是Windows系统的默认TTL值。

预防

完全屏蔽所有指纹识别攻击是个几乎不可能完成的任务,但我们可以通过一些措施加大攻击者的识别难度。例如我们必须确保外部主机无法直接扫描内部主机。

主动操作系统指纹识别一般也可以通过防火墙和主侵防御系统(IPS)解决。

banner抓取比较容易防御,可以通过对Apache的配置文件进行配置,限制其在头部列出的信息。

如果我们运行着某些服务并开放某些端口,可以屏蔽或删除触发某些错误时的显示的信息。

总结

操作系统指纹识别是一个非常有价值的操作系统发现技术。从攻击者的角度来看,操作系统指纹有助于帮助其找出系统中可利用的漏洞。当前有很多种系统指纹识别技术,同时也有很多方法避免对操作系统的识别。

参考

http://en.wikipedia.org/wiki/OS_fingerprinting

http://oreilly.com/pub/h/1347

https://www.sans.org/reading-room/whitepapers/testing/overview-remote-operating-system-fingerprinting-1231

原文地址:http://resources.infosecinstitute.com/overview-os-fingerprinting/