这一章将阐述指纹识别以及其与传输层的关系。指纹识别是操作系统(OS)级功能。为了更好的理解指纹识别是如何工作的,我们首先需要回顾一下传输层的一些基本概念:身份验证。比如,客户端是运行MAC OS10、BSD还是Windows 2003服务器呢?
有两个与传输层相关的主要协议:第一个是用户数据包协议(UDP),它是一个无连接的协议。 UDP并不提供可靠性机制,它的设计目标是提高速度。另一个是传输控制协议(TCP),它是基于连接并以可靠性为设计目标的。TCP的可靠性是通过使用流控制、错误检测校验码、确认序列号、窗口大小定义以及进程启动和关闭来实现的。
TCP还使用了一套控制位和标记。这些标记是用来控制数据流的。下面是一些常见的标记:
·URG:表示紧急数据·ACK:表示确认序列值。确认序列数字很重要,它必须经过接受者的检验。
·RST:表示重置。RST可以用于终止一个出现问题的连接。
·SYN:表示同步。SYN用于启动一个会话。
·FIN:表示完成。FIN用于在会话结束时,它会发送会话清除信号。
在创建连接的过程中,TCP和UDP都充当了中间人的角色。其中,传输层是负责主机间的连接。当说到连接问题时,你可以想象一下打电话的情景。听到电话那头某人的应答声你就可以知道很多信息——他(她)是年轻的还是年老的,是男人还是女人。当黑客尝试识别攻击目标时,指纹识别的功能与这种情况非常相似。被攻击目标必须在攻击加载之前被识别。可以是积极的或消极的。
被动的指纹识别被动的指纹识别很难检测的。它并不需要在网络中注入流量,而更像是一个数据包嗅探器。被动的指纹识别工具能检测数据包,并查看其中的IP、ICMP和TCP报头的默认值,从而确定创建数据包的操作系统的类型。虽然被动的指纹识别可能没有主动的指纹识别准确,但它却是非常很隐蔽的。诸如Siphon、Ettercap 和p0f等工具都是基于被动概念的。如果想阅读更多关于被动的文章,可以浏览来自Honeynet Project:了解你的对手: 被动的指纹识别的文章。
为了更好的了解被动的指纹识别是如何工作的,让我们来进一步地看看程序p0f。这个被动的指纹识别工具是使用p0f.fp文件来存储已知的OS作业系统的“指纹”。如下是该文件的一小部分:
----------------- MacOS -------------------32768:255:1:48:M*,W0,N:.:MacOS:9.0-9.2----------------- OpenBSD -----------------16384:64:1:64:M*,N,N,S,N,W0,N,N,T:.:OpenBSD:3.0-3.4我们先看第一项,我会详细介绍前面的四个字段。首先,值“32768”是TCP的最初窗口大小。下一个值“255”是IP 存活时间(Time-To-Live,TTL)。紧跟着的“1”表示IP是非分片位。第四个字段“48”定义了TCP SYN数据包的字节总长度。这些数字唯一地定义了一个MAC OS 9操作系统。将这些数值与OpenBSD的进行比较,你可以看到相当大的差别。这意味着每个供应商在设计一个OS时都使用稍微有些差别的值。这些差别可以用来识别出不同的系统。如果你希望了解更多关于p0f的信息,可以浏览p0f应用主页。
主动的指纹识别主动的指纹识别不像被动的指纹识别那样低调。入侵检测系统(IDS)无法检测到被动的指纹识别,但是是可以检测到主动的指纹识别。黑客可以从主动的指纹识别中获取理准确的数据。主动的指纹识别是通过发送特定格式化的TCP数据包实现的。结果是每个目标会对这些有害的数据包作出不同的响应。其中常见主动的指纹识别工具有Xprobe2和Nmap。
Nmap是通过向目标主机发送不同类型的数据包实现识别的。一旦Nmap识别了至少一个开放和一个关闭的端口,它就可以开始进行实际的OS识别了。Nmap可以发出大量带有不同TCP标记或TCP选项的数据包。目的是希望其中的某一个数据包能够引起目标系统的响应。例如,发送一个带有SYN、FIN、PUSH 和URGENT标记的TCP数据包进行扫描。这显然便不是一个正常的数据包。
虽然针对被动扫描的防范是有限的,但是IDS工具可以用与检测主动的指纹识别。嗅探也可以用于匹配已知的主动的指纹识别扫描模式。Morph则是另外一个可选的工具。Morph是一个OS指纹混乱工具,它可以用于扰乱主动的指纹识别工具,使它们无法作出准确的探测。
无论你选择哪种技术,重要的是你必须了解这些技术是如何工作的,这样你才能更好地进行防卫。