探测远程主机操作系统指纹-通信工程毕业论文
2013-06-28 01:04
导读:通信工程论文毕业论文,探测远程主机操作系统指纹-通信工程毕业论文论文样本,在线游览或下载,科教论文网海量论文供你参考:
操作系统探测技术主要有以下几种方式:
获取标识信息 在很
操作系统探测技术主要有以下几种方式:
获取标识信息 在很多探测工具中都使用了此项技术来获得某些服务的标识信息。它往往是通过对二进制文件的收集和分析来实现的。
TCP分段(标准/非标准)响应分析 它是依靠不同操作系统对特定分段的不同反应来区分的。比较流行的工具有Savage的QueSO和Fyodor的NMAP,他们都使用了很多来自于这种技术的变种。
ICMP响应分析 它是刚推出不久的一种技术。它通过发送UPD或ICMP的请求报文,然后分析各种ICMP应答。Ofir Arkin的X-Probe就是使用的这种技术,在通常情况下,X-Probe工作的比较好,但是在防火墙阻塞某些协议时,得到的结果就不那么尽如人意了。
初始化序列号(ISN)分析 在TCP栈中不同的exploits随机产生,通过鉴别足够的测试结果来确定远程主机的操作系统。
特殊的操作系统 拒绝服务同样可以用在操作系统指纹的探测上,而不仅仅是被黑客所使用。在一些非常特殊的情况下,拒绝服务能探测到准确的结果。
在本文中,着重以Nmap为例,介绍一下探测远程主机操作系统指纹的方法。
有许多技术可以用来定义网络栈指纹。基本上,你只要找出操作系统间的不同并写探测器查明它们。如果你合并足够这些,你可以非常细致的区分它们。下面介绍一些这种技术:
FIN 探测器 -- 这里我们送一个FIN包(或任何其他包不带ACK 或SYN标记)给一个打开的端口并等待回应。正确的RFC793行为是不响应,但许多有问题的实现例如 MS Windows, BSDI, CISCO, HP/UX,MVS,和IRIX 发回一个RESET。许多现有工具利用这个技术。
BOGUS 标记探测器 -- Queso 是一个用这种技术的扫描器。它是设置一个未定义的TCP "标记"(64或128)在SYN包的TCP头里。Linux机器到2.0.35之前在回应中保持这个标记。其他OS还没发现有这个错误。然而,一些操作系统象是复位连接当它们得到一个SYN+ BOGUS包的时候。这一行为对辨识它们有用。
TCP ISN 取样 -- 这个主意是找出当响应一个连接请求时由TCP 实现所选择的初始化序列数式样。这可分为许多组例如传统的64K(许多老UNIX机器),随机增量(新版本的Solaris, IRIX, FreeBSD,Digital UNIX, Cray, 和许多其他的),真“随机”(Linux 2.0.*,OpenVMS,新的AIX,等)。Windows 机器(和一些其他的)用一个“时间相关”模型,每过一段时间ISN 就被加上一个小的固定数。不用说,这几乎和老的64K 行为一样容易攻破。当然最让人喜欢的技术是"常数"。机器总是使用确切同样的ISN 。而3Com的集线器(用0x803)和Apple LaserWriter打印机(用0xC7001 )就是这样。你也可以通过例如计算其随机数的变化量,最大公约数,以及序列数的其他函数和数之间的差异再进一步分组。
(转载自http://zw.nseac.coM科教作文网)
不分段位 -- 许多操作系统开始在送出的一些包中设置IP的"Don't Fragment"位。这带来多种性能上的好处(尽管它也可能是讨厌的 -- 这就是nmap的分段扫描对Solaris机器无效的原因)。无论如何,不是所有的OS都这样做而且另一些做的场合不同,所以通过注意这个位我们甚至能收集目标OS的更多信息。
TCP 初始化窗口 -- 这只包括了检查返回包的窗口大小。较老的扫描器简单地用一个非零窗口在RST包中来表示“BSD 4.4 族”。新一些的如queso 和nmap则保持对窗口的精确跟踪因为它对于特定OS基本是常数。这个测试事实上给出许多信息,因为有些可以被唯一确定(例如,AIX 是所知唯一用0x3F25的)。在它们“完全重写”的NT5 TCP 栈中,Microsoft 用的是0x402E。有趣的是,这和OpenBSD 与FreeBSD 中所用的数字完全一样。
ACK 值 -- 不同实现中一些情况下ACK域的值是不同的。例如,如果你送了一个FIN|PSH|URG 到一个关闭的TCP 端口。大多数实现会设置ACK 为你的初始序列数,而Windows 和一些傻打印机会送给你序列数加1 。若你送一个SYN|FIN|URG|PSH 到一个打开的端口,Windows 会非常古怪。一些时候它送回序列号,但也有可能送回序列号加1, 甚至还可能送回一个随机数。
ICMP 错误信息终结 -- 一些操作系统跟从RFC 1812的建议限制各种错误信息的发送率。例如,Linux 内核(在net/ipv4/icmp.h)限制目的不可达消息的生成每4 秒钟80个,违反导致一个1/4 秒的处罚。测试的一种办法是发一串包到一些随机的高UDP 端口并计数收到的不可达消息。
ICMP 消息引用 -- RFC 规定ICMP错误消息可以引用一部分引起错误的源消息。对一个端口不可达消息,几乎所有实现只送回IP请求头外加8 字节。然而,Solaris 送回的稍多,而Linux 更多。这使得nmap甚至在没有对方没有监听端口的情况下认出Linux 和Solaris 主机。
(科教范文网http://fw.ΝsΕΑc.com编辑)
ICMP 错误消息回应完整性 -- 机器会把原始消息的一部分和端口不可达错误一起送回。然而一些机器倾向于在初始化处理时用你的消息头作为“草稿纸”所以再得到时会有些许的改动。例如,AIX 和BSDI送回一个IP“全长”域在20字节处。一些 BSDI,FreeBSD,OpenBSD,ULTRIX,和VAXen 改变了你送的IP ID 。因为TTL 改变而改变了检查和,有些机器(AIX, FreeBSD, 等)送回错误的或0 检查和。总之,nmap作9 种测试在ICMP错误上以分辨出这类细微差别。
服务类型 -- 对于ICMP端口不可达消息可察看送回包的服务类型(TOS)值。几乎所有实现在这个ICMP错误里用0 除了Linux 用0xc0。这不是标准的TOS 值,而是一个未使用优先域(AFAIK) 的一部分。尽管不知道为什么如此,但如果他们改成0 我们还能够分辨旧系统_而且_还能分辨出旧系统和新系统。
TCP 选项 -- 这简直是泄漏信息的金矿。它的好处在于:
1) 这通常是可选的,所以并非所有实现都支持。
2) 若一个实现发出设置了选项的请求,目标通过设置它在回应中表示支持。
3) 可以在一个数据包中设置而一次测试所有选项。
Nmap发送这些选项的几乎所有可能的包:Window Scale=10; NOP; Max Segment Size = 265; Timestamp; End of Ops;当你得到回应,看看那个选项被送回也就是被支持。一些操作系统如最近的FreeBSD 机器支持上面所有的,而其他,如Linux 2.0.X支持的则很少。最近的Linux 2.1.x 内核支持上面所有的。另一方面,它们又有更易受攻击的TCP 序列生成方式。
即使几个操作系统支持同样的选项集,有时仍可以通过选项的值分辨出它们。例如,如果送一个小的MSS值给Linux机器,它会用那个MSS 生成一个回答给你。其他主机会给你不同的值。甚至即使你得到同样的支持选项集和同样得值,你仍可以通过选项提供的顺序和填充字进行辨识,例如Solaris返回'NNTNWME'表示;而Linux 2.2.122返回MENNTNW。同样的选项,同样的值,但不同顺序!
(科教范文网 Lw.nsEAc.com编辑整理)
没见过其他OS检测工具利用TCP 选项,但它非常有用。
因同样原因有其他几个有用的选项我会探测,象那些支持T/TCP和选择性确认。
开发年代 -- 甚至使用上面所有测试,nmap仍不能从TCP 栈区分Win95,WinNT,或Win98。但你可以简单的进行早期的WindowsDOS 攻击(Ping of Death, Winnuke, 等)而比当时的如Teardrop和Land多做一些。就是在每个攻击之后,ping它们看是否垮掉了。等到你最后crash 掉它们,你就能缩小的某一服务包或补丁。
SYN洪水限度 -- 一些操作系统会停止新的连接尝试如果你送太多的伪造SYN 给它(伪造包避免你的内核复位连接)。许多操作系统只能处理8 个包。最近的Linux 内核(包括其他操作系统)允许不同的方式如SYN cookie来防止这成为严重问题。所以你可以试着从伪造地址发8 个包到目标打开的端口再尝试你还能否建立连接以发现一些信息。这没在nmap中实现因为有人不喜欢用SYN 洪水,甚至你解释这只是想知道它运行的操作系统也不能使他们平静。