| 热门文章 |
 |
|
| 编辑推荐 |
 |
|
|
|
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] 下一页
|
|
|