探测远程主机操作系统指纹的全新技术
  
 
1> 介绍
近年来,网络安全评估软件逐渐被网络安全界所接收,而且在很大的范围内
快速地传播起来。远程操作系统探测作为评估软件的一个部分,必须具备几个条件:
- 精确性:避免错误的探测结果;
- 防火墙和***检测系统的影响:避免影响(或被影响于)防火墙和***检
测系统;
- 文雅:低的网络流通和无危险分段;
- 灵巧:易于扩展标识数据库和自动探测函数;
- 速度:高速的指纹探测工具应该允许大范围的网络扫描。
我向大家介绍一个新的操作系统指纹探测工具-RING。在某些情况下其他的
工具也许会失败,但RING所具备的良好的特性和相当准确的结果一定会让你满意的。
RING是一个开放源代码的软件,它主要是面向试验性的概念和测试的目的。

2> 技术发展水平
2.1 操作系统探测技术的简短历史
- 获取标识信息 在很多探测工具中都使用了此项技术来获得某些服务的标
识信息。它往往是通过对二进制文件的收集和分析来实现的。
- TCP分段(标准/非标准)响应分析 它是依靠不同操作系统对特定分段的
不同反应来区分的。比较流行的工具有Savage的QueSO和Fyodor的NMAP,他们都使用了很
多来自于这种技术的变种。
- ICMP响应分析 它是刚推出不久的一种技术。它通过发送UPD或ICMP的请
求报文,然后分析各种ICMP应答。Ofir Arkin的X-Probe就是使用的这种技术,在通常
情况下,X-Probe工作的比较好,但是在防火墙阻塞某些协议时,得到的结果就不那么
尽如人意了。
- 初始化序列号(ISN)分析 在TCP栈中不同的exploits随机产生,通过鉴
别足够的测试结果来确定远程主机的操作系统。(详情请见 Zalewski,M.
(Apr,2001),Strange Attractors and TCP/IP Sequence Number Analysis)
- 特殊的操作系统 拒绝服务同样可以用在操作系统指纹的探测上,而不仅
仅是被***所使用。在一些非常特殊的情况下,拒绝服务能探测到准确的结果。

2.2 堆栈查询技术的细节
堆栈查询技术通过测量远程主机TCP/IP堆栈对不同请求的响应来探测系统。
大多数操作系统将会以特别的方式来响应特别的分段请求。
NMAP和QueSO就是基于这种技术的。它们产生一组TCP和UDP请求发送到远程
目标主机的开放(未开放)端口。这时,远程主机响应的有用信息就会被探测工具所接
收到,然后对其进行分析。
这些技术通常使安全评估软件在较小的延迟内,得到一些关于类型和版本之
类的信息。
在好几方面,这种技术是如此的准确:
- 每个操作系统(即使打过某个补丁)通常会使用它们自己的IP栈实现。
- TCP/IP规范并不是被严格的执行,每个不同的实现将会拥有它们自己的特
性,这样就为成功探测带来了可能。
- 规范可能被打乱,一些选择性的特性被使用,而其他的一些系统则可能没
有使用。
- 某些私自对IP协议的改进也可能被实现,这就成为了某些操作系统的特
性。

2.3 典型工具的一些限制
NMAP可以识别500个不同的操作系统,但前提是网络环境的稳定性,目标主
机必须开放一个TCP端口,一个关闭的TCP端口和一个关闭的UDP端口。如果不满足上面
的条件,探测结果的精确度就会有很大程度的降低。
当前的网络系统,为了安全起见,往往只向外打开一个可见的TCP端口,而
其他的端口所接收到的数据报却是被防火墙或包过滤装置所过滤掉了。
在这样的被防火墙保护的网络环境下,基于ICMP协议,关闭的UDP端口和关
闭的TCP端口的探测工具,如NMAP,Xprobe工作的效果就不那么好了。 3> TCP/IP协议的使用
TCP作为一个数据传输协议是建立在IP协议之上的,它的定义可以在RFC793
上找到。而TCP/IP协议则是在Internet上主要使用的网络协议。
TCP的成功在于它的可靠性:对错误的探测和管理,数据流动和阻塞的控
制,重传机制等。
为了达到这样的要求,TCP就成为了面向连接的协议。它的运行机制如下:
1. 建立连接
2. 数据传输
3. 终止连接
TCP是建立在IP协议之上的,在发生网络阻塞或路由问题时,IP协议不能够
提供可靠的端到端数据传送。而且,IP是一个非连接的协议,所以连接的控制都是建立
在TCP层上的。
TCP协议在其头部提供了对连接的多方面控制。序号和确认号是为了更好的
管理数据报的重发并能很好的控制各种特别的错误状况。TCP数据报头部码元字段的
URG,ACK,PSH,RST,SYN和FIN是为了管理TCP连接状态而设置的。详情请见RFC793。
为了以后更好的理解RING的原理,以下列出TCP建立连接的三次握手:
(Client主动向Server发起连接)

Client Server
|--------SYN--------->|
|<------SYN-ACK-------|
|--------ACK--------->|

数据报在网络上传输的过程中,某些分段可能在传输时丢失了,而理论上每
一个数据报都必须被接收方所确认。TCP自己就维持了一张已被确认数据报的列表。
注:如果某个数据报没有在期望的时间内被接收到,那么它将被看作丢失处
理。

而且,TCP会自动处理各种先后收到的数据报的真实顺序,然后它将会以正
确的顺序发送到上层系统。
网络系统的阻塞将会导致数据报的丢失。任何网络容纳能力的大小都归因于
物理底层的传输能力或路由的能力。
注:如果网络阻塞发生了,那么可能会有一些数据报被丢失了。而TCP又重
发了那些被丢失的数据报,这样网络的阻塞状况将会变的越来越严重。因此,如果网络
阻塞发生了,数据报的重传速度将会降低。

虽然TCP强调了这种机制,但在RFC793中并没有利用什么规则去计算确认数
据报之间延迟的大小。

4> 临时的分析
4.1 原理
数据报的重传为我们提供了另一种分析远程主机操作系统的方式。我们将通
过分析目标主机在各次重传数据报之间的延迟来判断远程主机操作系统的指纹。
这种方式已经在RFC793中被定义了,但是却留下了一些利用的余地。而且,
一些实现并没有完全遵循目前的标准。
为了让我们了解这种方式,也就是体会超时机制的作用,我们必须强调远程
主机的IP栈要处在非标准的状态下。
而这种状况可以容易地被模仿,只须简单的放弃对远程主机SYN-ACK数据报
的确认就可以达到。
通过测量重传的两个相邻数据报之间的延迟,或观察一些其他的信息,比如
TCP的标记,序号,确认号,这些都可以得到一些关于远程主机操作系统的有用信息。
如果每个操作系统都有其自己的特点,那么建立一个典型的系统标识数据库
将会成为一种可能。不管测试的主机或网络状况如何,操作系统将是唯一影响测试结果
的因素。因此,探测那些建立在不同主机上却使用相同操作系统而得到的结果,将会是
一样的(前提是网络状况比较稳定)
通过将目标主机指纹与操作系统指纹数据库里的相比较,将有可能知道远程
主机所运行的操作系统。
新的操作系统的标识将会被很容易的纪录下来,它们将会和操作系统的名字
联系起来。

4.2 DIY
这种操作系统指纹探测技术将会使用探测仪器的两个部分。一个数据报过滤
装置,比如个人防火墙,另一个就是数据报监听装置。

探测仪器的配制:一种简单的模仿网络阻塞的方法就是在扫描主机上安装一
个个人防火墙,并设置一些过滤规则来禁止接收所有来自目标主机的数据报。这时,数
据报监听装置将会接收到所有的来自目标主机的数据报,由于防火墙的存在,扫描主机
不会发送任何确认信息,这样就无法建立起完整的TCP连接。在某个时间段之后,远程
主机就会终止与扫描主机的任何关系。

测试过程:测试过程将由三个不同的步骤组成。
- 防火墙的设置
- 试图与目标主机建立标准的连接
- 目标主机发送确认数据报

下面将详细的描述实现的过程:
- 选择一台主机,并确认某个存在的打开的端口。比如远程主机为
192.168.0.10,它的TCP 80端口是打开的(系统开启的Web服务);
- 配置防火墙使其阻塞掉所有的来自目标主机;(192.168.0.10)的数据
报。
- 监听来自目标主机TCP80端口的所有数据报;
- 向目标主机发送一个SYN数据报,试图与之建立连接;
- 分析所有来自目标主机的相邻数据报之间的延迟 。

实际上,我们测量的并不是目标主机发送连续数据报之间的时间间隔,而是
我们收到的来自目标主机连续数据报之间的时间间隔。如果这些时间间隔几乎是固定
的,那么我们可以大胆的假设他们是相等的。
下面是探测时数据报的流动情况(A表示扫描主机,B表示被探测的目标主机
,A与B之间的无箭头直线表示没有数据传输):

A B
|--------SYN--------->|
|<------SYN-ACK-------|--------------
|---------------------| 时间间隔为 t1
|<------SYN-ACK-------|--------------
|---------------------| 时间间隔为 t2
|---------------------|
|<------SYN-ACK-------|--------------
|---------------------|
|---------------------| 时间间隔为 t3
|---------------------|
|---------------------|
|<------SYN-ACK-------|--------------

4.3 静态分析
因为数据报可能通过了一些不稳定的网络,比如Internet,这样很可能接收
到的连续数据报之间的延迟(r_i)和它们被发送时的延迟(s_i)就不再相同了。
假如我们收到来自目标主机的两个连续的数据报时,测量到的延迟为3.01
秒,但是很有可能他们在发送时相互间的延迟为3.0秒。问题在于某些系统实现时将3.2
秒作为发送两个连续数据报的时间延迟。而介于3.0秒和3.2秒之间的区间因为太小,以
至于无法区分接收到的数据报究竟是来自哪种系统的。
为了避免这个问题,我们可以使用TCP的时间截选项,这样就可以更好的得
到何时发送数据报的信息了。在每个数据报里都设置时间截选项将会提高探测结果的准
确度。不过,使用时间截选项也许会增加我们判断的难度,因为时间截选项可能会返回
一些不准确的时间数据。

这种方法就是建立在指纹的获取以及与现有指纹数据库比较的基础之上的。
通常的测量“距离”的方式为求得对应延迟之间的差值:
Distance=∑| r_i - s_i |
其中r_i为与接收到的第i个数据报相关的时间延迟,s_i为指纹数据库中的
相应顺序数据报的时间延迟。
因此,探测到的最可能的操作系统将是求得“距离”最短时的指纹数据库中
对应的操作系统。而“距离”的求得并没有考虑TCP数据报头部的一些重要标记(如
SYN,ACK,RST,FIN……)的影响。而这些标记往往又能探测到目标主机的运行状态。
序号和确认号,这些信息却可以用来区分不同的系统实现方式。

5> RING的执行和现实结果
5.1 库
为了开发的简便,RING使用了标准的C语言和UNIX下的一些库文件。比如Dug
Song's Libdnet library,Mike D. Schiffman Libnet library,Lawrence Berkeley
national liboratory Libpcap library。
Libdnet库被用来对防火墙进行控制,它提供了一个API允许控制某些UNIX的
防火墙(比如ipchains,ipfilters,ipf……)
Libpcap通常被用来进行网络的监听,以及数据报的分析。

5.2 运行过程
RING对远程主机的探测需要一些初始化参数,目标主机的IP地址,目标主机
上一个开放的TCP端口,扫描主机的IP地址以及用于监听数据报的网络接口。
然后,RING将会执行下面的步骤:
- 源端口的选择;
- 使用libdnet,建立起本地过滤设施,阻挡来自目标主机的数据报;
- 使用libpcap监听收到的数据报;
- 使用libnet,发送一个TCP SYN数据报到探测目标主机;
- 在默认/调整过的延迟内监听回送的数据报
- 将收到的回送数据报与以知的签名相比较

5.3 实际的结果
在其他工具无法区分远程主机系统时,RING仍然能提供非常准确的结果。例
如,一台Win2k主机,一台FreeBSD主机,即使它们是隐藏在通常配制的防火墙后面,
RING也是有可能区分出他们来的。
Win2k和FreeBSD的实现有一个非常相识的地方,因为他们共享了相同的IP栈
技术。如果他们这两个操作系统上只有一个开放的端口,NMAP在通常情况下是无法区分
两者的。
如果实现的技术非常的相识,我们将会探测另外的Reset数据报做来进一步
的分析,这对RING来说应该是足以区分远程主机的操作系统。
如下是Win2k和FreeBSD的比较:
(以下各表中,各个系统对应的数据为重传数据报的时间延迟,以秒为单
位。如下图第一行数据: 1st表示远程主机的第一次重传,而后Windows 2k下面的3表
示window 2k系统的第一次重传延迟为3秒,再后的FreeBSD 4.4下面的3也表示FreeBSD
4.4系统第一次重传的延迟为3秒。)
____________________________________________
|Retries|===Windows 2k====|=FreeBSD 4.4=|
|==1st==|========3========|======3======|
|==2nd==|========6========|======6======|
|==3rd==|=no more retries=|=====12======|
|==4th==|=================|=====24======|
----------------------------------------------------
|=Reset=|==no reset sent==|=reset after 30 sec.=|
----------------------------------------------------

RING同样可以区分出相同操作系统的不同版本:
-------------------------------------------------
|Retries|===Linux2.2.14===|====Linux 2.4====|
|==1st==|=======3,5=======|======4,26=======|
|==2nd==|=======6,5=======|========6========|
|==3rd==|======12,5=======|=======12========|
|==4th==|======24,5=======|=======24========|
|==5th==|======48,5=======|======48,2=======|
|==6th==|======96,5=======|=no more retries=|
|==7th==|======120,5======|=================|
|==8th==|=no more retries=|=================|
-------------------------------------------------
|=Reset=|====no reset====|====no reset====|
-------------------------------------------------

-------------------------------------------------
|Retries|===Windows 98====|===Windows 2k===|
|==1st==|========3========|========3========|
|==2nd==|========6========|========6========|
|==3rd==|=======12========|=no more retries=|
|==4th==|=no more retries=|=================|
-------------------------------------------------
|=Reset=|=====no reset====|=====no reset====|
-------------------------------------------------

以下是在不同的设备上现实的区别:
---------------------------------------------------------
|Retries|minolta printer| cisco router |3com switch|
|==1st==|======4,5======|======2========|====3,5====|
|==2nd==|======4,5======|======3,9======|====4,4====|
|==3rd==|=======9=======|======5,9======|====4,4====|
|==4th==|=======18======|no more retries|====4,4====|
|==5th==|=======36======|===============|====4,4====|
|==6th==|=======72======|===============|====4,4====|
|==7th==|======144======|===============|====4,4====|
|==8th==|======285======|===============|====4,4====|
|==9th==|======576======|===============|====4,4====|
|==10th=|======169======|===============|====4,4====|
|==11th=|======169======|===============|====4,4====|
|==12th=|======169======|===============|====4,4====|
---------------------------------------------------------
|=Reset=|=====Reset=====|===no reset====|==no reset=|
---------------------------------------------------------
注意,经过一系列的重传后,一些系统会发送一个RST数据报警告扫描主机
终止传输,进而停止重传数据报。

6> 讨论与扩充
6.1 优势
RING使用的技术的最大优势就是它只需要一个打开的端口。如果目标主机是
被防火墙所保护的,那么很可能就只开了一个端口,其他的端口则是被过滤了的。
在相同的防火墙配置情况下,NMAP就不会那么有效了,因为它是基于一些关
闭端口了,而这些关闭的端口往往是被过滤了。
而且,RING的技术是使用了一个标准的TCP数据报,它将不会对目标主机造
成任何的不利影响。
另一方面,这种探测方式需要花比NMAP或Xprobe更多的时间。这是测量连续
数据报时间延迟的一个固有的缺点。
6.2 保护
有什么办法可以阻止RING对操作系统指纹的探测呢?因为传送的是标准的数
据报,因此目标主机不可能将之从通常的数据传输中区分开来。
数据报的重传是显而易见的,但是数据报的丢失和重传在网络上又是时常发
生的事情。
如果一个***检测系统为了防止网络上过多的垃圾信息而中止了某个连接,
这样将会降低TCP的错误率并恢复网络的流通容量。
在某些操作系统中,可以通过修改TCP/IP栈某些成员的数据进而达到避开
RING探测的作用。但是我并不推荐这种方法,因为它会严重威胁到TCP/IP栈的稳定性。
另一个可能的方法是将主机隐藏于代理之后,或是使用防火墙技术来实现
SYN转发或SYN网关技术。SYN转发或SYN保护技术是专门用来对付SYN洪水***的。

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SYN转发原理:
(注:以下各图中,相同名称的为同一台主机,无箭头的直线没有任何意
义。如下图:三个client均指同一客户端,三个firewall均指同一个防火墙)

client ------SYN ------> firewall ---------------- target
client <--- SYN-ACK----- firewall ---------------- target

如果在某个时间段内防火墙没有收到等待的ACK数据报,那么这个连接将会
被中止:

client <------RST------- firewall ---------------- target

相反,传输将会继续进行:

client ---------------- firewall -------SYN------> target
client ------ACK------> firewall <--- SYN-ACK----- target
client ---------------- firewall -------ACK------> target

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SYN网关原理:

client ------SYN------> firewall -------SYN------> target
client <----SYN-ACK---- firewall <-----SYN-ACK---- target

如果在某个时间段内防火墙没有收到等待的ACK数据报,那么它将会中断本次
连接:

client ---------------- firewall ------RST------> target

相反,连接将会继续进行:

client ------ACK------> firewall ------ACK------> target

6.3 将来的改进
在TCP的传输流中另一种状态也有相同的功能,试图重发那些被假装丢弃的
数据报,这就是FIN_WAIT_1状态。它可以和前面的探测技术结合使用,也可以用在对进
行了SYN保护系统的探测之中。这种有趣的技术可以通过实施了SYN网关保护机制的网
络,进而实现对真正目标主机的系统指纹探测。
---------------------------------------------
|Retries|===Linux2/4====|==Windows 2k===|
|==1st==|======0,8======|=======3=======|
|==2nd==|======1,3======|=======6=======|
|==3rd==|======2,6======|======12=======|
|==4th==|======5,2======|======24=======|
|==5th==|=====10,5======|======48=======|
|==6th==|=====20,8======|no more retries|
|==7th==|=====41,6======|===============|
|==8th==|no more retries|===============|
---------------------------------------------
|=Reset=|===no reset===|====no reset===|
---------------------------------------------

7> 结论
RING 使用了一个建立在常规,无危险TCP传输上的新的操作系统探测技术。
它通过分析目标主机在各次重传数据报之间的延迟来判断远程主机操作系统的指纹。如
果将其和其他的操作系统探测技术相结合,应该会收到更好的效果。

Reference:
1 ) << Ring-full-paper >> by Intranode Research Team
2 ) << Remote OS detection via TCP/IP Stack FingerPrinting >> by
Fyodor
3 ) << ICMP based remote OS TCP/IP stack fingerprinting techniques >>
by Ofir Arkin & Fyodor Yarochkin

转载于:https://blog.51cto.com/cooldong/108937

探测远程主机操作系统指纹的全新技术相关推荐

  1. 操作系统指纹探测实验

    操作系统指纹 作为网络操作系统,系统的指纹实际上来源于TCP/IP协议栈.TCP/IP协议栈技术只是在RFC文档中描述,并没有一个统一的行业标准,各个公司在编写应用于自己的操作系统的TCP/IP协议栈 ...

  2. Kali Linux渗透测试实战 2.2 操作系统指纹识别

    目录 2.2 操作系统指纹识别... 1 2.2.1 Banner抓取... 1 2.2.2 TCP 和 ICMP 常规指纹识别技术... 3 TCP数据报格式... 4 ICMP首部格式... 5 ...

  3. 探测服务器操作系统工具,探测服务器操作系统

    探测服务器操作系统 内容精选 换一换 Atlas 800 训练服务器(型号 9000)安装上架.服务器基础参数配置.安装操作系统等操作请参见<Atlas 800 训练服务器 用户指南 (型号90 ...

  4. 探测服务器操作系统,探测服务器操作系统工具

    探测服务器操作系统工具 内容精选 换一换 lib库获取方式不同,编译环境配置方法不同,下面分别介绍.根据Mind Studio安装服务器操作系统及架构与硬件环境是否相同,编译环境分为如下两种场景:若M ...

  5. ping oracle 地址,使用 ping 命令探测远程主机 - Oracle Solaris 管理:IP 服务

    使用 ping 命令探测远程主机 可以使用 ping 命令确定远程主机的状态.运行 ping 时,ICMP 协议会将数据报发送到指定的主机,并请求响应.ICMP 是负责 TCP/IP 网络中错误处理的 ...

  6. 了解指纹锁方案技术特点和优点——西城微科

    就依目前的形式来看,虽说现在的智能指纹锁都具备虚伪密码.防盗报警.智能家居联网等功能,能够更有效的防盗防贼,但其实指纹锁方案目前的现状并不是很乐观,仍然处于不成熟的状态之中,部分产品的逻辑也存在问题. ...

  7. 探测服务器操作系统工具,探测服务器操作系统工具

    探测服务器操作系统工具 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数据 ...

  8. 并发编程-操作系统简史,多道技术

    多进程的实现原理-多道技术 操作系统介绍 下图是操作系统在整个计算机中所在的位置: 位于应用软件和硬件设备之间,本质上也是一个软件, 由系统内核(管理所有硬件资源)与系统接口(提供给程序员使用的接口) ...

  9. 银河麒麟V10高级服务器操作系统clickhouse数据迁移技术全网唯一

    银河麒麟V10操作系统clickhouse数据迁移技术 前言 笔者自述:笔者本人为中国软件行业国产化进程中的一份子,本人也是非常支持华为手机以及鸿蒙操作系统.本文介绍在本人在实际国产化切换过程中的一些 ...

最新文章

  1. 链接写不到txt文件该怎么办呢
  2. request.setAttribute()用法
  3. linux之xargs使用技巧
  4. open表和closed表_什么是左外连接?左外连接在工作表查询中的应用
  5. php获取数据3中方式,PHP面向对象之3种数据访问方式详解(代码实例)
  6. 苹果mac窗口速调辅助工具:Magnet
  7. 计算机专业务必学好的基本课程
  8. Codeforces 145E Lucky Queries 线段树
  9. 高通工具过滤_高通QXDM|高通诊断监视工具(Qualcomm QXDM)下载v3.14 官方版 - 欧普软件下载...
  10. 易语言与python爬虫_022 Python爬虫原理与python爬虫实例大全
  11. 12.2.1 QTcpSocket类介绍
  12. 利用python修改小米运动数据,整个朋友圈都感觉太夸张了
  13. 解决No version of NDK matched the requested version编译报错的问题
  14. word上次启动失败,安全模式可以帮你解决问题
  15. linux发行版本号列举,查看Linux发行版的名称及其版本号
  16. clearcasse 命令
  17. python爬取股票行情_python爬取历史所有股票价格
  18. 一些练习——武林秘籍
  19. 机械手末端速度计算(实例)
  20. oracle decode 01427,錯誤的ORA-01427:單行子查詢返回多個行。

热门文章

  1. 由35国42家电力输送系统运营商组成的欧洲电力协会网络遭攻击
  2. HTML如何设置音频播放器控件的大小
  3. python-知识回顾-16
  4. 【DataMagic】如何在万亿级别规模的数据量上使用Spark
  5. TypeScript 中的 SOLID 原则
  6. 设计模式(十)——代理模式
  7. 老李分享:HTTP session原理及应用 1
  8. 使用 ODP.NET 访问 Oracle(.net如何访问Oracle)详解
  9. Bootstrap 基础五表格
  10. linux redis客户端怎么使用,linux 下安装redis并用QT写客户端程序进行连接