您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 探测远程主机操作系统指纹
操作系统探测技术主要有以下几种方式:获取标识信息在很多探测工具中都使用了此项技术来获得某些服务的标识信息。它往往是通过对二进制文件的收集和分析来实现的。TCP分段(标准/非标准)响应分析它是依靠不同操作系统对特定分段的不同反应来区分的。比较流行的工具有Savage的QueSO和Fyodor的NMAP,他们都使用了很多来自于这种技术的变种。ICMP响应分析它是刚推出不久的一种技术。它通过发送UPD或ICMP的请求报文,然后分析各种ICMP应答。OfirArkin的X-Probe就是使用的这种技术,在通常情况下,X-Probe工作的比较好,但是在防火墙阻塞某些协议时,得到的结果就不那么尽如人意了。初始化序列号(ISN)分析在TCP栈中不同的exploits随机产生,通过鉴别足够的测试结果来确定远程主机的操作系统。特殊的操作系统拒绝服务同样可以用在操作系统指纹的探测上,而不仅仅是被黑客所使用。在一些非常特殊的情况下,拒绝服务能探测到准确的结果。在本文中,着重以Nmap为例,介绍一下探测远程主机操作系统指纹的方法。有许多技术可以用来定义网络栈指纹。基本上,你只要找出操作系统间的不同并写探测器查明它们。如果你合并足够这些,你可以非常细致的区分它们。下面介绍一些这种技术:FIN探测器--这里我们送一个FIN包(或任何其他包不带ACK或SYN标记)给一个打开的端口并等待回应。正确的RFC793行为是不响应,但许多有问题的实现例如MSWindows,BSDI,CISCO,HP/UX,MVS,和IRIX发回一个RESET。许多现有工具利用这个技术。BOGUS标记探测器--Queso是一个用这种技术的扫描器。它是设置一个未定义的TCP标记(64或128)在SYN包的TCP头里。Linux机器到2.0.35之前在回应中保持这个标记。其他OS还没发现有这个错误。然而,一些操作系统象是复位连接当它们得到一个SYN+BOGUS包的时候。这一行为对辨识它们有用。TCPISN取样--这个主意是找出当响应一个连接请求时由TCP实现所选择的初始化序列数式样。这可分为许多组例如传统的64K(许多老UNIX机器),随机增量(新版本的Solaris,IRIX,FreeBSD,DigitalUNIX,Cray,和许多其他的),真“随机”(Linux2.0.*,OpenVMS,新的AIX,等)。Windows机器(和一些其他的)用一个“时间相关”模型,每过一段时间ISN就被加上一个小的固定数。不用说,这几乎和老的64K行为一样容易攻破。当然最让人喜欢的技术是常数。机器总是使用确切同样的ISN。而3Com的集线器(用0x803)和AppleLaserWriter打印机(用0xC7001)就是这样。你也可以通过例如计算其随机数的变化量,最大公约数,以及序列数的其他函数和数之间的差异再进一步分组。不分段位--许多操作系统开始在送出的一些包中设置IP的Don'tFragment位。这带来多种性能上的好处(尽管它也可能是讨厌的--这就是nmap的分段扫描对Solaris机器无效的原因)。无论如何,不是所有的OS都这样做而且另一些做的场合不同,所以通过注意这个位我们甚至能收集目标OS的更多信息。TCP初始化窗口--这只包括了检查返回包的窗口大小。较老的扫描器简单地用一个非零窗口在RST包中来表示“BSD4.4族”。新一些的如queso和nmap则保持对窗口的精确跟踪因为它对于特定OS基本是常数。这个测试事实上给出许多信息,因为有些可以被唯一确定(例如,AIX是所知唯一用0x3F25的)。在它们“完全重写”的NT5TCP栈中,Microsoft用的是0x402E。有趣的是,这和OpenBSD与FreeBSD中所用的数字完全一样。ACK值--不同实现中一些情况下ACK域的值是不同的。例如,如果你送了一个FIN|PSH|URG到一个关闭的TCP端口。大多数实现会设置ACK为你的初始序列数,而Windows和一些傻打印机会送给你序列数加1。若你送一个SYN|FIN|URG|PSH到一个打开的端口,Windows会非常古怪。一些时候它送回序列号,但也有可能送回序列号加1,甚至还可能送回一个随机数。ICMP错误信息终结--一些操作系统跟从RFC1812的建议限制各种错误信息的发送率。例如,Linux内核(在net/ipv4/icmp.h)限制目的不可达消息的生成每4秒钟80个,违反导致一个1/4秒的处罚。测试的一种办法是发一串包到一些随机的高UDP端口并计数收到的不可达消息。ICMP消息引用--RFC规定ICMP错误消息可以引用一部分引起错误的源消息。对一个端口不可达消息,几乎所有实现只送回IP请求头外加8字节。然而,Solaris送回的稍多,而Linux更多。这使得nmap甚至在没有对方没有监听端口的情况下认出Linux和Solaris主机。ICMP错误消息回应完整性--机器会把原始消息的一部分和端口不可达错误一起送回。然而一些机器倾向于在初始化处理时用你的消息头作为“草稿纸”所以再得到时会有些许的改动。例如,AIX和BSDI送回一个IP“全长”域在20字节处。一些BSDI,FreeBSD,OpenBSD,ULTRIX,和VAXen改变了你送的IPID。因为TTL改变而改变了检查和,有些机器(AIX,FreeBSD,等)送回错误的或0检查和。总之,nmap作9种测试在ICMP错误上以分辨出这类细微差别。服务类型--对于ICMP端口不可达消息可察看送回包的服务类型(TOS)值。几乎所有实现在这个ICMP错误里用0除了Linux用0xc0。这不是标准的TOS值,而是一个未使用优先域(AFAIK)的一部分。尽管不知道为什么如此,但如果他们改成0我们还能够分辨旧系统_而且_还能分辨出旧系统和新系统。TCP选项--这简直是泄漏信息的金矿。它的好处在于:1)这通常是可选的,所以并非所有实现都支持。更多文章)若一个实现发出设置了选项的请求,目标通过设置它在回应中表示支持。3)可以在一个数据包中设置而一次测试所有选项。Nmap发送这些选项的几乎所有可能的包:WindowScale=10;NOP;MaxSegmentSize=265;Timestamp;EndofOps;当你得到回应,看看那个选项被送回也就是被支持。一些操作系统如最近的FreeBSD机器支持上面所有的,而其他,如Linux2.0.X支持的则很少。最近的Linux2.1.x内核支持上面所有的。另一方面,它们又有更易受攻击的TCP序列生成方式。即使几个操作系统支持同样的选项集,有时仍可以通过选项的值分辨出它们。例如,如果送一个小的MSS值给Linux机器,它会用那个MSS生成一个回答给你。其他主机会给你不同的值。甚至即使你得到同样的支持选项集和同样得值,你仍可以通过选项提供的顺序和填充字进行辨识,例如Solaris返回'NNTNWME'表示;而Linux2.2.122返回MENNTNW。同样的选项,同样的值,但不同顺序!没见过其他OS检测工具利用TCP选项,但它非常有用。因同样原因有其他几个有用的选项我会探测,象那些支持T/TCP和选择性确认。开发年代--甚至使用上面所有测试,nmap仍不能从TCP栈区分Win95,WinNT,或Win98。但你可以简单的进行早期的WindowsDOS攻击(PingofDeath,Winnuke,等)而比当时的如Teardrop和Land多做一些。就是在每个攻击之后,ping它们看是否垮掉了。等到你最后crash掉它们,你就能缩小的某一服务包或补丁。SYN洪水限度--一些操作系统会停止新的连接尝试如果你送太多的伪造SYN给它(伪造包避免你的内核复位连接)。许多操作系统只能处理8个包。最近的Linux内核(包括其他操作系统)允许不同的方式如SYNcookie来防止这成为严重问题。所以你可以试着从伪造地址发8个包到目标打开的端口再尝试你还能否建立连接以发现一些信息。这没在nmap中实现因为有人不喜欢用SYN洪水,甚至你解释这只是想知道它运行的操作系统也不能使他们平静。1.绪论1.1研究背景网络被认为是互联网发展的第三阶段。网络的设计和实施能够带来切身实际的利益,城域网、企业网、局域网、家庭网和个人网络都是网络发展的体现。网络发明的初衷并不仅仅是表现在它的规模上,而是互联互通,资源共享,消除资源访问的壁垒,让生活更加方便、快捷、高效。随着网络技术的发展,网络在应用方面也体现出了很大的潜力,能够共享和调度成千上万的计算设备协同并发工作,能汇聚数百万计的信息资源加以归类、分析和发布,还可以让世界每一个角落的人们实时沟通交流。在现代高速发展的社会里,企业与企业之间的联系日益密切,大量的、复杂的信息交流显得由为重要。随着电子科技的高速发展,那些如何复杂大量的信息,通过网络技术帮助下,就可以轻而易举的从某一地方传送到另一地方,而且简单、快速、准确,给人们带来了很大的方便。而在现代企业中,网络技术在管理中的应用,已显得举足轻重。随着企业信息化进程的进一步深入和发展,计算机在企业中的应用越来越广泛,而企业对计算机的依赖越来越强。随着网络应用的日益丰富以及人们在日常生活中对网络依赖的日渐紧密,那么对于网络吞吐量,网络延时,网络链路的稳定性以及网络服务的多样性就会产生新的要求,同时也希望网络应用的花销能更加低廉,这样针对电信网络运营商所提供的服务将会产生巨大的挑战,本实时通信系统的成功应用将会给运营商们提供更加方便,快捷,稳定,并且低廉的网络运营成本,本实时通信系统帮助企业实现巨大的商业价值的同时也为用户带来的更加高效,快速,稳定并且廉价的网络服务资源。1.2选题理论1.2.1需求分析方法在软件的设计和开发过程中,需求分析是一个重要的阶段,是项目开发的基本要素,是项目实现和实行的关键。软件工程的需求分析指的是了解用户需求,在软件的功能上和客户沟通并且达成一致,评估软件的风险系数和项目需要付出的代价,最终形成一个完善设计实现的复杂过程。目前比较流行的软件需求分析方法有:结构化分析方法和面向对象的分析方法。1.结构化分析结构化分析方法给出一组帮助系统分析人员产生功能规约的原理与技术。它一般利用图形表达用户需求,使用的手段主要有数据流图、数据字典、结构化语言、判定表以及判定树等。结构化分析的步骤如下:①分析当前的情况,做出反映当前物理模型的DFD;②推导出等价的逻辑模型的DFD;③设计新的逻辑系统,生成数据字典和基元描述;④建立人机接口,提出可供选择的目标系统物理模型的DFD;⑤确定各种方案的成本和风险等级,据此对各种方案进行分析;⑥选择一种方案;⑦建立完整的需求规约。2.面向对象分析面向对象是在结构化设计方法出现很多问题的情况下应运而生的。从结构化设计的方法中,我们不难发现,结构化设计方法求解问题的基本策略是从功能的角度审视问题域。它将应用程序看成实现某些特定任务的功能模块,其中子过程是实现某项具体操作的底层功能模块。在每个功能模块中,用数据结构描述待处理数据的组织形式,用算法描述具体的操作过程。面对日趋复杂的应用系统,这种开发思路逐渐暴露了一些弱点。那么面向对象的分析首先根据客户需求抽象出业务对象;然后对需求进行合理分层,构建相对独立的业务模块;之后设计业务逻辑,利用多态、继承、封装、抽象的编程思想,实现业务需求;最后通过整合各模块,达到高内聚、低耦合的效果,从而满足客户要求。1.4.2系统开发设计方法软件的开发设计模型是将软件开发的整个过程、事件以及任务提取汇总而成的结构化框架。软件的开发包括了需求分析、系统设计、编码实现以及单元、系统测试等阶段,有时也会有一部分的后期维护阶段。软件的开发设计模型能够更加清晰、直观地反应出软件设计开发的全部过程,明确定义了开发过程中所需要完成的事件和任务。常见的软件设计模型有:边做边改模型、瀑布模型、原型模型、增量模型、螺旋模型、演化模型、喷泉模型、智能模型、混合模型等,下面将列举并介绍其中比较常用的两种模型。第2章实时
本文标题:探测远程主机操作系统指纹
链接地址:https://www.777doc.com/doc-3123583 .html