注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
设置MSN可自动防卸MSN小尾巴
用Norton Internet Security拦截
知已知彼——MSN 信息安全攻防实
Unix网络的两个安全问题
Unix的入侵追踪
UNIX系统安全小议
Linux/Unix环境下的make和makefi
NT和UNIX下FTP非交互方式文件传输
NT和UNIX下FTP非交互方式文件传输
UNIX Sybase安装说明
您现在的位置: 顶尖设计 >> IT学院 >> 网络安全 >> 黑客防范 >> 文章正文
SNIFF原理解析
作者:xundi  来源:http://www.xfocus.org  点击:  更新:2006-12-20
简介:
ckets  
[ -o file ] # Capture packets in file  
[ -n file ] # Load addr-to-name table from file  
[ -N ] # Create addr-to-name table  
[ -t r|a|d ] # Time: Relative, Absolute or Delta  
[ -v ] # Verbose packet display  
[ -V ] # Show all summary lines  
[ -p first[,last] ] # Select packet(s) to display  
[ -x offset[,length] ] # Hex dump from offset for length  
[ -C ] # Print packet filter code  
    

例如:  

#snoop -o saved A B  

监听机器A与B的谈话,并把内容存储于文件saved中  



3. tcpdump  

  tcpdmp也算是一个很有名气的网络监听软件,FREEBSD还把他附带在了系统上,是一个被
很多UNIX高手认为是一个专业的网络管理工具。  

使用方法:  
  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和ether
具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。其他的
几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有
协议的信息包。     

  除了这三种类型的关键字之外,其他重要的关键字如下:
gateway, broadcast,less,greater,还有三种 逻辑运算,取非运算是 'not ' '! ', 与运算
是'and','&&';或运算 是'or' ,'||'。  



举例使用:  

#tcpdump host AAA.BBB.CCC.DDD  

将监听IP地址为AAA.BBB.CCC.DDD的机器的通话  

#tcpdump tcp port 23 host AAA.BBB.CCC.DDD  

将监听IP地址为AAA.BBB.CCC.DDD的机器的23端口的通话  



4. dsniff  

 之所以要谈谈dsniff,是因为他不仅仅是一个sniff,在他的整个套件包中,包含了很多
其它有用的工具,如arpspoof,dnsspoof,macof,tcpkill等等,SNIFF的手段更加的多样和
复杂化。dsniff是由DugSong开发的你可以在他的主页上找到这个工具。 目前dsniff支持
OpenBSD (i386), Redhat Linux (i386), 和Solaris (sparc). 并且在FreeBSD, Debian Linux,
 Slackware Linux, AIX, 和HP-UX上也能运转得很好。但是dsniff需要几个其他的第三方软件进
 行支持,他们分别是,Berkeley DB ,OpenSSL, libpcap, libnet, libnids。如果条件允
 许的话,你最好能够亲自读一读dsniff的源代码,你可以在 
 http://naughty.monkey.org/~dugsong/ 找到dsniff。  


六 深入sniff  

 单纯的sniff的功能始终是局限的,所以在大多数的情况下,sniff往往和其他手段结合起来使
用,sniff和spoof已及其他技术手段结合在一起对网络构成的危害是巨大的。单纯的sniff好比缺
了一只腿,无法发挥大的作用,例如在sniff原理一节中我们讨论的例子里,我一再的强调我们使
用的是一个普通的HUB进行连接是有原因的,如果我们把在图一中的HUB用一个switch代替,那情况
就要复杂一些了,如图二所示:  

图(二)  





 在图二中,我们的机器A、B、C与Switch相连接,而Switch通过路由器Router访问外部网络。我
们先来了解Switch的工作原理:  

  在我们图一中的 HUB 只是简单地把所接收到的信号通过所有端口(除了信号来的那个口)重复
发送出去不同,而图二中的Switch却可以检查每一个收到的数据包,并对数据包进行相应的处理。
在Switch内保存着每一个网段上所有节点的物理地址,只允许必要的网络流量通过Switch。举例来
说,当Switch接收到一个数据包之后,根据自身保存的网络地址表检查数据包内包含的发送和接收
方地址。如果接收方位于发送方网段,该数据包就会被Switch丢弃,不能通过交换机传送到其它的
网段;如果接收方和发送方位于两个不同的网段,该数据包就会被Switch转发到目标网段。这样,
通过交换机的过滤和转发,可以有效避免网络广播风暴,减少误包和错包的出现。顺便说一句,现在
Switch和HUB的价格相去无几,所以hub正逐渐被网络交换机取代。  

 现在回到我们的例子中来,在图二中仍然和图一一样,我们假设机器A上的管理员为了维护机器C,
使用了一个FTP命令向机器C进行远程登陆,那么在这里,数据是这样走的:首先机器A上的管理员输入
的登陆机器C的FTP口令经过应用层FTP协议、传输层TCP协议、网络层IP协议、数据链路层上的以太网
驱动程序一层一层的包裹,最后送到了物理层,我们的网线上。接下来数据帧送到了Switch上,而
Switch检查数据帧中的目的地址,并在他自身保存的网络地址表中知道了他应该把这数据帧发到机器
C那里,于是,接下来机器C接收到了从A发来的信息,发现他是发给自己的信息,于是进行分析处理。  

  OK,现在我们机器B上的管理员的好奇心只能深深的埋藏在心里了,因为数据包根本就没有经过他,
就算他把自己的网卡设置成混杂模式也是有力无处使。  

 在了解在一个Switch环境下原理后,我们结合一些手段去设法sniff,是的,我们可以做到这一点,
有许多的手段可以让管理员B满足他的好奇心,在下面我会提出几个办法,当然只是其中的一些办法
而已。  

1 ARP Spoof  

  在基于IP通信的内部网中,我们可以使用 ARP Spoof 的手段,了解什么是ARP Spoof的前提你先
要明白一下什么是ARP和RARP协议,什么是MAC地址,什么又是IP地址。ARP协议是地址转换协议,
RARP被称为反向地址转换协议,他们负责把IP地址和MAC地址进行相互转换对应。  

  ARP Spoof 攻击的根本原理是因为计算机中维护着一个 ARP 高速缓存,并且这个ARP 高速缓存是
随着计算机不断的发出ARP请求和收到ARP响应而不断的更新的,ARP 高速缓存的目的是把机器的IP地
址和MAC地址相互映射。你可以使用 arp 命令来查看你自己的 ARP 高速缓存。现在设想一下,一个
Switch工作在数据链路层,他根据MAC地址来转发他所接收的数据包,而计算器维护的 ARP 高速缓存
却是动态的......你想到什么了吗?  

  为了加深理解,现在给我们的机器编上号,机器A:IP地址为 10.0.0.1 ,MAC地址为
 20-53-52-43-00-01 ,机器B:IP地址为 10.0.0.2 ,MAC地址为 20-53-52-43-00-02,机器C:IP地址
 为 10.0.0.3 ,MAC地址为 20-53-52-43-00-03 。现在机器B上的管理员是个聪明的家伙,他向机器
 A发出一个 ARP Reply (协议没有规定一定要等ARP Request出现才 能发送ARP Reply,也没有
 规定一定要发送过ARP Request才能接收ARP Reply),其中的目的IP地址为10.0.0.1,目的MAC
 地址为 20-53-52-43-00-01 ,而源IP地址为10.0.0.3,源MAC地址为 20-53-52-43-00-02 ,好了,
 现在机器A更新了他的 ARP 高速缓存,并相信了IP地址为10.0.0.3的机器的MAC地址是 
 20-53-52-43-00-02 。当机器A上的管理员发出一条FTP命令时---ftp 10.0.0.3,数据包被送到了
 Switch,Switch查看数据包中的目的地址,发现MAC为 20-53-52-43-00-02 ,于是,他把数据包
 发到了机器B上。再设想一下,如果不想影响A和C之间的通信该怎么办?你可以同时欺骗他们双方,
 来一个 man-in-middle 。  

 当然,在实际的操作中你还需要考虑到一些其他的事,比如某些操作系统在会主动的发送ARP请
求包来更新相应的ARP入口等。  

2. MAC Flooding  

 在上面我们曾经提到过,Switch之所以能够由数据包中目的MAC地址判断出他应该把数据包发送到
那一个端口上是根据他本身维护的一张地址表。这张地址表可能是动态的也可能是静态的,这要看
Switch的厂商和Switch的型号来定,对于某些Switch来说,他维护的是一张动态的地址表,并且地
址表的大小是有上限的,比如 3com Superstack Switch 3300 (3c16981 Hardware v.1 Software v.2.10)
 就是这样一种Switch,我们可以通过发送大量错误的地址信息而使SWITCH维护的地址表“溢出”,
从而使他变成广播模式来达到我们要 sniff 机器A与机器C之间的通信的目的。  

3. Fake the MAC address  

 伪造MAC地址也是一个常用的办法,不过这要基于你网络内的Switch是动态更新其地址表,这实
际上和我们上面说到的 ARP Spoof 有些类似,只不过现在你是想要Switch相信你,而不是要机器A
相信你。因为Switch是动态更新其地址表的,你要做的事情就是告诉Switch:HI,我是机器C。换成
技术上的问题你只不过需要向Switch发送伪造过的数据包,其中源MAC地址对应的是机器C的MAC地址,
现在Switch就把机器C和你的端口对应起来了。不过其中存在一个问题,现在机器C也会说了:
HI,Switch老大,我才是机器C呢!,现在你该怎么办?切,还用问!让他说不了话就可以了,
DOS还是其他什么,随便你了......  

4. ICMP Router Advertisements  

  这主要是由ICMP路由器发现协议(IRDP)的缺陷引起的,在Windows 95、98、2000及SunOS、
Solaris 2.6等系统中,都使用了IRDP协议,SunOS系统只在某些特定的情况下使用该协议,而
Windows95 ,Windows95b, Windows98, Windows98se, 和 Windows2000都是默认的使用IRDP协议。 
IRDP协议的主要内容就是告诉人们谁是路由器,设想一下,一个HACK利用IRDP宣称自己是路由器的
情况会有多么的糟糕!所有相信HACK的请求的机器把他们所有的数据都发送给HACK所控制的机器.........  

5. ICMP Redirect  

 所谓ICMP重定向,就是指告诉机器向另一个不同的路由发送他的数据包,ICMP重定向通常使
用在这样的场合下,假设A与B两台机器分别位于同一个物理网段内的两个逻辑子网内,而A和B都
不知道这一点,只有路由器知道,当A发送给B的数据到达路由器的时候,路由器会向A送一个ICMP
重定向包裹,告诉A:HI,别再送数据给我转交了,你就直接送到B那里就可以了。设想一下,
一个hack完全可以利用这一点,使得A发送给B的数据经过他。  

 上面提到的这些方法只不是其中的一些,为了配合sniff能够工作得更有效率,还有其他许多
的办法,其实sniff的目的说穿了只有一个,就是抓包,从抓包这个概念上引伸下去,所有为了能
够抓到网络上的信息包而采用的技术都可以归入sniff,单纯的sniff是没有什么效率的。你还能
想到什么吗?进攻路由器,在路由器上放置sniff......,在系统内核中植入sniff......等等。  


七 如何防止SNIFF  

 防止sniff最有效的手段就是进行合理的网络分段,并在网络中使用交换机和网桥,在理想的情
况下使每一台机器都拥有自己的网络段,当然这会使你的网络建设费用增加很多,所以你可以尽量
使相互信任的机器属于同一个网段,使他们互相之间不必担心sniff的存在。并在网段于网段间进
行硬件屏障。你也可以使用加密技术对你在网络中传送的敏感数据如户ID或口令,你的银行帐号,
商业机密等进行加密,你可以选用SSH等加密手段。为了防止ARP欺骗,你可以使用永久的ARP
缓存条目,反正上面的攻击手段和原理你也看了,你就反过来想想该怎么办好了。不过有盾必有矛,
平时的安全意识才是最重要的。  

 (注:以下关于AntiSniff的介绍取至backend翻译整理的L0pht AntiSniff 技术文档一文)  

  当你做做层层保护后,你还是怀疑自己的网络上存在sniff该怎么办? L0pht 小组为了探测
sniff专门发布了一个软件 AntiSniff,当然这个软件不是免费的:),AntiSniff 工具用于检测局
域网中是否有机器处于混杂模式,AntiSniff Version 1.x被设计为运行在以太网的Windows系统中,

上一页  [1] [2] [3] [4] 下一页




  • 上一篇文章:
  • 下一篇文章: 没有了
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务