今天早上一个朋友问我,说啥工具发现网络中被嗅探的比较好,我说ISS的anti-Sniffer不行吗,他说太慢!后来记起来以前逛网路的时候看到过这样的一个程序,也是antisniffer类型的,所以又把其找了出来。 Sentinel主要是设计思想是portable,arrcurateimplementation,就是说小巧点,精确实现几个熟知的杂乱方式探测技术。其中Sentinel支持三种方法的 远程杂乱探测模式:DNS测试,Etherping测试,和ARP测试,其中还有一种ICMP pingLatency(ICMPPING反应时间)正在开发中。 此程序需要Libnet和libpcap库来支持,大家可以到下面的地址去下载: LIbnet1.0:http://www.packetfactory.net/Projects/libnet libpcap0.4:ftp://ftp.ee.lbl.gov/libpcap-0.4.tar.Z 首先说下它其中使用的三种模式: ――ARP测试模式: 这种方法是采用发送一个ARP请求,其中包含所有正确 信息除了伪造的目标主机MAC硬件地址给我们的目标主机,这样如果目标主机没有处于杂乱模式,它将不会理睬这些信息包,因为这些信息包 其认为不是指定给它们的,所以不会进行响应和回复,但如果此目标机器 处于杂乱模式,ARP请求就会发生并进行内核处理,通过机器的回应信息 我们就可以知道其处于杂乱模式。这种方法结合内核的特性来查看机器 的运作状态,请看下面的Etherping测试模式。 - -DNS测试模式: DNS测试主要是针对网络数据收集工具能执行IP到名字 反转解析来提供DNS名字来代替IP地址(TheDNStestsoperateon thepremisethatmanyattackernetworkdatagatheringtools performIPtonameinverseresolutiontoprovideDNSnamesin placeofIPaddresses)。在执行反转查询中,工具会从被动网络工具 模式转变为主动网络工具,而那些没有监视网络书记的工具就不会去解析 信息包中的IP地址。利用这种信息,ANTISNIFFER工具可以自身在本地主机 中变为杂乱模式并在我们网络中发送无数个伪造的主机,这样,ANTISNIFFER 工具就可以嗅探DNS请求来查看目标是否在请求解析那些不存在主机。 ――Etherping测试模式: Etherping测试模式依赖于目标主机的内核,也就所谓的内核测试。 在通常情况下,硬件网络接口卡过滤和丢弃那些MAC地址不同于自己机器 上的MAC地址的信息包或者不是广播Ethernet地址的地址。就是说信息包 是正确和实际的Ethernet地址或者是广播Ethernet地址,接口就会把这些 地址COPY和传递给内核进行进一步处理。 但某些系统假定包含在以太帧中的数据包含某个目标主机中正确的IP地址 或者广播地址,但具有不同于本地主机的MAC地址,当NIC设置为杂乱模式, 发送给目标主机的每个数据包它还是傻傻的传递给操作系统进行分析。这 样通过发送包含正确IP地址和不正确MAC地址的ICMPECHO包给要检测的 主机,如果目标主机回应了我们的请求,我们就知道其处于杂乱模式了。 多种LINUX内核存在这种问题,其中NETBSD也可以利用这个问题来检测 杂乱模式,但需要使用广播地址的信息包,这种信息包使用带伪造ether 帧的IP地址,如66:66:66:66:66:66. 关于WINDOWS95,98,NT的操作系统在杂乱模式中确实是检查信息包 ETHER地址的,如果信息包的NICETHER地址符合本地主机就让堆栈来处理。 但WINDOWS对广播的ether信息包存在问题,在普通环境下,如机器不在 杂乱模式下,NIC只把含有起本身MAC地址的信息包或者ether地址是 ff:ff:ff:ff:ff:ff传递给内核。但当在杂乱模式中驱动程序是检查 ETHER地址,但它只检查ETHER地址的第一个八未组是否为Oxff就来判断 信息包是否为广播或者其他,因此如果我们建立一个包含EHTER地址为 ff:00:00:00:00:00的IP正确的信息包并发送给目标机器,如果其进行 了响应的回应,就表示起处于杂乱模式。 但对WINDOWS的这种方法是依赖于所用的驱动程序的,默认的微软驱动 程序有此特性并且大多数供应商的驱动程序也有此特性,但某些NIC 过滤广播只是依靠第一个八为组,所以这些卡不适合此方法。 ――网络和机器的反应时间测试(也可以说ICMPPING反应时间): 这种模式是比较有效的测试方法,依据是靠对操作系统的影响来测试。 但其中的坏处就是这些测试会在短期内产生一些 多数量的网络通信。 这些测试假定当网络卡不处于杂乱模式时提供硬件过滤,这样的话,信息 包不是指定给本身机器的将被网络卡丢弃。当在这中情况下,在网络通信 信息量将动态增长对操作系统的影响很小,相反的处于杂乱状态的机器由于不 对这层进行过滤,就把这些信息传递给系统或者用户模式进行过滤,会对 操作系统产生比较大的影响。简单的说,我们先正常情况下PING一机器, 再我们构建很多伪造的TCP连接来ping程序来ping目标,并且注意RTT(round triptime),这样处于杂乱模式的机器由于会处理这些垃圾信息包,并 影响系统并导致网络反映时间增加,然后来比较各个RTT,经过多次测试和 人工判断就能决定目标机器上是否存在SNIFFER. Sentinel是根据这些方法来进行测试的程序,是有源代码形式发放的。使用于 OPENBSD2.6;FREEBSD3.X;NETBSD1.4.1;LINUX2.2.X平台。 编译后使用方法为: #./sentinel-t192.168.0.1-a是ARP测试。 #./sentinel-t192.168.0.1-e是etherpingtest;#./sentinel-t192.168.0.1-f1.1.1.1-d是DNS测试;#./sentinel-t192.168.0.1-f1.1.1.1-d-a-e是允许所有模式进行测试;