人家说要想百站百胜,你必须知己知彼,你要保护系统不被攻击,你首先必须了 解攻击者,被动特征探测(Passive Fingerprinting )是一种了解攻击者的而 不被其发觉的一种方法
Fingerprinting
传统上,操作系统特征可以使用一些积极的工具,如queso或者nmap,这些工具是 在每一个操作系统上的IP堆栈有自己不同特性的原理上来操作的,每个操作系统 响应通过的多种信息包。所以这些工具只要建立一个基于不同的操作系统对应不 同的信息包的数据库,然后,要判断远程主机的操作系统,发送多种不寻常的信 息包,检测其是怎样响应这些信息包的,再与数据库进行对比做出判断。Fyodor 的 nmap--http://www.insecure.org/nmap工具就是利用这种方法的,他也写了一 份具体的文档http://www.insecure.org/nmap/nmap-fingerprinting-article.html, 另外绿盟backend也写过这中文文章。
而被动特征探测(Passive Fingerprinting )遵循相同的概念,但实现的方法不 同。被动特征探测(Passive Fingerprinting )基于嗅探远程主机上的通信来代替 主动的去查询远程主机,所有你需要做的是抓取从远程主机上发送的信息包。在 嗅谈这些信息包的基础上,你可以判断远程主机的操作系统,就象主动特征探测 一样,被动特征探测(Passive Fingerprinting )也是由每个操作系统的有自己 的IP堆栈特征,通过分析sniffer traces 和鉴别他们之间的不同之处,就可以判断 远程主机的操作系统了
信号
判断主机的操作系统一般可以由4个方面来决定(当然也有其他信号存在):
--TTL - 这个数据是操作系统对出站的信息包设置的存活时间。 --窗口大小Window Size - 是操作系统设置的窗口大小,这个窗口大小是 在发送FIN信息包时包含的选项。 --DF -可以查看是否操作系统设置了Don't Fragment bit位? --TOS - 是否操作系统设置了设备类型?
通过分析信息包这些因数,你可以判断一个远程的操作系统,当然探测到的系统 不可能100%正确,也不能依靠上面单个的信号特征来判断系统,但是,通过查看 多个信号特征和组合这些信息,你可以增加对远程主机的精确程度。下面是一个 简单的例子,下面是the sniffer trace of a system 发送一个信息包, .This system launched a mountd exploit against me, 我现在不要使用finger 或者NMAP等工具,而想要了解被动接受到的信息,使用snort-- http://www.clark.net/~roesch/security.html得到了下面的一些信号特征:
TCP TTL:45 TOS:0x0 ID:56257 ***F**A* Seq: 0x9DD90553 Ack: 0xE3C65D7 Win: 0x7D78
根据上面的四条准则,我们可以达到下面的情况:
-- TTL: 45 -- Window Size: 0x7D78(or 32120 in decimal) -- DF: The Don't Fragment bit is set --TOS: 0x0
我们在比较信号特征数据库--,首先,我们查看使用在远程系统上的TTL,从我们 的sniffer trace 可以看到TTL是45,这多数表示它通过19跳来被我们捕获,因此 原始的TTL是设置为64,基于这个TTL,这个信息包应该看来是由LINUX和FREEBSD 系统发来的(当然更多的系统信号特征需要放到数据库中),这个TTL通过了 traceroute远程主机得到证实,如果你考虑到远程主机在检测你的traceroute, 你可以设置你traceroute的time-to-live(默认是30跳),使用-m选项来设定到 主机的跳数少1到2跳的数值,如,刚才的例子里,我们可以使用traceroute -m 18 来设置跳数为18跳,这样做可以让你看到到达主机的路径而不碰到远程主机。 要多TTL的信息,请查看http://www.switch.ch/docs/ttl_default.html
下一步是比较窗口大小-Windows size,用Windows size来判断是另一个非常有效 的工具,特别是使用多大的窗口大小和改变大小的规律,在上面的信号特征中, 我们可以看到其设置为0x7D78,这是LINUX通常使用的默认窗口大小。LINUX,FREEBSD 和SOLARIS系统在完整的一个会话过程中窗口的大小是维持不变的,但是 ,部分 Cisco路由器(如2514)和WINDOWS/NT的窗口是经常改变的(在一个会话阶段), 如果在初始化三次握手后衡量窗口大小是比较精确的,具体信息,可以看看 Richard Stevens的"quot;TCP/IP Illustrated, Volume 1"quot; 20章.
多数系统使用DF位设置,因此这个是一个限定的值,但是有些系统如SCO和OPENBSD 不使用这个DF标志,所以就比较容易的用来鉴别一些没有这个DF位设置的系统,在 更多的测试后,发现TOS也是一个限定的值,这就表示不是很多操作系统来判断TOS, 而是协议在使用这个值。TOS的判定需要更多的测试。因此,根据上面的信息,一些 特殊的TTL值和窗口大小值,你可以通过信号数据库来比较结果。
注意,与主动特征探测一样,passive Fingerpinting有许多限制,首先,应用 程序必须构建他们自己的与操作系统不同信号特征信息包(如NMAP,HUNT ,TEARDROP等)。 其次,这种探测可以使用调整系统的信息包的值来避免,如可以用下面的方法来 改变TTL值:
Solaris: ndd -set /dev/ip ip_def_ttl 'number' Linux: echo 'number' "gt; /proc/sys/net/ipv4/ip_default_ttl NT: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
其他信息特征和使用
上面的是讨论了4个信号特征,但还有其他的特征可以被跟踪,如一些初始化序列 好,IP鉴定号码(IP Identification numbers ),TCP或者IP的选项。如: Cisco路由器趋向由0开始IP鉴定号码(IP Identification numbers )来代替 随机的指派号码。也可以使用ICMP的有效负载来判断, http://dev.whitehats.com/papers/passive/index.html使用ICMP有效负载类型 或者TCP选项来鉴别远程主机,举个离子,微软的ICMP REQUEST的有效负荷包含 字母,而SOLAIRS或者LINUX的ICMP REQUEST有效符合包含数字和符号。又如TCP 选项,选择性的应答Acknowledgement选项SackOK --(rfc2018)通常被WINDOWS 和LINUX使用,但FREEBSD和SOLARIS这个选项不使用。另一个信号特征是信息包状 态,什么类型的信息包被使用,可以应用FYODOR的话说: "quot;For example, the initial SYN request can be a gold mine (as can the reply to it). RST packets also have some interesting features that can be used for identification."quot;(例如,初始化的SYN请求是一个金矿(以为这个SYN请求 是要回复的),RST信息包也具有一些比较有趣的特征用来鉴别系统)。
xundi1@21cn.com2000-05-18 http://www.netguard.com.cn http://focus.sivlersand.net
|