本文是 Honeynet Project 的"了解你的敌人:被动式指纹探测"系列文章的中文翻译,原文发布于 project.honeynet.org,中文翻译来自 xfocus.net。
网络安全的挑战之一就是你需要了解攻击者,要了解你存在的威胁并保护你自己的资源,你需要了解你的敌人,被动特征探测是了解攻击者而不被攻击者觉察的方法之一,虽然这种方法可能不是100%正确,但你会获得一些令你诧异的结果。Craig Smith开发基本本文概念的工具passfing.另外subterrain crew也开发了siphon,一个可以被动探测端口和OS的工具。Fingerprinting
传统上,操作系统特征可以通过"积极性"的工具,如queso或者nmap,这些工具是在每一个操作系统上的IP堆栈有自己不同特性的原理上来操作的,每个操作系统响应通过的多种信息包。所以这些工具只要建立一个基于不同的操作系统对应不同的信息包的数据库,然后,要判断远程主机的操作系统,发送多种不寻常的信息包,检测其是怎样响应这些信息包的,再与数据库进行对比做出判断。Fyodor的 nmap工具就是利用这种方法的,他也写了一份具体的文档。
而被动特征探测(Passive Fingerprinting )遵循相同的概念,但实现的方法不同。被动特征探测(Passive Fingerprinting )基于嗅探远程主机上的通信来代替主动的去查询远程主机,所有你需要做的是抓取从远程主机上发送的信息包。在嗅探这些信息包的基础上,你可以判断远程主机的操作系统,就象主动特征探测一样,被动特征探测(Passive Fingerprinting )也是由每个操作系统的有自己的IP堆栈特征,通过分析sniffer traces 和鉴别他们之间的不同之处,就可以判断远程主机的操作系统了。
信号
判断主机的操作系统一般可以由4个方面来着手(当然也有其他信号存在):
TTL - 这个数据是操作系统对出站的信息包设置的存活时间。
Window Size - 是操作系统设置的窗口大小,这个窗口大小是在发送FIN信息包时包含的选项。
DF - 可以查看是否操作系统设置了不准分片位
TOS - 是否操作系统设置了服务类型
通过分析信息包这些因数,你可以判断一个远程的操作系统,当然探测到的系统不可能100%正确,也不能依靠上面单个的信号特征来判断系统,但是,通过查看多个信号特征和组合这些信息,你可以增加对远程主机的精确程度。下面是一个简单的例子,下面是被探测的系统发送一个信息包,这个系统发起了一个mountd的漏洞攻击,因此我想了解这个主机, 我现在不使用finger或者NMAP等工具,而想要了解被动接受到的信息,使用snort得到了下面的一些信号特征:
04/20-21:41:48.129662 129.142.224.3:659 -> 172.16.1.107:604
TCP TTL:45 TOS:0x0 ID:56257
FA 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,从我们的获得信息可以看到TTL是45,这多数表示它通过19跳才到达我们主机,因此原始的TTL应该是设置为64,基于这个TTL,这个信息包应该看来是由LINUX和FREEBSD系统发来的(当然更多的系统信号特征需要放到数据库中),这个TTL通过了traceroute远程主机得到证实,如果你考虑到远程主机在检测你的traceroute,你可以设置你traceroute的time-to-live(默认是30跳),使用-m选项来设定到主机的跳数少1到2跳的数值,如,刚才的例子里,我们可以使用traceroute -m 18来设置跳数为18跳,这样做可以让你看到到达主机的路径而不碰到远程主机。要更多关于TTL的信息,请查看这篇文章