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
|