探测远程主机操作系统指纹.doc

上传人:文库蛋蛋多 文档编号:2397358 上传时间:2023-02-17 格式:DOC 页数:3 大小:17.50KB
返回 下载 相关 举报
探测远程主机操作系统指纹.doc_第1页
第1页 / 共3页
探测远程主机操作系统指纹.doc_第2页
第2页 / 共3页
探测远程主机操作系统指纹.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《探测远程主机操作系统指纹.doc》由会员分享,可在线阅读,更多相关《探测远程主机操作系统指纹.doc(3页珍藏版)》请在三一办公上搜索。

1、探测远程主机操作系统指纹 操作系统探测技术主要有以下几种方式:获取标识信息  在很多探测工具中都使用了此项技术来获得某些服务的标识信息。它往往是通过对二进制文件的收集和分析来实现的。TCP分段(标准/非标准)响应分析  它是依靠不同操作系统对特定分段的不同反应来区分的。比较流行的工具有Savage的QueSO和Fyodor的NMAP,他们都使用了很多来自于这种技术的变种。ICMP响应分析  它是刚推出不久的一种技术。它通过发送UPD或ICMP的请求报文,然后分析各种ICMP应答。Ofir Arkin的X-Probe就是使用的这种技术,在通常情况下,X-Probe工

2、作的比较好,但是在防火墙阻塞某些协议时,得到的结果就不那么尽如人意了。初始化序列号(ISN)分析  在TCP栈中不同的exploits随机产生,通过鉴别足够的测试结果来确定远程主机的操作系统。特殊的操作系统  拒绝服务同样可以用在操作系统指纹的探测上,而不仅仅是被黑客所使用。在一些非常特殊的情况下,拒绝服务能探测到准确的结果。在本文中,着重以Nmap为例,介绍一下探测远程主机操作系统指纹的方法。有许多技术可以用来定义网络栈指纹。基本上,你只要找出操作系统间的不同并写探测器查明它们。如果你合并足够这些,你可以非常细致的区分它们。下面介绍一些这种技术:FIN 探测器 - 这里我

3、们送一个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 I

4、SN 取样 - 这个主意是找出当响应一个连接请求时由TCP 实现所选择的初始化序列数式样。这可分为许多组例如传统的64K(许多老UNIX机器),随机增量(新版本的Solaris, IRIX, FreeBSD,Digital UNIX, Cray, 和许多其他的),真“随机”(Linux 2.0.*,OpenVMS,新的AIX,等)。Windows 机器(和一些其他的)用一个“时间相关”模型,每过一段时间ISN 就被加上一个小的固定数。不用说,这几乎和老的64K 行为一样容易攻破。当然最让人喜欢的技术是”常数”。机器总是使用确切同样的ISN 。而3Com的集线器(用0x803)和Apple La

5、serWriter打印机(用0xC7001 )就是这样。你也可以通过例如计算其随机数的变化量,最大公约数,以及序列数的其他函数和数之间的差异再进一步分组。不分段位 - 许多操作系统开始在送出的一些包中设置IP的”Dont Fragment”位。这带来多种性能上的好处(尽管它也可能是讨厌的 - 这就是nmap的分段扫描对Solaris机器无效的原因)。无论如何,不是所有的OS都这样做而且另一些做的场合不同,所以通过注意这个位我们甚至能收集目标OS的更多信息。TCP 初始化窗口 - 这只包括了检查返回包的窗口大小。较老的扫描器简单地用一个非零窗口在RST包中来表示“BSD 4.4 族”。新一些的如

6、queso 和nmap则保持对窗口的精确跟踪因为它对于特定OS基本是常数。这个测试事实上给出许多信息,因为有些可以被唯一确定(例如,AIX 是所知唯一用0x3F25的)。在它们“完全重写”的NT5 TCP 栈中,Microsoft 用的是0x402E。有趣的是,这和OpenBSD 与FreeBSD 中所用的数字完全一样。ACK 值 - 不同实现中一些情况下ACK域的值是不同的。例如,如果你送了一个FIN|PSH|URG 到一个关闭的TCP 端口。大多数实现会设置ACK 为你的初始序列数,而Windows 和一些傻打印机会送给你序列数加1 。若你送一个SYN|FIN|URG|PSH 到一个打开的

7、端口,Windows 会非常古怪。一些时候它送回序列号,但也有可能送回序列号加1, 甚至还可能送回一个随机数。ICMP 错误信息终结 - 一些操作系统跟从RFC 1812的建议限制各种错误信息的发送率。例如,Linux 内核(在net/ipv4/icmp.h)限制目的不可达消息的生成每4 秒钟80个,违反导致一个1/4 秒的处罚。测试的一种办法是发一串包到一些随机的高UDP 端口并计数收到的不可达消息。ICMP 消息引用 - RFC 规定ICMP错误消息可以引用一部分引起错误的源消息。对一个端口不可达消息,几乎所有实现只送回IP请求头外加8 字节。然而,Solaris 送回的稍多,而Linux

8、 更多。这使得nmap甚至在没有对方没有监听端口的情况下认出Linux 和Solaris 主机。ICMP 错误消息回应完整性 - 机器会把原始消息的一部分和端口不可达错误一起送回。然而一些机器倾向于在初始化处理时用你的消息头作为“草稿纸”所以再得到时会有些许的改动。例如,AIX 和BSDI送回一个IP“全长”域在20字节处。一些 BSDI,FreeBSD,OpenBSD,ULTRIX,和VAXen 改变了你送的IP ID 。因为TTL 改变而改变了检查和,有些机器(AIX, FreeBSD, 等)送回错误的或0 检查和。总之,nmap作9 种测试在ICMP错误上以分辨出这类细微差别。服务类型

9、- 对于ICMP端口不可达消息可察看送回包的服务类型(TOS)值。几乎所有实现在这个ICMP错误里用0 除了Linux 用0xc0。这不是标准的TOS 值,而是一个未使用优先域(AFAIK) 的一部分。尽管不知道为什么如此,但如果他们改成0 我们还能够分辨旧系统_而且_还能分辨出旧系统和新系统。TCP 选项 - 这简直是泄漏信息的金矿。它的好处在于:1) 这通常是可选的,所以并非所有实现都支持。2) 若一个实现发出设置了选项的请求,目标通过设置它在回应中表示支持。3) 可以在一个数据包中设置而一次测试所有选项。       

10、                 Nmap发送这些选项的几乎所有可能的包:Window Scale=10; NOP; Max Segment Size = 265; Timestamp; End of Ops;当你得到回应,看看那个选项被送回也就是被支持。一些操作系统如最近的FreeBSD 机器支持上面所有的,而其他,如Linux 2.0.X支持的则很少。最近的Linux 2.1.x 内核支持上面所有的。另一方面,它们又有更易受攻击的T

11、CP 序列生成方式。即使几个操作系统支持同样的选项集,有时仍可以通过选项的值分辨出它们。例如,如果送一个小的MSS值给Linux机器,它会用那个MSS 生成一个回答给你。其他主机会给你不同的值。甚至即使你得到同样的支持选项集和同样得值,你仍可以通过选项提供的顺序和填充字进行辨识,例如Solaris返回NNTNWME表示;而Linux 2.2.122返回MENNTNW。同样的选项,同样的值,但不同顺序!没见过其他OS检测工具利用TCP 选项,但它非常有用。因同样原因有其他几个有用的选项我会探测,象那些支持T/TCP和选择性确认。开发年代 - 甚至使用上面所有测试,nmap仍不能从TCP 栈区分W

12、in95,WinNT,或Win98。但你可以简单的进行早期的WindowsDOS 攻击(Ping of Death, Winnuke, 等)而比当时的如Teardrop和Land多做一些。就是在每个攻击之后,ping它们看是否垮掉了。等到你最后crash 掉它们,你就能缩小的某一服务包或补丁。SYN洪水限度 - 一些操作系统会停止新的连接尝试如果你送太多的伪造SYN 给它(伪造包避免你的内核复位连接)。许多操作系统只能处理8 个包。最近的Linux 内核(包括其他操作系统)允许不同的方式如SYN cookie来防止这成为严重问题。所以你可以试着从伪造地址发8 个包到目标打开的端口再尝试你还能否建立连接以发现一些信息。这没在nmap中实现因为有人不喜欢用SYN 洪水,甚至你解释这只是想知道它运行的操作系统也不能使他们平静。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号