以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 安全理论 』 (http://bbs.xml.org.cn/list.asp?boardid=65) ---- [转帖]如何利用嗅探器TcpDump分析网络安全 (http://bbs.xml.org.cn/dispbbs.asp?boardid=65&rootid=&id=26023) |
-- 作者:binaryluo -- 发布时间:12/30/2005 11:35:00 PM -- [转帖]如何利用嗅探器TcpDump分析网络安全 转自:http://isec.dlut.edu.cn/detail_report.php?n_ID=246&level=1&ns_name=%CE%C4%CF%D7%D7%CA%C1%CF 前言:在如令网络系统中,随着网络重要性、复杂性的不断增长,作为一名网络工程师、监测者、分析者或者是网络性能的评估者,您所扮演的角色对公司的成功是至关重要的。为了更好的完成工作,您需要透视整个网络,识别关键的性能问题——从应用的响应时间到带宽的瓶颈以至于识别网络每一层所出现的问题。在您每天的工作中,常常会着眼于未来用新的技术和应用扩展您的网络。网络探针分布在重要网段,监视该网络线路上各协议,各计算机占用情况,监控网络上各种业务的网络流量及带宽,记录网络操作,实现分布集中的网络分析Sniffer系统。本文将为你介绍如何利用嗅探器(sniffer)之网络数据采集分析工具 TcpDump来详细网络及其安全分析。 1、Sniffer简介 Sniffer即嗅探器的英文写法,嗅探器(sniffer)是最常见,也是最重要的技术之一。用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享式的局域网中,采用sniffer工具简直可以对网络中的所有流量一览无余!Sniffer工具实际上就是一个网络上的抓包工具,同时还可以对抓到的包进行分析。由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。其实,sniffer工具既可以适合于黑客的使用,也同样有利于网络管理员和网络程序员。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过 sniffer工具来调试程序。 它也可以理解为一个安装在计算机上的窃听设备它可以用来窃听计算机在网络上所产生的众多的信息。简单一点解释:一部电话的窃听装置,可以用来窃听双方通话的内容,而计算机网络嗅探器则可以窃听计算机程序在网络上发送和接收到的数据。可是,计算机直接所传送的数据,事实上是大量的二进制数据。因此,一个网络窃听程序必须也使用特定的网络协议来分解嗅探到的数据,嗅探器也就必须能够识别出那个协议对应于这个数据片断,只有这样才能够进行正确的解码。计算机的嗅探器比起电话窃听器,有他独特的优势:很多的计算机网络采用的是"共享媒体"。就是说,你不必中断他的通讯,并且配置特别的线路,再安装嗅探器,你几乎可以在任何连接着的网络上直接窃听到你同一掩码范围内的计算机网络数据。我们称这种窃听方式为"基于混杂模式的嗅探"(promiscuousmode)。尽管如此,这种"共享"的技术发展的很快,慢慢转向"交换"技术,这种技术会长期内会继续使用下去, 它可以实现有目的选择的收发数据。 2、Sniffer在工作原理 以太网的数据传输是基于"共享"原理的:所有的同一本地网范围内的计算机共同接收到相同的数据包。这意味着计算机直接的通讯都是透明可见的。正是因为这样的原因,以太网卡都构造了硬件的"过滤器"这个过滤器将忽略掉一切和自己无关的网络信息。事实上是忽略掉了与自身MAC地址不符合的信息。嗅探程序正是利用了这个特点,它主动的关闭了这个嗅探器,也就是前面提到的设置网卡"混杂模式"。因此,嗅探程序就能够接收到整个以太网内的网络数据了信息了。 二、网络数据采集分析工具TcpDump的应用 1、网络数据采集分析工具TcpDump的简介 顾名思义,TcpDump可以将网络中传送的数据包的"头"完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、 or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。我们用尽量简单的话来定义tcpdump,就是:dump the traffice on a network.,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东西之一。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。 2、网络数据采集分析工具TcpDump的安装 在linux下tcpdump的安装十分简单,一般由两种安装方式。一种是以rpm包的形式来进行安装。另外一种是以源程序的形式安装。 rpm包的形式安装:这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通过rpm命令可以直接安装,不需要修改任何东西。以超级用户登录,使用命令如下: 这样tcpdump就顺利地安装到你的linux系统中。怎么样,很简单吧。 源程序的安装:既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢?其实,linux一个最大的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所以我特别建议朋友们都采取这种源程序的安装方法。 第一步.取得源程序在源程序的安装方式中,我们首先要取得tcpdump的源程序分发包,这种分发包有两种形式,一种是tar压缩包(tcpdump- 3_4a5.tar.Z),另一种是rpm的分发包(tcpdump-3_4a5.src.rpm)。这两种形式的内容都是一样的,不同的仅仅是压缩的方式.tar的压缩包可以使用如下命令解开: #tar xvfz tcpdump-3_4a5.tar.Z 第二步.做好编译源程序前的准备活动 在编译源程序之前,最好已经确定库文件libpcap已经安装完毕,这个库文件是tcpdump软件所需的库文件。同样,你同时还要有一个标准的c语言编译器。在linux下标准的c 语言编译器一般是gcc。在tcpdump的源程序目录中。有一个文件是Makefile.in,configure命令就是从Makefile.in文件中自动产生 Makefile文件。在Makefile.in文件中,可以根据系统的配置来修改BINDEST 和 MANDEST 这两个宏定义,缺省值是 第一个宏值表明安装tcpdump的二进制文件的路径名,第二个表明tcpdump的man 帮助页的路径名,你可以修改它们来满足系统的需求。 第三步.编译源程序 使用源程序目录中的configure脚本,它从系统中读出各种所需的属性。并且根据Makefile.in文件自动生成Makefile文件,以便编译使用.make 命令则根据Makefile文件中的规则编译tcpdump的源程序。使用make install命令安装编译好的tcpdump的二进制文件。 总结一下就是: # tar xvfz tcpdump-3_4a5.tar.Z 3、网络数据采集分析工具TcpDump的使用 tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存,等等。 然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据包。使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。tcpdump使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用man tcpdump查看这些过滤规则的具体用法。 显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的bpfilter伪设备。一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。在FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具。 并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录,提醒管理员留意这台系统是否被用作攻击同网络的其他计算机的跳板。 May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled 虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行分析、分类统计、发现并报告错误却是更关键的问题。网络中的数据包属于不同的协议,而不同协议数据包的格式也不同。因此对捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲更为重要。昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议,而不仅仅只支持tcp、udp等低层协议。 从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。FreeBSD提供的一个有效的解码程序为tcpshow,它可以通过Packages Collection来安装。 # pkg_add /cdrom/packages/security/tcpshow* tcpshow能以不同方式对数据包进行解码,并以不同的方式显示解码数据,使用者可以根据其手册来选择最合适的参数对截获的数据包进行分析。从上面的例子中可以看出,tcpshow支持的协议也并不丰富,对于它不支持的协议就无法进行解码。 除了tcpdump之外,FreeBSD的Packages Collecion中还提供了Ethereal和Sniffit两个网络分析工具,以及其他一些基于网络分析方式的安全工具。其中Ethereal运行在 X Window 下,具有不错的图形界面,Sniffit使用字符窗口形式,同样也易于操作。然而由于tcpdump对过滤规则的支持能力更强大,因此系统管理员仍然更喜欢使用它。对于有经验的网络管理员,使用这些网络分析工具不但能用来了解网络到底是如何运行的,故障出现在何处,还能进行有效的统计工作,如那种协议产生的通信量占主要地位,那个主机最繁忙,网络瓶颈位于何处等等问题。因此网络分析工具是用于网络管理的宝贵系统工具。为了防止数据被滥用的网络分析工具截获,关键还是要在网络的物理结构上解决。常用的方法是使用交换机或网桥将信任网络和不信任网络分隔开,可以防止外部网段窃听内部数据传输,但仍然不能解决内部网络与外部网络相互通信时的数据安全问题。如果没有足够的经费将网络上的共享集线器升级为以太网交换机,可以使用FreeBSD系统执行网桥任务。这需要使用option BRIDGE编译选项重新定制内核,此后使用bridge命令启动网桥功能。 tcpdump采用命令行方式,它的命令格式为: (1). tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; (2). 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' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。 A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: #tcpdump host 210.27.48.1 (3). tcpdump的输出结果介绍 下面我们介绍几种典型的tcpdump命令的输出信息 A,数据链路层头信息 使用命令 #tcpdump --e host ice 分析: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. B,ARP包的TCPDUMP输出信息 使用命令 C,TCP包的输出信息 用TCPDUMP捕获的TCP包的一般输出信息是: D,UDP包的输出信息 用TCPDUMP捕获的UDP包的一般输出信息是: 三、利用网络数据采集分析工具TcpDump分析网络安全 作为IP网络的系统管理员,经常会遇到一些网络连接方面的故障,在排查这些接故障时,除了凭借经验外,使用包分析软件往往会起到事半功倍的效果。 常用的包分析软件非常多,常见的如tcpdump,sniffer,windump,ettercap等。 1、网络数据采集分析工具TcpDump分析 (1)网络的数据过滤 不带任何参数的TcpDump将搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一定全都需要,而且数据太多不利于分析。所以,我们应当先想好需要哪些数据,TcpDump提供以下参数供我们选择数据: -b在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。例如: -i选择过滤的网络接口,如果是作为路由器至少有两个网络接口,通过这个选项,就可以只过滤指定的接口上通过的数据。例如: (2)网络的数据显示/输入输出 TcpDump提供了足够的参数来让我们选择如何处理得到的数据,如下所示: -l可以将数据重定向。 2、网络数据采集分析工具TcpDump分析详细例子 我们先来看看故障现象,在一局域网中新安装了后台为qmail的邮件服务器server,邮件服务器收发邮件等基本功能正常,但在使用中发现一个普遍的怪现象:pc机器上发邮件时连接邮件服务器后要等待很久的时间才能开始实际的发送工作。我们来看,从检测来看,网络连接没有问题,邮件服务器 server和下面的pc性能都没有问题,问题可能出在哪里呢?为了进行准确的定位,我们在pc机client上发送邮件,同时在邮件服务器server 上使用tcpdump对这个client的数据包进行捕获分析,如下: server#tcpdump host client 顺利的完成,到目前为止正常,我们再往下看: 23:41:30.048862 server.33152 > client.113: S 99370916:99370916(0) win 8760 (DF) 看出问题了,问题在:我们看到server端试图连接client的113identd端口,要求认证,然而没有收到client端的回应, server端重复尝试了3次,费时26秒后,才放弃认证请求,主动发送了reset标志的数据包,开始push后面的数据,而正是在这个过程中所花费的 26秒时间,造成了发送邮件时漫长的等待情况。问题找到了,就可以修改了,我们通过修改服务器端的qmail配置,使它不再进行113端口的认证,再次抓包,看到邮件server不再进行113端口的认证尝试,而是在三次检测后直接push数据,问题得到完美的解决。 (2)网络安全中的ARP协议的故障 先看故障现象,局域网中的一台采用solaris操作系统的服务器A-SERVER网络连接不正常,从任意主机上都无法ping通该服务器。排查:首先检查系统,系统本身工作正常,无特殊进程运行,cpu,内存利用率正常,无挂接任何形式的防火墙,网线正常。此时我们借助tcpdump来进行故障定位,首先我们将从B-CLIENT主机上执行ping命令,发送icmp数据包给A-SERVER,如下: [root@redhat log]# ping A-SERVER 我们看到,没有收到预料中的ICMP报文,反而捕获到了B-CLIENT发送的arp广播包,由于主机B-CLIENT无法利用arp得到服务器A- SERVER的地址,因此反复询问A-SERVER的MAC地址,由此看来,高层的出问题的可能性不大,很可能在链路层有些问题,先来查查主机A- SERVER的arp表: A-SERVER# arp -a 请注意A-SERVER的Flags位置,我们看到了只有S标志。我们知道,solaris在arp实现中,arp的flags需要设置P标志,才能响应ARP requests。 手工增加p位 我们看到本机已经有了PS标志,此时再测试系统的网络连接恢复正常,问题得到解决。 (3)netflow软件的问题 先看故障现象,在新装的网管工作站上安装cisco netflow软件对路由设备流量等进行分析,路由器按照要求配置完毕,本地工作上软件安装正常,无报错信息,但是启动netflow collector却收不到任何路由器上发出的流量信息,导致该软件失效。排查现象,反复检查路由和软件,配置无误。采用逐步分析的方法,首先先要定位出有问题的设备,是路由器根本没有发送流量信息还是本地系统接收出现了问题?突然想到在路由器上我们定义了接收的client端由udp端口9998接收数据,可以通过监视这个端口来看路由器是否确实发送了udp数据,如果系统能够接收到来自路由的数据包,那么路由方面的问题可能行不大,反之亦然。 在网管工作站上使用tcpdump来看看: nms#tcpdump port 9995 马上我们就看到数据包确实从路由器上发过来了,问题出在路由器的可能性基本排除,重新核查系统,果然,网管工作站上安装了防火墙,udp端口9998是被屏蔽的,调整工作站上的防火墙配置,netflow工作恢复正常,故障得以排除。 结尾 上面我们通过3个实际的例子演示了网络数据采集分析工具TcpDump分析软件在故障解决中起到的作用,通过这些例子,我们不难发现,用好包分析软件,对系统管理员快速准确定位网络故障,分析网络问题有不可替代的作用。任何事情都具有两面性,事实上能够获得网络上传输的数据的工具对于维护网络运行也非常重要,网络需要这些工具软件来帮助分析网络状态、解决各种网络故障,它们是网络工程师的好帮手。 在市场上销售的有好几种专用的网络分析设备,来实现截获数据并进行分析的目的。虽然这些硬件实现的设备虽然功能强大,但价格昂贵,而使用软件通过标准计算机的网络接口来实现这种功能,相对来讲对于一般使用者还是可以承受的。 |
-- 作者:雄鹰在线 -- 发布时间:1/14/2006 2:02:00 PM -- 不错呀! 希望继续 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
64.453ms |