、高级应用
1、用脚本执行
这是配合选项-c的,其执行方法也很简单,比如以如下方式编辑一个叫sh的文件
selectfromhost180.180.180.1
selecttohost180.180.180.10
selectbothport21
然后执行:sniffit-csh
说明:监听从180.180.180.1送往180.180.180.10的数据包,端口为FTP口。这里不做更多说明,你可以自己去看里面的README。
2、插件
要获取一个插件是很简单的,你将它放入sniffit的目录下,并且象如下方式编辑sn_plugin.h文件:
#define PLUGIN1_NAME "Myplugin"
#define PLUGIN1(x) main_plugin_function(x)
#include "my_plugin.plug"
注意:
a)你可以让plugin从0-9,所以从PLUGIN0_NAME到PLUGIN1_NAME……不必是连续的
d)#include"my_plugin.plug"这是我的插件源代码放置的地方。如果想详细了解的话,还是看看里面的plugin.howto吧。
3、介绍tod
这东东便是sniffit最有名的一个插件了,为什么叫TOD呢--touchofdeath,它可以轻易地切断一个TCP连接,原理是向一个TCP连接中的一台主机发送一个断开连接的IP包,这个IP包的RST位置1,便可以了。
将下载下来的tod.tar.gz拷贝到sniffit所在目录下,解压安装后ln-stodsniffit_key5就可以将这相程序与F5键连接起来,想切断哪台机器的话,只要在窗口中将光标指到需要断线的机器上按下F5键就可以了。你可以自由地定义成其它的F功能键--F1~F4不行,它们已经被定义过了……
[2] 在NT下的sniffit
Sniffit 0.3.7推出了NT版本,也支持WINDOWS2000,这个sniffit需要WinPcap包,就是类似与libpcap的包,支持WIN32平台上可以信息包捕获和网络分析,是基于UNIX的libpcap和BPF(Berkeley 分帧过滤器)模型的包。它包括内核级的包过滤驱动程序,低级动态连接库(packet.dll),和高级系统无关性库(libpcap,基于0.4a6版本)。
这个WinPcap信息包捕获启动程序可把设备驱动增加在Windows 95, Windows 98, Windows NT 和 Windows 2000 上,可以有能力捕获和发送通过原始套接口的信息包(raw packets),Packet.dll是一个能用来直接访问BPF驱动程序的API。
WinPcap在http://netgroup-serv.polito.it/windump和http://netgroup-serv.polito.it/analyzer这两个工具中成功应用。最新的WinPcap是版本2.02,修补了2.01版本中的一些缺陷,并且支持WIN2000。具体信息和源代码可以在下面这个站点找到:
http://netgroup-serv.polito.it/winpcap/
下面是在WIN2K中安装的步骤:
1)先下载packet.exe这个程序后展开安装。
2)打开WINDOWS2000的控制面板
3)从控制面板中双击"网络和拨号连接"图标,在打开"本地连接"图标,并选择属性选项。
4)在显示的对话框中选择"安装",安装网络组件。
5)再在出现的对话框中选择"协议",点击"增加"。
6)在出现的对话框中选择"从磁盘安装",选择正确路径,就是刚才你解压的网络设备驱动程序(这个文件夹中必须包含packet.inf和packet.sys)的地方,在选择确定。
7)在选择"Packet capture Driver v X.XX ",并按照指示来完成安装,往往要你WINDOWS2000的安装光盘。
8)查看网络组件中有没有 Packet capture Driver v X.XX 这一行,有的话说明这个驱动程序已经建立并绑定了网络接口。
再重新启动机器。然后解压sniffit_nt.0.3.7.beta,再使用命令行模式,我简单的使用了一个命令行,刚开始是使用sniffit -t 192.168.0.1 -p 21,想监视下21 FTP端口的密码捕获成不成功,但出现"Automatic network device lookup not yet supported in Win32 version... use -F \Device\Packet_{31BB7ED2-125E-11D4-8F11-D79985727802} to force the choice,Read the README.FIRST on how to force network devices.的提示,于是我按照其提示所示,使用了sniffit -F \Device\packet_{31BB7ED2-125E-11D4-8F11-D79985727 802} -t 192.168.0.1 -p 21命令,这时出现下面的提示:
Forcing device to \Device\packet_{31BB7ED2-125E-11D4-8F1 quested)...
Make sure you have read the docs carefully.
Sniffit.0.3.7 Beta is up and running.... (192.168.0.1)
这就表明sniffit在工作了,于是在FTP到NT的端口,输入密码,随即就可以在刚才SNIFFIT的目录下看到一个关于192.168.0.2.1281-192.168.0.1.21的文件,打开后查看里面的内容如下所示:
USER xundi
PASS xxxxxxx-------->我隐藏了,XIXI
SYST
PORT 192,168,0,2,5,2
LIST
PORT 192,168,0,2,5,3
LIST
CWD g:
CWD c
PORT 192,168,0,2,5,26
LIST
CWD hack
PORT 192,168,0,2,5,88
LIST
看,是不是很整洁啊,至于文件名为何是这样192.168.0.2.1281-192.168.0.1.21,那是应该是一个客户/服务器模式,客户端的连接是随意开一个1281端口地址和192.168.0.1的21口连接。
五、如何监测主机正在窃听(sniffed)
如何才知道有没有sniffer在我的网上跑呢?这也是一个很难说明的问题,比较有说服力的理由证明你的网络有sniffer目前有这么几条:
1、你的网络通讯掉包率反常的高。
通过一些网络软件,你可以看到你的信息包传送情况(不是sniffer),向ping这样的命令会告诉你掉了百分几的包。如果网络中有人在听,那么你的信息包传送将无法每次都顺畅的流到你的目的地。(这是由于sniffer拦
截每个包导致的)
2、你的网络带宽将出现反常。
通过某些带宽控制器(通常是火墙所带),你可以实时看到目前网络带宽的分布情况,如果某台机器长时间的占用了较大的带宽,这台机器就有可能在听。在非高速信道上,如56Kddn等,如果网络中存在sniffer,你应该也可以察觉出网络通讯速度的变化。
3、通常一个sniffer的记录文件会很快增大并填满文件空间。在一个大型网络中,sniffer明显加重机器负荷。这些警告信息往往能够帮助管理员发现sniffer。
4、一个主机上的sniffer会将网络接口置为混杂模式以接收所有数据包。对于某些UNIX系统, 通过监测到混杂模式的网络接口。虽然可以在非混杂模式下运行sniffer,但这样将只能捕获本 机会话。只有混杂模式下的 sniffing才能捕获以太网中的所有会话,其它模式只能捕获本机会话。
对于SunOS、linux和其它BSD Unix系统,如下命令:
"ifconfig -a"
会显示所有网络接口信息和是否在混杂模式。DEC OSF/1和IRIX等系统需要指定设备。要找到系统中有什么网络接口,可以运行如下命令:
# netstat -r
Routing tables
Internet:
Destination Gateway Flags Refs Use Interface
default iss.net UG 1 24949 le0
localhost localhost UH 2 83 lo0
然后通过如下命令检查每个网络接口:
#ifconfig le0
le0: flags=8863
inet 127.0.0.1 netmask 0xffffff00 broadcast 255.0.0.1
入侵者经常会替换ifconfig等命令来避开检查,因此一定要检查命令程序的校验值。
在ftp.cert.org:/pub/tools/的cpm程序(SunOS平台)可以检查接口是否有混杂模式标记。
这些命令只在sniffer与内核存在链接时有效。而在缺省情况,sniffer是没有与内核链接的。大多数的Unix系统,例如Irix、Solaris、SCO等,都没有任何标记来指示是否处于混杂模式,因此入侵者能够窃听整个网络而却无法监测到它。
如果机器上使用两块网卡,把一块设置为杂乱模式,并把IP地址设置为0.0.0.0,另一块卡处于正常的模式并是正确的地址,这样将很难发现SNIFFER的存在。
注意:要监测只采集数据而不对任何信息进行响应的窃听设备,需要逐个仔细检查以太网上所有物理连接,不可能仅通过远程发送数据包或ping就可以检查计算机是否正在窃听.
六、如何阻止sniffer
<1>交换
随着交换机的成本和价格的大幅度降低,交换机已成为非常有效的使sniffer失效的设备。目前最常见的交换机在第三层(网络层)根据数据包目标地址进行转发,而不太采取集线器的广播方式,从理论上讲,通过交换设备对网络进行分段后,sniffer将无法透过边界而窥探另一边的数据包。但是,请注意:这是在边界设备不转发广播包的情况下(这也是通常的网络情况)。一旦入侵者使用spoofer诱骗某个边界设备而将自己的广播包流入不该进入的网段后,原理上还是在一个共享设备端使用sniffer,而实际上将是听到了边界的另一边).当然,这样会牵涉到ip欺诈和Mac欺诈的问题,然而,你别忘了,sniffer和spoofer是很少分开来的。
<2>加密
目前有许多软件包可用于加密连接,从而使入侵者即使捕获到数据,但无法将数据解密而失去窃听的意义。
<3>入侵检测
使用诸如Tripwire之类的工具,生成文件系统的MD5"数据指纹",及时发现被修改的系统文件;
<4)使用antisniffer软件
一些流行的检测SNIFFER的程序:
http://www.attrition.org/security/newbie/security/sniffer/promisc.c --是一个很小的C程序,当编译好后,会查找本地机器上任何处于杂乱模式的NIC网络适配卡。
http://www.attrition.org/security/newbie/security/sniffer/neped.c --是一个用来远程检查任何嗅探活动的程序,可惜它只在LINUX下编译,当然你也可以简单的使用ifconfig-a来检查你的UNIX机器是否有PROMISC标志。
http://www.l0pht.com/antisniff/这是L0pht写的很好的反SNIFFER程序,L0PHT还打算公开LINUX版本上的源码版本。
下面我介绍一下sentinel的用法
Sentinel主要是设计思想是portable,arrcurate implementation,就是说小巧点,精确实现几个熟知的杂乱方式探测技术。其中Sentinel支持三种方法的远程杂乱探测模式:DNS测试,Etherping测试,和ARP测试,其中还有一种ICMP ping Latency(ICMP PING反应时间)正在开发中。
此程序需要Libnet和libpcap库来支持,大家可以到下面的地址去下载:
LIbnet 1.0: http://www.packetfactory.net/Projects/libnet
libpcap 0.4: ftp://ftp.ee.lbl.gov/libpcap-0.4.tar.Z
首先说下它其中使用的三种模式:
--ARP测试模式:
这种方法是采用发送一个ARP请求,其中包含所有正确信息除了伪造的目标主机MAC硬件地址给我们的目标主机,这样如果目标主机没有处于杂乱模式,它将不会理睬这些信息包,因为这些信息包其认为不是指定给它们的,所以不会进行响应和回复,但如果此目标机器处于杂乱模式,ARP请求就会发生并进行内核处理,通过机器的回应信息我们就可以知道其处于杂乱模式。这种方法结合内核的特性来查看机器的运作状态,请看下面的Etherping 测试模式。
-- DNS测试模式:
DNS测试主要是针对网络数据收集工具能执行IP到名字反转解析来提供DNS名字来代替IP地址(The DNS tests operate on the premise that many attacker network data gathering tools perform IP to name inverse resolution to provide DNS names in place of IP addresses)。在执行反转查询中,工具会从被动网络工具
模式转变为主动网络工具,而那些没有监视网络书记的工具就不会去解析信息包中的IP地址。利用这种信息,ANTI SNIFFER工具可以自身在本地主机中变为杂乱模式并在我们网络中发送无数个伪造的主机,这样,ANTI SNIFFER
工具就可以嗅探DNS请求来查看目标是否在请求解析那些不存在主机。
--Etherping 测试模式:
Etherping 测试模式依赖于目标主机的内核,也就所谓的内核测试。在通常情况下,硬件网络接口卡过滤和丢弃那些MAC地址不同于自己机器上的MAC地址的信息包或者不是广播Ethernet 地址的地址。就是说信息包是正确和实际的Ethernet地址或者是广播Ethernet地址,接口就会把这些地址COPY和传递给内核进行进一步处理。
但某些系统假定包含在以太帧中的数据包含某个目标主机中正确的IP地址或者广播地址,但具有不同于本地主机的MAC地址,当NIC设置为杂乱模式,发送给目标主机的每个数据包它还是傻傻的传递给操作系统进行分析。这样通过发送包含正确IP地址和不正确MAC地址的ICMP ECHO包给要检测的主机,如果目标主机回应了我们的请求,我们就知道其处于杂乱模式了。
多种LINUX内核存在这种问题,其中NETBSD也可以利用这个问题来检测杂乱模式,但需要使用广播地址的信息包,这种信息包使用带伪造ether帧的IP地址,如66:66:66:66:66:66.
关于WINDOWS95,98,NT的操作系统在杂乱模式中确实是检查信息包ETHER地址的,如果信息包的NIC ETHER地址符合本地主机就让堆栈来处理。但WINDOWS对广播的ether信息包存在问题,在普通环境下,如机器不在杂乱模式下,NIC只把含有起本身MAC地址的信息包或者ether地址是ff:ff:ff:ff:ff:ff传递给内核。但当在杂乱模式中驱动程序是检查ETHER地址,但它只检查ETHER地址的第一个八未组是否为Oxff就来判断信息包是否为广播或者其他,因此如果我们建立一个包含EHTER地址为ff:00:00:00:00:00的IP正确的信息包并发送给目标机器,如果其进行了响应的回应,就表示起处于杂乱模式。
但对WINDOWS的这种方法是依赖于所用的驱动程序的,默认的微软驱动程序有此特性并且大多数供应商的驱动程序也有此特性,但某些NIC过滤广播只是依靠第一个八为组,所以这些卡不适合此方法。
--网络和机器的反应时间测试(也可以说ICMP PING反应时间):
这种模式是比较有效的测试方法,依据是靠对操作系统的影响来测试。但其中的坏处就是这些测试会在短期内产生一些多数量的网络通信。
这些测试假定当网络卡不处于杂乱模式时提供硬件过滤,这样的话,信息包不是指定给本身机器的将被网络卡丢弃。当在这中情况下,在网络通信信息量将动态增长对操作系统的影响很小,相反的处于杂乱状态的机器由于不
对这层进行过滤,就把这些信息传递给系统或者用户模式进行过滤,会对操作系统产生比较大的影响。简单的说,我们先正常情况下PING一机器,再我们构建很多伪造的TCP连接来ping程序来ping目标,并且注意RTT(round
trip time),这样处于杂乱模式的机器由于会处理这些垃圾信息包,并影响系统并导致网络反映时间增加,然后来比较各个RTT,经过多次测试和人工判断就能决定目标机器上是否存在SNIFFER。
Sentinel是根据这些方法来进行测试的程序,是有源代码形式发放的。使用于OPENBSD 2.6 ;FREEBSD 3.X;NETBSD 1.4.1;LINUX2.2.X平台。
编译后使用方法为:
#./sentinel -t 192.168.0.1 -a 是ARP测试。
#./sentinel -t 192.168.0.1 -e 是etherping test;
#./sentinel -t 192.168.0.1 -f 1.1.1.1 -d 是DNS测试;
#./sentinel -t 192.168.0.1 -f 1.1.1.1 -d -a -e 是允许所有模式进行测试;
发布人:netbull 来自:中国网络安全技术联盟