远程OS探测中的网络协议栈指纹识别技术

原创 2012年03月30日 11:43:17

摘要

    远程探测计算机系统的OS(操作系统)类型、版本号等信息,是黑客入侵行为的重要步骤,也是网络安全中的一种重要的技术。在探测技术中,有一类是通过网络协议栈指纹来进行的。协议栈指纹是指不同操作系统的网络协议栈存在的细微差别,这些差别可以用来区分不同的操作系统。本文研究和分析了此技术的原理和实践,并提出了防止指纹探测的方法。

关键词

    远程OS探测、协议栈指纹、TCP/IP协议

1、引言

    探测和识别一个计算机系统在运行什么OS是黑客入侵的重要步骤。如果不知道目标系统在运行什么OS,就很难在目标系统上执行操作,也无法判断是否存在安全漏洞,更谈不上攻击。

    从管理和防范的角度来说,如果能减少被探测时泄漏的信息,就减少了黑客入侵行为的信息来源,使其入侵行为变得相当困难。因此,研究这方面的技术,对于提高系统的安全性和抵抗入侵的能力具有重要的意义。

2、简单的OS探测技术

    在早期,黑客经常采用一些简单的探测方法来获取目标系统的信息。如通过telnet标题,ftp的标题和STAT命令,通过HTTP服务程序,DNS ,SNMP等都可以得到很多有用信息。

    但是,在长期的入侵和防入侵的斗争中,通过简单的手段即可获得的信息越来越少了。管理员努力地减少通过网络泄漏的信息,有时还修改OS的代码,给出虚假的信息。在这种情况下,简单的方法已经很难奏效了,因此出现了通过网络协议栈指纹来识别OS的技术。

3、网络协议栈指纹原理

    常用的网络协议是标准的,因而从理论上讲各个操作系统的协议栈应该是相同的。但是,在实践中,各种操作系统的协议栈的实现存在细微的差异。这些差异称作网络协议栈的“指纹”。

    对TCP协议族来说,这些差异通常表现在数据包头的标志字段中。如window size、ACK序号、TTL等的不同取值。通过对这些差别进行归纳和总结,可以比较准确地识别出远程系统的OS类型。

    由于Internet广泛使用TCP/IP协议族,因此下面的讨论主要围绕TCP/IP来进行。

4、网络协议栈指纹构成

    下面列出了不同OS的网络协议栈的差异,这些差异可作为协议栈指纹识别的依据。

1) TTL

    TTL:Time To Live,即数据包的“存活时间”,表示一个数据包在被丢弃之前可以通过多少跃点(Hop)。不同操作系统的缺省TTL值往往是不同的。

    常见操作系统的TTL值:

Windows 9x/NT/2000 Intel      128
Digital Unix 4.0 Alpha            60
Linux 2.2.x Intel                  64
Netware 4.11 Intel                  128
AIX 4.3.x IBM/RS6000      60
Cisco 12.0 2514                  255
Solaris 8 Intel/Sparc            64

2) DF位

    DF(不分段)位识别:不同OS对DF位有不同的处理方式,有些OS设置DF位,有些不设置DF位;还有一些OS在特定场合设置DF位,在其它场合不设置DF位。

3) Window Size

    Window Size:TCP接收(发送)窗口大小。它决定了接收信息的机器在收到多少数据包后发送ACK包。

    特定操作系统的缺省Window Size基本是常数,例如,AIX 用0x3F25,Windows、OpenBSD 、FreeBSD用0x402E。

    一般地,UNIX的Window Size较大。MSWindows,路由器,交换机等的较小。

4) ACK 序号

    不同的OS处理ACK序号时是不同的。如果发送一个FIN|PSH|URG的数据包到一个关闭的TCP 端口,大多数OS会把回应ACK包的序号设置为发送的包的初始序号,而Windows 和一些打印机则会发送序号为初始序号加1的ACK包。

5) ICMP地址屏蔽请求

    对于ICMP地址屏蔽请求,有些OS会产生相应的应答,有些则不会。会产生应答的系统有OpenVMS, MSWindows, SUN Solaris等。在这些产生应答的系统中,对分片ICMP地址屏蔽请求的应答又存在差别,可以做进一步的区分。

6) 对FIN包的响应

    发送一个只有FIN标志位的TCP数据包给一个打开的端口,Linux等系统不响应;有些系统,例如 MS Windows, CISCO, HP/UX等,发回一个RESET。

7) 虚假标记的SYN包

    在SYN包的TCP头里设置一个未定义的TCP 标记,目标系统在响应时,有的会保持这个标记,有的不保持。还有一些系统在收到这样的包的时候会复位连接。

8) ISN (初始化序列号)

    不同的OS在选择TCP ISN时采用不同的方法。一些UNIX系统采用传统的64K递增方法,较新的Solaris,IRIX,FreeBSD,Digital Unix,Cray等系统采用随机增量的方法;Linux 2.0,OpenVMS, AIX等系统采用真随机方法。Windows系统采用一种时间相关的模型。还有一些系统使用常数。如,3Com集线器使用0x803,Apple LaserWriter打印机使用0xC7001。

9) ICMP 错误信息

    在发送ICMP错误信息时,不同的OS有不同的行为。RFC 1812建议限制各种错误信息的发送率。有的OS做了限制,而有的没做。

10) ICMP 消息引用

    RFC 规定ICMP错误消息可以引用一部分引起错误的源消息。

    在处理端口不可达消息时,大多数OS送回IP请求头外加8 字节。Solaris 送回的稍多,Linux 更多。

    有些OS会把引起错误消息的头做一些改动再发回来。例如,FreeBSD,OpenBSD,ULTRIX,VAXen等会改变头的ID。

    这种方法功能很强,甚至可以在目标主机没有打开任何监听端口的情况下就识别出Linux和Solaris。

11) TOS(服务类型)

    对于ICMP端口不可达消息,送回包的服务类型(TOS)值也是有差别的。大多数OS是0,而Linux 是0xc0。

12) 分段重组处理

    在做IP包的分段重组时,不同OS的处理方式不同。有些OS会用新IP段覆盖旧的IP段,而有些会用旧的IP段覆盖新的IP段。

13) MSS(最大分段尺寸)

    不同的OS有不同的缺省MSS值,对不同的MSS值的回应也不同。如,给Linux发送一个MSS值很小的包,它一般会把这个值原封不动地返回;其它的系统会返回不同的值。

14) SYN Flood限度

    在处理SYN Flood的时候,不同的OS有不同的特点。如果短时间内收到很多的伪造SYN包,一些OS会停止接受新的连接。有的系统支持扩展的方式来防止SYN flood。

15) 主机使用的端口

    一些OS会开放特殊的端口,比如:WINDOWS的137、139,WIN2K的445;一些网络设备,如入侵检测系统、防火墙等也开放自己特殊的端口。

16) Telnet选项指纹

    建立Telnet会话时,Socket连接完成后,会收到telnet守候程序发送的一系列telnet选项信息。不同OS有不同的Telnet选项排列顺序。

17) Http指纹

    执行Http协议时,不同的Web Server存在差异。而从Web Server往往可以判断OS类型。Web Server的差异体现在如下方面:

    1:基本Http请求

    处理HEAD / Http/1.0这样的请求时,不同系统返回信息基本相同,但存在细节差别。如,Apache返回的头信息里的Server和Date项的排序和其它的服务器不同。

    2:DELETE请求

    对于DELETE / Http/1.0这样的非法请求,Apache响应"405 Method Not Allowed",IIS响应"403 Forbidden", Netscape响应 "401 Unauthorized"。

    3:非法Http协议版本请求

    对于GET / Http/3.0这样的请求,Apache响应"400 Bad Request",IIS忽略这种请求,响应信息是OK, Netscape响应"505 Http Version Not Supported"。

    4: 不正确规则协议请求

    对不规则协议的请求,Apache忽视不规则的协议并返回200 "OK",IIS响应"400 Bad Request", Netscape几乎不返回Http头信息。

18) 打印机服务程序指纹

    RFC 1179规定了请求打印服务时须遵循的协议。

    在实践中,如果打印请求符合RFC1179的格式,不同OS表现行为相同。但当打印请求不符合RFC1179的格式时,不同OS就会体现出差别。如对一个非法格式的请求,Solaris这样回应:

Reply: Invalid protocol request (77): xxxxxx

    而AIX系统这样回应:

Reply: 0781-201 ill-formed FROM address. 

    大多数OS会给出不同的响应信息。个别OS会给出长度为0的回应。

    对于Windows,则是通过专有的SMB协议(Server Message Block Protocol)来实现打印机的共享。

19) 网络协议栈指纹实践

    在实践中,网络协议栈指纹方法通常这样应用:总结各种操作系统网络协议栈的上述细微差异,形成一个指纹数据库。在探测一个系统的时候,通过网络和目标系统进行交互,或者侦听目标系统发往网络的数据包,收集其网络协议栈的行为特点,然后以操作系统指纹数据库为参考,对收集的信息进行分析,从而得出目标系统运行何种OS的结论。

20) 远程OS探测的防护方法

    由于协议栈指纹方法是建立在操作系统底层程序差别的基础上的,所以要彻底防护指纹识别是很难的。但是有一些方法可以减少信息泄漏并干扰指纹识别的结果,在很大程度上提高系统的安全性。

21) 检测和拦截

    对于主动向主机发送数据包的协议栈指纹识别,可以使用IDS检测到异常包或异常的行为,从而加以记录和拦截。

    对于通过Sniffer来进行的协议栈指纹识别,这种方法是无效的。

22) 修改参数

    一些操作系统的协议栈参数,如缺省WINDOW、MSS、MTU等值,是可以修改的。在Solaris和Linux操作系统下,很多TCP/IP协议栈的参数可以通过系统配置程序来修改。在WINDOWS系统中,可以通过对注册表的修改来配置一些协议栈参数。通过修改这些可设置参数的值,可以给指纹识别造成干扰,从而减少真实信息的泄漏。

23) 修改程序

    修改参数可以给指纹识别造成一些干扰,但是对于一些协议栈的行为特征,比如数据包序列号的生成方式,是无法通过参数来修改的。

    对于这些行为特征,可以通过修改系统底层程序来实现,但是这么做通常需要付出较高的开发成本,并可能降低一些网络功能。

    在实践中,可以综合上述几种防护方法,来达到比较好的安全性。


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

使用TCP/IP协议栈指纹进行远程操作系统辨识( ps:主要参照fyoder的《使用TCP/IP协议栈指纹进行远程操作系统辨识》一文)...
  • qq_19876131
  • qq_19876131
  • 2016年03月10日 10:40
  • 3032

Http指纹识别技术

 Http指纹识别技术Http指纹识别现在已经成为应用程序安全中一个新兴的话题,Http服务器和Http应用程序安全也已经成为网络安全中的重要一部分.从网络管理的立场来看,保持对各种web服务器的监视...
  • xupeihuagudulei
  • xupeihuagudulei
  • 2009年11月27日 09:10
  • 666

设备指纹

设备标识(指纹)是什么? 设备标识(指纹)是基于设备的多种存储或路由介质生成的不重复、唯一的设备标识,和现实世界里政府用身份证来标识公民情况类似,是互联网和移动互联网领域十分成熟的一项技术。一般应用...
  • feicongcong
  • feicongcong
  • 2017年08月14日 15:20
  • 669

P0f——新的远程OS指纹被动判别工具

点击打开链接   p0f对于网络攻击非常有用,它利用SYN数据包实现操作系统被动检测技术,能够正确地识别目标系统类型。和其他扫描软件不同,它不向目标系统发送任何的数据,只是被动地接受来自目标系统的数据...
  • liweiminlining
  • liweiminlining
  • 2016年06月17日 17:45
  • 1409

指纹识别与探测

nmap指纹识别与探测版本探测-sV 选项可以启用版本探测,使用该选项不是进行一个端口扫描,而是通过相应的端口对应相应的服务,根据服务指纹识别出相应的版本。nmap -sV 192.168.131.1...
  • TH_NUM
  • TH_NUM
  • 2016年12月23日 11:37
  • 509

nginx websocket

websocket + nginx配置样例upstream ws_server { ip_hash; server 127.0.0.1:3000; server 127.0.0.1:300...
  • vbaspdelphi
  • vbaspdelphi
  • 2016年12月29日 21:42
  • 439

远程OS探测中的网络协议栈指纹识别技术

摘要     远程探测计算机系统的OS(操作系统)类型、版本号等信息,是黑客入侵行为的重要步骤,也是网络安全中的一种重要的技术。在探测技术中,有一类是通过网络协议栈指纹来进行的。协议栈指纹是指不同操...
  • zacklin
  • zacklin
  • 2012年03月30日 11:43
  • 1394

信息指纹概述

    任何一段信息文字,都可以对应一个不太长的随机数,作为区别它和其它信息的指纹(Fingerprint)。这个主要可以通过算法来实现。比较著名的有MD5等。比如:VS2005就自带了不少。你可以在...
  • longronglin
  • longronglin
  • 2007年06月18日 20:39
  • 1874

浅谈web指纹识别技术

http://www.freebuf.com/articles/2555.html
  • lucien_cc
  • lucien_cc
  • 2012年09月09日 00:41
  • 1407

nmap学习之操作系统探测

原链接:点击打开链接 -O (启用操作系统检测) 也可以使用-A来同时启用操作系统检测和版本检测。 --osscan-limit (针对指定的目标进行操作系统检测) 如果发现一个打...
  • Triagen
  • Triagen
  • 2017年03月21日 19:55
  • 925
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:远程OS探测中的网络协议栈指纹识别技术
举报原因:
原因补充:

(最多只允许输入30个字)