1帧的目标区域具有和本地网络接口相匹配的硬件地址。
2帧的目标区域具有“广播地址”。
在接受到上面两种情况的数据包时,网卡通过cpu产生一个硬件中断。该中断能引起操作系统注意,然后将帧中所包含的数据传送给系统进一步处理。而s niffer就是一种能将本地网卡状态设成杂乱模式(promiscuous Mode)的软件。当网卡处于杂乱模式时,该网卡具备“广播地址”,它对所有遇到的每一个帧都产生一个硬件中断以提醒操作系统处理每一个报文包。(绝大多数的网卡具备设置成杂乱模式的能力。
可见,sniffer工作在网络环境中的底层,它会拦截所有的正在网络上传送的数据。通过相应的软件处理,可以实时分析这些数据的内容,进而分析所处的网络状态和整体布局。值得注意的是:s niffer是极其安静的,它是一种消极的安全攻击。
四.哪里可以得到sniffer
我们讲的sniffer,主要是在unix系统下运用的,至于那些oicq sniffer就不在我们讨论的范围。
Sniffer是黑客们最常用的入侵手段之一。你可以在经过允许的网络中运行sniffer,了解它是如何有效地危及本地机器安全。
Sniffer可以是硬件,也可以是软件。现在品种最多,应用最广的是软件Sniffer,绝大多数黑客们用的也是软件Sniffer。
以下是一些也被广泛用于调试网络故障的sniffer工具:
(一).商用sniffer:
1. Network General.
Network General开发了多种产品。最重要的是Expert Sniffer,它不仅仅可以sniff,还能够通过高性能的专门系统发送/接收数据包,帮助诊断故障。还有一个增强产品"Distrbuted Sniffer System"可以将UNIX工作站作为sniffer控制台,而将sniffer agents(代理)分布到远程主机上。
2. Microsoft´s Net Monitor
对于某些商业站点,可能同时需要运行多种协议--NetBEUI、IPX/SPX、TCP/IP、802.3和SNA等。这时很难找到一种sniffer帮助解决网络问题,因为许多s niffer往往将某些正确的协议数据包当成了错误数据包。Microsoft的Net Monitor(以前叫Bloodhound)可以解决这个难题。它能够正确区分诸如Netware控制数据包、NT NetBios名字服务广播等独特的数据包。(etherfind只会将这些数据包标识为类型0000的广播数据包。)这个工具运行在MS Windows 平台上。它甚至能够按MAC地址(或主机名)进行网络统计和会话信息监视。只需简单地单击某个会话即可获得tcpdump标准的输出。过滤器设置也是最为简单的,只要在一个对话框中单击需要监视的主机即可。
(二).免费软件sniffer
1. Sniffit由Lawrence Berkeley 实验室开发,运行于Solaris、SGI和Linux等平台。可以选择源、目标地址或地址集合,还可以选择监听的端口、协议和网络接口等。这个S NIFFER默认状态下只接受最先的400个字节的信息包,这对于一次登陆会话进程刚刚好。
2. SNORT:这个SNIFFER有很多选项供你使用并可移植性强,可以记录一些连接信息,用来跟踪一些网络活动。
3. TCPDUMP:这个SNIFFER很有名,linux,FREEBSD还搭带在系统上,是一个被很多UNIX高手认为是一个专业的网络管理工具,记得以前Tsuto muShimomura(应该叫下村侵吧)就是使用他自己修改过的TCPDUMP版本来记录了KEVINMITNICK攻击他系统的记录,后来就配合FBI抓住了K EVINMITNICK,后来他写了一文:使用这些LOG记录描述了那次的攻击,HowMitnickhackedTsutomuShimomurawithanIPsequenceattack
( http://www.attrition.org/security/newbie/security/sniffer/shimomur.txt )
4. ADMsniff:这是非常有名的ADM黑客集团写的一个SNIFFER程序。
5. linsniffer:这是一个专门设计杂一LINUX平台上的SNIFFER。
6. Esniffer:这个也是一个比较有名的SNIFFER程序。
7. Solsniffer:这是个Solarissniffer,主要是修改了SunSniff专门用来可以方便的在Solair平台上编译。
8. Ethereal是一基于GTK+的一个图形化Sniffer
9. Gobbler(for MS-DOS&Win95)、Netman、NitWit、Ethload...等等。
(三).UNIX下的sniffer
UNIX下的sniffer,我比较倾向于snoop.Snoop是按Solaris的标准制作的,虽然Snoop不像是Sniffer Pro那样好,但是它是一个可定制性非常强的sniffer,在加上它是免费的(和Solaris附一起).谁能打败它的地位?你可以在极短时间内抓获一个信息包或是更加深的分析. 如果你想学习如何使用snoop,看下面的url: http://www.enteract.com/~lspitz/snoop.html
(四).Linux下的sniffer工具
Linux下的sniffer工具,我推荐Tcpdump。
[1].tcpdump的安装
在linux下tcpdump的安装十分简单,一般由两种安装方式。一种是以rpm包的形式来进行安装。另外一种是以源程序的形式安装。
1. rpm包的形式安装
这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通过rpm命令可以直接安装,不需要修改任何东西。以超级用户登录,使用命令如下:
#rpm -ivh tcpdump-3_4a5.rpm
这样tcpdump就顺利地安装到你的linux系统中。怎么样,很简单吧。
2. 源程序的安装
既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢?其实,linux一个最大的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所以我特别建议朋友们都采取这种源程序的安装方法。
· 第一步 取得源程序 在源程序的安装方式中,我们首先要取得tcpdump的源程序分发包,这种分发包有两种 形式,一种是tar压缩包(tcpdump-3_4a5.tar.Z),另一种是rpm的分发包(tcpdump-3_4a5.src.rpm)。这两种 形式的内容都是一样的,不同的仅仅是压缩的方式.tar的压缩包可以使用如下命令解开:
#tar xvfz tcpdump-3_4a5.tar.Z
rpm的包可以使用如下命令安装:
#rpm -ivh tcpdump-3_4a5.src.rpm
这样就把tcpdump的源代码解压到/usr/src/redhat/SOURCES目录下.
· 第二步 做好编译源程序前的准备活动
在编译源程序之前,最好已经确定库文件libpcap已经安装完毕,这个库文件是tcpdump软件所需的库文件。同样,你同时还要有一个标准的c 语言编译器。在linux下标准的c 语言编译器一般是gcc。 在tcpdump的源程序目录中。有一个文件是Makefile.in,configure命令就是从Makefile.in文件中自动产生Makefile文件。在Makefile.i n文件中,可以根据系统的配置来修改BINDEST 和 MANDEST 这两个宏定义,缺省值是
BINDEST = @sbindir @
MANDEST = @mandir @
第一个宏值表明安装tcpdump的二进制文件的路径名,第二个表明tcpdump的man 帮助页的路径名,你可以修改它们来满足系统的需求。
· 第三步 编译源程序
使用源程序目录中的configure脚本,它从系统中读出各种所需的属性。并且根据Makefile.in文件自动生成Makefile文件,以便编译使用. make 命令则根据Makefile文件中的规则编译tcpdump的源程序。使用make install命令安装编译好的tcpdump的二进制文件。
总结一下就是:
# tar xvfz tcpdump-3_4a5.tar.Z
# vi Makefile.in
# . /configure
# make
# make install
[2].Tcpdump的使用
tcpdump采用命令行方式,它的命令格式为:
tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
[ -i 网络接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 类型 ] [ -w 文件名 ] [表达式 ]
1. tcpdump的选项介绍
-a 将网络地址和广播地址转变成名字;
-d 将匹配信息包的代码以人们能够理解的汇编格式给出;
-dd 将匹配信息包的代码以c语言程序段的格式给出;
-ddd 将匹配信息包的代码以十进制的形式给出;
-e 在输出行打印出数据链路层的头部信息;
-f 将外部的Internet地址以数字的形式打印出来;
-l 使标准输出变为缓冲行形式;
-n 不把网络地址转换成名字;
-t 在输出的每一行不打印时间戳;
-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;
-vv 输出详细的报文信息;
-c 在收到指定的包的数目后,tcpdump就会停止;
-F 从指定的文件中读取表达式,忽略其它的表达式;
-i 指定监听的网络接口;
-r 从指定的文件中读取包(这些包一般通过-w选项产生);
-w 直接将包写入文件中,并不分析和打印出来;
-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程 调用)和snmp(简单网络管理协议;)
2. tcpdump的表达式介绍
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包将会被截获。
在表达式中一般如下几种类型的关键字,一种是关于类型的关键字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.
第二种是确定传输方向的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。
第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定的网络协议,实际上它是"ether"的别名,fddi和ethe r具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则t cpdump将会监听所有协议的信息包。
除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 ´not ´ ´! ´, 与运算是´and´,´&&´;或运算 是´or´ ,´´;
这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
(1)想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump host 210.27.48.1
(2) 想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令:(在命令行中适用括号时,一定要
#tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )
(3) 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
(4)如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump tcp port 23 host 210.27.48.1
3. tcpdump 的输出结果介绍
下面我们介绍几种典型的tcpdump命令的输出信息
(1) 数据链路层头信息
使用命令#tcpdump --e host ice
ice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1A
H219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:
21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne
t 0:0(0) ack 22535 win 8760 (DF)
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 > ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.
(2) ARP包的TCPDUMP输出信息
使用命令#tcpdump arp
得到的输出结果是:
22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a)
22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)
分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。 0:90:27:58:af:1a是主机ICE的MAC地址。
(3) TCP包的输出信息
用TCPDUMP捕获的TCP包的一般输出信息是:
src > dst: flags data-seqno ack window urgent options
src > dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.
(4) UDP包的输出信息
用TCPDUMP捕获的UDP包的一般输出信息是:
route.port1 > ice.port2: udp lenth
UDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth上面,我就详细介绍了TCPDUMP的安装和使用,希望会对大家有所帮助。如果想要熟练运用TCPDUMP这个LINUX环境下的SN IFFER利器,还需要大家在实践中总结经验,充分发挥它的威力。
(五).windows平台上的sniffer
我推荐netxray和sniffer pro软件,想必大家都用过他们,不过我在这儿还要再简单介绍一下他们。
netxray的使用说明
1.1.1.1----2.2.2.2----3.3.3.3----4.4.4.4 这是一个ShareHub连接下的局域网
5.5.5.5 这是一个8080端口上的http/ftp proxy
Internet
启动Capture,进入Capture Setting,选择Profiles-->New,
以Default为模板,起名叫proxy,选择ok-->Done,
设置过滤所有目标IP是5.5.5.5的报文,即Any---->5.5.5.5
开始抓包,同时从本机使用http proxy,然后就可以停止抓包。
选中一个目标IP是5.5.5.5的报文,按鼠标右键,选择"编辑显示过滤",
选择"数据模式",选择Add Pattern,到TCP层选中8080目标端口,
用鼠标选择"设置数据",起名"目标端口8080"。回去选择"应用显示
过滤"。以后用proxy规则过滤将只过滤目标IP是5.5.5.5、目标端口
是8080的报文。要是对协议分析熟悉,根本不用写这么多,以后
要问NetXray的使用说明,请直奔主题,否则回答起来实在罗嗦。
关键是有些人太懒惰,不乐意自己实践。
如何指定源端口、目标端口?
1. 注意Data Pattern和Address是逻辑与的关系
2. 进入Data Pattern设置页
比如你想设置这样一个过滤规则,源端口是2323或者目标端口是2323
的IP包,先选中第一行,用Toggle AND/OR调整成OR,因为你的逻辑表达式
的最外层是 OR
3. 选择Add Pattern,在弹出的对话框里设置
Packet 34 2 Hex
从顶头开始填写 09 13,因为十进制的2323对应十六进制的0x0913,而IP包
使用网络字节顺序,高字节在低地址。
起名任意,比如源端口2323,确定
再次选择Add Pattern
Packet 36 2 Hex 从顶头开始填写 09 13
起名任意,比如目标端口2323,确定
于是最外层的OR下有两个叶子,分别对应两个Pattern。
4. 还有很多变化,但都和这个基本例子差不多,你的过滤规则可以非常复杂。
最外层的OR表示它下面的所有叶子之间都是OR的关系,所以我建议当你企图
建立一个非常复杂的规则的时候先写出逻辑表达式再来操作,以免不必要的
重复劳动。
如何抓ftp/pop3口令明文?
NetXray所谓的高级协议过滤事实上就是端口过滤,用(2)中介绍的方法指定源端口
目标端口均过滤0x00 0x17,就可以达到和指定telnet过滤一样的效果。NetXray
认为telnet就是23端口,所以如果想捕捉一个非标准telnetd的通信,必须自己
指定端口过滤。此外Pwin98下services文件的修改不影响NetXray认为telnet就是
端口23。
每次指定捕捉telnet协议,但显示的时候可能会发现有些包没有标记成telnet,而
是tcp,为什么?因为这些标记成tcp的包没有telnet数据区,虽然在完整的物理帧
中有数据,但根据IP报头中的 ntohs( ip->tot_len ) ,对于IP报文来说没有telnet
数据区。物理帧中为什么有?可能是考虑"填充",我不知道是数据链路层从内核返
回的时候带上来的"填充",还是对端发送的时候就已经"填充",在linux下用
sock_packet抓包也存在同样的问题,一般情况下recvfrom返回的字节数减去各个
报头长度得到数据区长度,但出现"填充"时就不是这样了,所以处理IP协议族时,
一定要用 ntohs( ip->tot_len ),我写linuxkiller时才认真注意到这个问题。
那么用NetXray时,不要看第三栏,那里是完整的物理帧,有很多干扰信息,应该看
第二栏的数据区。
如果是分析telnet协议并还原屏幕显示,只需要抓从server到client的回显数据即
可,因为口令不回显,这种过滤规则下抓不到口令明文。在linux下编程实现时需要
考虑95个可打印字符、汉字以及32个控制字符的显示过滤问题。如果想抓telnet的
口令明文,需要抓client到server的数据。Pred写的Sniff监听别人的BBS登录就象
看动画,但看不到口令,应该是只抓从server到client的回显数据。
nethackii可以抓pop3/ftp/telnet的口令,对于前两者很容易实现,因为有PASS关
键字可以鉴别,后者稍微麻烦些,需要重组。值得一提的是foxmail的邮件监视器,
简直就是定时发送口令明文,用NetXray抓从client到server包,指定过滤PASS关键
字,非常清楚。下面简单说一下这个设置:
先指定IP过滤规则,应该只指定 any <--> any,或者干脆不指定IP地址,以最大
可能地捕捉口令。
然后增加一个过滤模式,Packet 54 4 Hex 0x50 41 53 53
再增加一个过滤模式,Packet 54 4 Hex 0x70 61 73 73
两者是or模式,后者是因为这种关键字在网络传输中大小写不敏感,比如
cuteftp发送的是pass。剩下的就是等口令来了。注意,不必指定过滤特定高级协
议,直接指定过滤IP协议族就可以了,用这种办法ftp/pop3口令是很容易看清楚的。
因为许多ftp/pop3的口令可以telnet 23,所以......
这里的使用说明可以用于sniffer pro 2.6,因为这两个东西实际是一个公司的。
虽然很多人告诉我sniffer pro比netxray强大,但是我个人觉得在协议分析方面
netxray比sniffer pro要方便,虽然支持的协议少了点,但是在设置过滤规则和
应用过滤规则等小操作上,显然sniffer pro没有吸取netxray的精华,这些小操
作平时很难遇到,但真正做协议分析指定一些复杂的过滤规则的时候就会碰上。
今天我们介绍的是如何抓取RPC报文,下面给出的办法仅仅是种尝试而已。
因为RPC Server使用动态端口,所以你无法进行常规的端口过滤设置,如果一定
要设置可能需要尝试,具体例子请参看<< RPC/XDR/NFS系列之----NFS/Mount协议 >>
这里给一种不是很科学的办法:
1. 指定进行IP过滤,设置Any <--> RPC Server IP
2. 指定对TCP以及UDP协议进行过滤,因为RPC Server可能的底层支持协议包括二者。
3. 进入Data Pattern设置页,用Toggle AND/OR调整成OR,因为你的逻辑表达式
的最外层是 OR
4. 选择Add Pattern,在弹出的对话框里设置
Protocol 60 8 Hex 00 00 00 00 00 00 00 02
起名TCP RPC CALL
5. 同4的步骤,依次选择Add Pattern,在弹出的对话框里设置
Protocol 60 4 Hex 00 00 00 01
起名TCP RPC REPLY
Protocol 32 8 Hex 00 00 00 00 00 00 00 02
起名UDP RPC CALL
Protocol 32 4 Hex 00 00 00 01
起名UDP RPC REPLY
这里给的办法仅仅代表一种思路,如果你发现并没有抓住某个特定RPC SERVER
的报文,可以自行调整过滤规则。要理解这个过滤规则,需要RPC本身的知识,
可以参看<< RPC/XDR/NFS系列 >>。
我曾经想设置远程程序号的过滤规则,但发现RPC REPLY报文中没有固定字段对
应远程程序号,只好放弃。如果你只想抓RPC CALL报文,可以考虑这个思路。
NetXray发包前可以在decode状态下编辑,sniffer pro 2.6却不象NetXray那样
善解人意,只能进行二进制编辑。sniffer pro的Add Pattern里的TAB键极其混
帐,并且这里也不提供decode支持。始终不能理解这些地方。不过破解版的
NetXray在decode时有些地方对不准,菜单window也不时失灵。
暂略(回头补吧,没时间了)
3.6据说比3.5加强了一些,包括退出后僵尸进程的问题,启动中乱报错问题,现在似
乎支持拨号适配器上的抓包了(以前如何我还真没测试过),但在过滤规则上毫无改观。
以前过滤规则全部在升级过程中丢掉了,只好重新设置。下面是IP过滤规则的设置:
1.从菜单上选择Capture-->Filter,选择左上角的[ New Profile ]按钮,输入你觉得
切合要求的名字,比如IP。这里有个小窍门,如果你已经有一个合理可用的Default
规则,就先选中Default规则,然后点击左上角的[ New Profile ]按钮,那么新规
则以Default规则为模板生成。
2.不要动TCP/UDP Port页、Address页
3.选中Layer 3+页,假设所有的复选框都选中了,因为我们设置的是IP过滤规则,要求
抓取所有IP报文。
注意LanExplorer把ARP归入Layer 3+页,如果你的确只想抓IP报文,清除该页第一个
ARP复选框。反之,如果你只想抓ARP报文,应该清空Layer 3+页后只选择该页第一个
ARP复选框。
4.选中Layer 2/3页,假设所有的复选框都清空了,从左边开始,在Ethernet II栏里只
选择IP/ARP复选框,注意和Layer 3+页之间的关系。
3.5版这里会自动替你选中LLC栏里的IP复选框以及SNAP栏里的IP/ARP复选框,3.6版
没有这个毛病了。
5.选中Layer 2页,假设所有的复选框都清空了,在VLAN栏里选中Others复选框,MAC栏
根据需要指定,比如只想抓取单播IP报文,就只选中Unicast复选框。VLAN栏里
Others复选框必须选中,至于为什么,不清楚。
回头看第三条,如果想抓ARP报文,因为Arp Request是广播报文,为了同时抓取请求
和响应报文,必须在MAC栏里选中Broadcast复选框。当然,只选中Unicast复选框,
将抓取所有Arp Reply报文。
点击中文的[ 确定 ]按钮(太奇怪了,LanExplorer为什么这里出现了中文按钮,而其
他地方没有)
6.从菜单上选择Capture-->Filter,选中你要使用的过滤过则,如果刚刚创建过新规则,
默认的当前过滤规则就是新规则。从菜单上选择Capture-->Start。
今天调试一个程序的时候,由于需要利用SIGALRM进行ARP欺骗,需要抓几个ARP响应
报文确认定时机制起作用了,但又不想都抓,ARP报文太多了。
1. 以default为模板复制一条规则arp
2. 在"高级过滤"里选中ARP协议
3. 在"数据模板"里选择"增加模板",此时默认是AND规则
4. 依次输入或选择
Packet 28 4 Hex
5. 从顶头开始输入
C0 A8 0A 19
就是说源IP为192.168.10.25
描述性文字任意,比如srcIp == 192.168.10.25
6. 一路确定下去即可
事实上平时设置过滤规则不需要这样麻烦,可以先用母体规则(比如default)抓取一
些报文,然后用鼠标选中你需要的报文,保持不动的情况下进入过滤规则设置界面,
新建一个过滤规则arp,此时"数据模板"里的"设置数据"按钮可用,在左面选择你感
兴趣的数据域,点击"设置数据",会自动替你生成一个"数据模板",然后根据需要稍
微修改一下即可。即使你对TCP/IP协议非常熟悉,也没有必要自己计算偏移量。
<>里的"数据模板"一样推荐采用这个办法指定。
四.sniffer的安装使用
我们主要以sniffit为例分别介绍在nt和linux下的应用。
[1] 在linux下的sniffit
安装软件的安装很简单:
1、用tar zvfx sniffit.*.*.*.tgz将下载下来的sniffit.*.*.*.tgz解压缩到你想要的目的文件夹,如果版本是0.3.7的话,你会看到该目录下出现一个sn iffit.0.3.7的目录。
2、cd sniffit.0.3.7
3、./configure && make,只要在这个过程中终端上没有意外的error信息
出现,你就算编译成功了--可以得到一个二进制的sniffit文件。
4、make clean把不用的垃圾扫掉……
、使用方法
1、参数
这个东东具有如下的命令选项:
-v显示版本信息
-t让程序去监听指定流向某IP的数据包
-s让程序去监听从某IP流出的IP数据包,可以使用@通配符,如 -t199.145.@
-i显示出窗口界面,能察看当前在你所属网络上进行连接的机器
-I扩展的交互模式,忽略所有其它选项,比-i强大得多……
-c利用脚本来运行程序
-F强制使程序使用网络硬盘
-n显示出假的数据包。象使用ARP、RARP或者其他不是IP的数据包也会显示出来
-N只运行plugin时的选项,使其它选项失效
在-i模式下无法工作的参数:
-b同时做-t和-s的工作……
-d将监听所得内容显示在当前终端--以十六进制表示
-a将监听所得内容显示在当前终端--以ASCII字符表示
-x打印TCP包的扩展信息(SEQ,ACK,Flags),可以与´-a´,´-d´,´-s´,´-t´,&acu te;-b´一起运作,注意-- 它是输出在标准输出的,如果只用-t,-s,-b 而没有其它参数配合的话不会被写入文件。
-R将所有通信记录在文件中
-r这一选项将记录文件送往sniffit,它需要-F的参数配合指明设备,假设你用´eth0´(第一块网卡)来记录文件,你必须在命令行里面加上& acute;-Feth0´或者´或者´或者´或者´或者´-Feth´-A遇到不认识的字符时用指定的字符代替- P定义监听的协议,DEFAULT为TCP--也可以选IP、ICMP、UDP……
-p定义监听端口,默认为全部
-l设定数据包大小,default是300字节。
-M激活插件
-I,-i模式下的参数
-D所有的记录会被送到这个磁盘上。
-c模式下的参数
-L
其中logparam可以是如下的内容:
raw:轻度
norm:常规
telnet:记录口令(端口23)
ftp:记录口令(端口21)
mail:记录信件内容(端口25)
比如说"ftpmailnorm"就是一个合法的logparam
2、图形仿真界面
就是上面所说的-i选项啦,我们输入sniffit-i会出现一个窗口环境,从中可以看到自己所在的网络中有哪些机器正在连接,使用什么端口号,其中可用的命令如下:
q退出窗口环境,结束程序
r刷新屏幕,重新显示正在在连线的机器
n产生一个小窗口,包括TCP、IP、ICMP、UDP等协议的流量
g产生数据包,正常情况下只有UDP协议才会产生,执行此命令要回答一些
关于数据包的问题
F1改变来源网域的IP地址,默认为全部
F2改变目的网域的IP地址,默认为全部
F3改变来源机器的端口号,默认为全部
F4改变目的机器的端口号,默认为全部
、一些示例
假设有以下的设置:在一个子网中有两台主机,一台运行了sniffer,我们称之为sniffit.com,另一台是66.66.66.7,我们称之为ta rget.com。
<1>你希望检查sniffer是否能运行sniffit:~/#sniffit-d-p7-t66.66.66.7 并且开另一个窗口:
sniffit:~/$telnettarget.com7
你可以看到sniffer将你telnet到对方7号端口echo服务的包捕获了。
<2>你希望截获target.com上的用户密码
sniffit:~/#sniffit-p23-t66.66.66.7
<3>target.com主机的根用户声称有奇怪的FTP连接并且希望找出他们的击键
sniffit:~/#sniffit-p21-l0-t66.66.66.7
<4>你希望能阅读所有进出target.com的信件
sniffit:~/#sniffit-p25-l0-b-t66.66.66.7&或者sniffit:~/#sniffit-p25-l0-b-s66.66.66.7&
<5>你希望使用用户交互界面
sniffit:~/#sniffit-i
<6>有错误发生而且你希望截获控制信息
sniffit:~/#sniffit-Picmp-b-s66.66.66.7
<7>Gowildonscrollingthescreen.
sniffit:~/#sniffit-Pip-Picmp-Ptcp-p0-b-a-d-x-s66.66.66.7
与之效果相当的是sniffit:~/#sniffit-Pipicmptcp-p0-b-a-d-x-s66.66.66.7
<8>你可以用´more66*´读取下列方式记录下的密码
sniffit:~/#sniffit-p23-A.-t66.66.66.7或者sniffit:~/#sniffit-p23-A^-tdummy.net
、高级应用
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连接中的一台主机发送一个断开连接的I P包,这个IP包的RST位置1,便可以了。
将下载下来的tod.tar.gz拷贝到sniffit所在目录下,解压安装后ln-stodsniffit_key5就可以将这相程序与F5键连接起来,想切断哪台机器的话,只要在窗口中将光标指到需要断线的机器上按下F 5键就可以了。你可以自由地定义成其它的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和p acket.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 DevicePacket_{31BB7ED2-125E-11D4-8F11-D79985727802}´ to force the choice,Read the README.FIRST on how to force network devices.的提示,于是我按照其提示所示,使用了sniffit -F Devicepacket_{31BB7ED2-125E-11D4-8F11-D79985727 802} -t 192.168.0.1 -p 21命令,这时出现下面的提示:
Forcing device to Devicepacket_{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,那是应该是一个客户/服务器模式,客户端的连接是随意开一个1 281端口地址和192.168.0.1的21口连接。
五.如何监测主机正在窃听
如何才知道有没有sniffer在我的网上跑呢?这也是一个很难说明的问题,比较有说服力的理由证明你的网络有sniffer目前有这么几条:
1、你的网络通讯掉包率反常的高。
通过一些网络软件,你可以看到你的信息包传送情况(不是sniffer),向ping这样的命令会告诉你掉了百分几的包。如果网络中有人在听,那么你的信息包传送将无法每次都顺畅的流到你的目的地。(这是由于s niffer拦
截每个包导致的)
2、你的网络带宽将出现反常。
通过某些带宽控制器(通常是火墙所带),你可以实时看到目前网络带宽的分布情况,如果某台机器长时间的占用了较大的带宽,这台机器就有可能在听。在非高速信道上,如5 6Kddn等,如果网络中存在sniffer,你应该也可以察觉出网络通讯速度的变化。
3、通常一个sniffer的记录文件会很快增大并填满文件空间。在一个大型网络中,sniffer明显加重机器负荷。这些警告信息往往能够帮助管理员发现s niffer。
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、Solari s、SCO等,都没有任何标记来指示是否处于混杂模式,因此入侵者能够窃听整个网络而却无法监测到它。
如果机器上使用两块网卡,把一块设置为杂乱模式,并把IP地址设置为0.0.0.0,另一块卡处于正常的模式并是正确的地址,这样将很难发现S NIFFER的存在。
注意:要监测只采集数据而不对任何信息进行响应的窃听设备,需要逐个仔细检查以太网上所有物理连接,不可能仅通过远程发送数据包或p ing就可以检查计算机是否正在窃听.
有够详细啦吧~