探测远程主机操作系统指纹的全新技术
2010-05-12 20:35:36 来源:WEB开发网4.3 静态分析
因为数据报可能通过了一些不稳定的网络,比如Internet,这样很可能接收到的连续数据报之间的延迟(r_i)和它们被发送时的延迟(s_i)就不再相同了。
假如我们收到来自目标主机的两个连续的数据报时,测量到的延迟为3.01秒,但是很有可能他们在发送时相互间的延迟为3.0秒。问题在于某些系统实现时将3.2秒作为发送两个连续数据报的时间延迟。而介于3.0秒和3.2秒之间的区间因为太小,以至于无法区分接收到的数据报究竟是来自哪种系统的。
为了避免这个问题,我们可以使用TCP的时间截选项,这样就可以更好的得到何时发送数据报的信息了。在每个数据报里都设置时间截选项将会提高探测结果的准确度。不过,使用时间截选项也许会增加我们判断的难度,因为时间截选项可能会返回一些不准确的时间数据。
这种方法就是建立在指纹的获取以及与现有指纹数据库比较的基础之上的。通常的测量“距离”的方式为求得对应延迟之间的差值:
Distance=∑│ r_i - s_i │
其中r_i为与接收到的第i个数据报相关的时间延迟,s_i为指纹数据库中的相应顺序数据报的时间延迟。
因此,探测到的最可能的操作系统将是求得“距离”最短时的指纹数据库中对应的操作系统。而“距离”的求得并没有考虑TCP数据报头部的一些重要标记(如SYN,ACK,RST,FIN……)的影响。而这些标记往往又能探测到目标主机的运行状态。序号和确认号,这些信息却可以用来区分不同的系统实现方式。
五、RING的执行和现实结果
5.1 库
为了开发的简便,RING使用了标准的C语言和UNIX下的一些库文件。比如Dug Song''s Libdnet library,Mike D. Schiffman Libnet library,Lawrence Berkeley national liboratory Libpcap library。
Libdnet库被用来对防火墙进行控制,它提供了一个API允许控制某些UNIX的防火墙(比如ipchains,ipfilters,ipf……)
Libpcap通常被用来进行网络的监听,以及数据报的分析。
5.2 运行过程
RING对远程主机的探测需要一些初始化参数,目标主机的IP地址,目标主机上一个开放的TCP端口,扫描主机的IP地址以及用于监听数据报的网络接口。
然后,RING将会执行下面的步骤:
- 源端口的选择;
- 使用libdnet,建立起本地过滤设施,阻挡来自目标主机的数据报;
- 使用libpcap监听收到的数据报;
- 使用libnet,发送一个TCP SYN数据报到探测目标主机;
- 在默认/调整过的延迟内监听回送的数据报
- 将收到的回送数据报与以知的签名相比较
更多精彩
赞助商链接