千家论坛_弱电智能化技术与工程讨论(建筑智能,家居智能,人工智能)

监控系统(CCTV)
收藏本版 (135) |订阅

监控系统(CCTV) 今日: 47706 |主题: 63094|排名: 2 

发新帖
打印 上一主题 下一主题

关于网络监听的问题集...

[复制链接]
听雨岩 发布于: 2004-5-18 12:57 490 次浏览 4 位用户参与讨论
跳转到指定楼层
网络监听概念 网络监听工具的提供给管理员的一类管理工具。使用这种工具,可以监视网络的状态、数据流动情况以及网络上传输的信息。   但是网络监听工具也是黑客们常用的工具。当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便可以源源不断地将网上传输的信息截获。   网络监听可以在网上的任何一个位置实施,如局域网中的一台主机、网关上或远程网的调制解调器之间等。黑客们用得最多的是截获用户的口令。   什么是网络监听   网络监听是黑客们常用的一种方法。当成功地登录进一台网络上的主机,并取得了这台主机的超级用户的权限之后,往往要扩大战果,尝试登录或者夺取网络中其他主机的控制友。而网络监听则是一种最简单而且最有效的方法,它常常能轻易地获得用其他方法很难获得的信息。   在网络上,监听效果最好的地方是在网关、路由器、防火墙一类的设备处,通常由网络管理员来操作。使用最方便的是在一个以太网中的任何一台上网的主机上,这是大多数黑客的做法。   以太网中可以监听的原因   在电话线路和无线电、微波中监听传输的信息比较好理解,但是人们常常不太理解为什么局域网中可以进行监听。甚至有人问:能不能监听不在同一网段的信息。下面就讲述在以太网中进行监听的一些原理。在令牌环中,道理是相似的。   对于一个施行网络攻击的人来说,能攻破网关、路由器、防火墙的情况极为少见,在这里完全可以由安全管理员安装一些设备,对网络进行监控,或者使用一些专门的设备,运行专门的监听软件,并防止任何非法访关。然而,潜入一台不引人注意的计算机中,悄悄地运行一个监听程序,一个黑客是完全可以做到的。监听是非常消耗CPU资源的,在一个担负繁忙任务的计算机中进行监听,可以立即被管理员发现,因为他发现计算机的响应速度令人惊奇慢。   对于一台连网的计算机,最方便的是在以太网中进行监听,只须安装一个监听软件,然后就可以坐在机器旁浏览监听到的信息了。   以太网协议的工作方式为将要发送的数据包发往连在一起的所有主机。在包头中包含着应该接收数据包的主机的正确地址。因此,只有与数据包中目标地址一致的那台主机才能接收信包。但是,当主机工在监听模式下,无论数据包中的目标物理地址是什么,主机都将接收。   在Internet上,有许多这样的局域网。几台甚至十几台主机通过一条电缆一个集线器连在一起。在协议的高层或用户看来,当同一网络中的两台主机通信时,源主机将写有目的主机IP地址的数据包发向网关。但是,这种数据包并不能在协议栈的高层直接发送出去。要发送的数据包必须从TCP/IP协议的IP层交给网络接口,即数据链路层。   网络接口不能识别IP地址。在网络接口,由IP层来的带有IP地址的数据包又增加了一部分信息:以太帧的帧头。在帖头中,有两个域分别为只有网络接口才能识别的源主机和目的主机的物理地址,这是一个48位的地址。这个48位的地址是与IP地址对应的。也就是说,一个IP地址,必然对应一个物理地址。对于作为网关的主机,由于它连接了多个网络,因此它同时具有多个IP地址,在每个网络中,它都有一个。发向局域网之外的帧中携带的是网关的物理地址。   在以太网中,填写了物理地址的帧从网络接口中,也就是从网卡中发送出去,传送到物理的线路上。如果局域网是由一条粗缆或细缆连接机而成,则数字信号在电缆上传输,信号能够到达线路上的每一台主机。当使用集线器时,发送出去的信号到达集线器,由集线器再发向连接在信线器上的每一条线路。于是,在物理线路上传输的数字信号也能到达连接在集线器上的每一主机。   数字信号到达一台主机的网络接口时,在正常情况下,网络接口读入数据帧,进行检查,如果数据帧中携带的确良物理地址是自己的,或者物理地址是广播地址,则将数据帧交给上层协议软件,也就是IP层软件,否则就将这个帧丢弃。对于每一个到达网络接口的数据帧,都要进行这个过程。然而,当主机工作在监听模式下,则所有的数据帧都将被交给上层协议软件处理。   局域网的这种工作方式,一个形象的例子是,大房间就像是一个共享的信道,里面的每个人好像是一台主机。人们所说的话是信息包,在大房间中到处传播。当我们对其中某个人说话时,所有的人都能听到。但只有名字相同的那个人,才会对这些话语做出反映,进行处理。其余的人听到了这些谈话,只能从发呆中猜测,是否在监听他人的谈话。   当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网时,如果一台主机处于监听模式下,它还能接收到发向与自己不在同一子网(使用了不同的掩码、IP地址和网关)的主机的那些信包。也就是说,在同一条物理信道上传输的所有信息都可以被接收到。   许多人会问:能不能监听不在同一个网段计算机传输的信息。答案是否定的,一台计算机只能监听经过自己网络接口的那些信包。否则,我们将能监听到整个Internet,情形会多么可怕。   要使主机工作在监听模式下,需要向网络接口(Interface)发送I/O控制命令,将其设置为监听模式。在UNIX系统中,发送这些命令需要超级用户的权限。这一点限制了在UNIX系统中,普通用户是不能进行网络监听的。只有获得超级用户权限,才能进行网络监听。但是,在上网的Windows 95中,则没有这个限制。只要运行这一类的监听软件即可。同时,在微机上运行的这类软件具的操作方便,对监听到信息的综合能力强的特点。   目前的绝大多数计算机网络使用共享的通信信道。从上面的讨论中,我们知道,通信信道的共享意味着,计算机有可能接收发向另一台计算机的信息。   另外,要说明的是,Internet中使用的大部分协议都是很早设计的,许多协议的实现都是基于一种非常友好的,通信的双方充分信任的基础之上。因此,直到现在,网络安全还是非常脆弱的。在通常的网络环境下,用户的所有信息,包手户头和口令信息都是以明文的方式在网上传输。因此,对于一个网络黑客和网络攻击者进行网络监听,获得用户的各种信息并不是一件很困难的事。只要具有初步的网络和TCP/IP协议知识,便能轻易地从监听到的信息中提取出感兴趣的部分。   网络监听常常要保存大量的信息,对收集的信息进行大量的整理工作,因此,正在进行监的机器对用户的请求响应很慢。   首先,网络监听软件运行时,需要消耗大量的处理器时间,如果在此时,就详细地分析包中的内容,许多包就会来不信接收而漏掉。因此,网络监听软件通常都是将监听到的包存放在文件中,待以后再分析。   其次,网络中的数据包非常复杂,两台主机之间即使连续发送和接受数据包,在监听到的结果中,中间必然会夹杂了许多别的主机交互的数据包。监听软件将同一TCP会话的包整理到一起,已经是很不错了。如果还希望将用户的详细信息整理出眯,需要根据协议对包进行大量的分析。面对网络上如此众多的协议,这个监听软件将会十分庞大。   其实,找这些信息并不是一件难事。只要根据一定的规律,很容易将有用的信息一一提取出来。
回复

使用道具 举报

已有4人评论

新浪微博达人勋

千家认证

沙发
听雨岩 发表于 2004-5-18 12:58:00
网络监听的目的 截获通信的内容   首先,这些工具对网络上主机间的通信,能给出一个详细的,逐包的统计信息。入侵者可以选择某一台主机,看看它正在同那些主机进行通信,使用了哪些协议(通过端口号可以区分出来),传输一些针么内容。   对于这类工具,常常可以设置详细的过滤条件,可以针对信息的源主机、目的主机、使用的协议、使用的端口以及包的长度来设置过滤条件,也可以是这些条件的逻辑组合。   下面是使用snoop发现的主机asy&.vineyard.net和主机next之间后段对话:   #snoop   asy8.vineyard.netànext SMTP C port=1974   asy8.vineyard.netànsxt SMTP C port=1974 MALL FROM: next àasy8.vineyard.net SMTP C PORT=1974 250 Asy8.net à SMTP C port=1974   Asy8.vineyard.net à next SMTP C port=1974 RCPT T Nextàasy8.vineyard.net SMTP C port=1974 250 Asy8.vineyard.net ànext SMTP C port=1974.   Asy.vineyard.netànext SMPT C port=1974 DATA .   Next àasy8.vineyard.net SMTP c PORT =1974 354 Enter mail,end.   在这个例子中,一个邮件消息在从asy8.vineyard.net到计算机next的传播过程中被监听。如上所述,它能给出一个详细的报告,诸如系统中各个用户都在干什么。   对于入侵者来说,最喜欢的莫过于用户的口令。其实,在大多数情况下,监听到的包中,用户的口令也就像上面的“DATA rN“一样,完全是明文形式,并且很容易找出来,因为人们没有采取任何形式的加密措施。而且口令往往是在一次通信的最开始的几个数据包中,只要找到了两台主机间连接的开始,便很容易找到认证用的口令。   6.2.2 对协议分析   所有的监听软件都可以对数据包进行详细分析,直到每一个字段的含义。   这是Solaris中的snoop使用的一个例子。这一命令监听网络接口/dev/le,   将监听到的数据包存于文件saved中。   # snoop -o saved   Using device /dev/le (promiscuous mode)   23 c   在监听了23个包之后,中断了监听。然后,可以使用snoop读取文件saved中的信息,并按照协议的格式,详细地输出包头的信息。这个命令监听不到包中传输的信息(被子该命令有意过滤掉了)。因此,这一命令是学习TCP/IP的一个最好的实例,读者不妨详细研究一下不同协议层次,不同协议中的数据包的内容和格式。   # snoop -I saved -tr -v   ETHER:------------Ether Header------   ETHER:   ETHER: Packet 21 arrived at 17:02:;29.70   ETHER: packet size =85 bytes   ETHER: Desstination =0:20:af:3b:bb:8f,   ETHER: Source =8:0:3e:30:28:87,Motorola VME bus processor   Module   ETHER: Ethertype =0800 (Ip)   ETHER:   包的最外部分是以太帧头。   IP:-----------IP Header ----------   IP:   IP: Version =4   IP: Header length =20 bytes   IP: Type of service =0x00   Ip: xxx……..=0 (precedence)   IP: …0…=normal delay   IP: ….0...=normal throughput   IP: …..0.. =normal rellability   IP: Total length =71 bytes   IP: Tdentification =2014   IP: Flags =0x0   IP: .0……=may fragment   IP: ..0….. =last fragment   IP: Fragment offest =0 bytes   IP: Time to live =30 seconds/hops   IP: Protocol =17 (UDP)   IP: Header checksum =0714   IP: Source address =11.22.33.41, source.host   IP: Destination address =192.33.4.12, c.root –servers.ndt   IP: No options   IP:   紧跟着以太帧头的是IP分组的头部信息。   UDP:-----------UDP Header--------   UDP:   UDP: Source port =53   UDP: Destination port =53 (DNS)   UDP: Length =51   UDP: Checksum =2167   UDP:   IP是网络层,网络层之上是传输层。这个包在传输层使用了UDP协议。   DNS:---------DNS:--------   DNS:   DNS: “ “   DNS:   使用应用层的是域名解析服务。   这是一个在网络上传输的一个包的信息分解。实妹的包由于使用的是流协议,许多翻译片信息是用一些位来表示的。并不能直接阅读和理解。从上面的解释得知,这是个DNS解析的数据包,传输层使用的是UDP协议,应用层使用了DNS服务。该协议将一个主机名映射为IP地址。   让我们来看另一个监听的数据包:   ETHER: ---------Ehter Header ------   ETHER:   ETHER: Packet 55 arrived at 17:02:31.14   ETHER: Packet size =64 bytes   ETHER: Destination =0:a0:c9:49:cc:a5’   ETHER: Source =0:20:af:3b:bb:8f,   ETHER: Ethertype =0880(IP)   ETHER:   IP:--------IP Header-------   Ip:   Ip: Version =4   IP:Header length =20 bytes   IP:Type of service =0x00   IP: xxx…..=0 (precedence)   IP: …0… =normal delay   IP: …..0…normal throughput   IP: ……..0..=normal rellability   IP: Total length =44 bytes   iP: Identication =12513   IP: Flags =0x0   IP: .0……=may fragmrnt   IP: …0……=last fragment   IP: Fragment offest =0 bytes   IP: Time to live =59 seconds/hops   IP: Protocol =6 (tcp)   IP: Header checksum =bc42   IP: Source addrees =11.22.33.42, gaper   IP: Destination address ==11.22.41.18, butterfly   IP: No options   IP:   Tcp: -----tcp Header -------   TCP:   TCP: Source port =2927   TCP: Destination port =25 (SMTP)   TCP: Sequence number =950073857   TCP: Acknowledgement number =0   TCP: Data offset =24 bytes   TCP: Flags =0x02   TCP: ..0…..=No urgent pointer   TCP: …0….=No acknowledgement   TCP: ….0……=No push   TCP: ……0……=No reset   TCP: ………1. =Syn   TCP: …………0 =No FIN   TCP: Window =16384   TCP: Checkwum =0x8753   TCP: Urgrnt pointer =0   TCP: Options: (4 bytes)   TCP: -Maximum segment size =1460 bytes   TCP:   SMTP:---------SMT0:-----   SMTP:   SMTP: “ ‘   SMTP
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

板凳
听雨岩 发表于 2004-5-18 12:58:00
网络监听的检测 网络监听本来是为了管理网络,监视网络的状态和数据流动情况。但是由于它能有效地截获网上的数据,因此也成了网上黑客使用得最多的方法。有一个前提条件,那就是监听只能是同一网段的主机,这里同一网段是指物理上的连接。因为不是同一落千丈网段的数据包,在网关就被滤掉,传不到该网段来。否则一个Internet上的一台主机,便可以监视整个Internet了。   网络监听最有用的是获得用户口令。当前,网上的数据绝大多数是以明文的形式传输。而且口令通常都很短且容易辨认。当口令被截获,则可以非常容易地登上另一台主机。   简单的检测方法   网络监听是很难被发现的。运行网络监听的主机只是被动地接收在局域局上传输的信息,并没有主动的行动。即不会与其他主机交换信息,也不能修改在网上传输的信包。这一切决定了网络监听的检测是非常困难的。   当某一危险用户运行网络监听软件时,可以通过ps-ef或ps-aux命令来发现。然而,当该用户暂时修改了ps命令,则也是很发现的。能够运行网络监听软件,说明该用户已经具有了超级的用户的权限,他可以修改任何系统命令文件,来掩盖自己的行踪。其实修改ps命令只须短短数条shell命令,将监听软件的名字过滤掉即可。   另外,当系统运行网络监听软件时,系统因为负荷过重,因此对外界的响应很慢。但也不能因为一个系统响应过慢而怀疑其正在运行网络监听软件。   这是两个检测监听的方法,原理很简单,但事实上并不容易做到,做为检测方法的一点补充。   *方法一:   对于怀疑运行监听程序的机器,用正确的IP地址和错误的物理地址去ping,运行监听程序的机器会有响应。这是因为正常的机器不接收错误的物理地址,外于监听状态的机器能接收,如果他的IP stack不再次反向检查的话,就会响应。这种方法依赖于系统工程的Ipstack,对一些系统可能行不通。   *方法二:   往网上发大量不存在的物理地址的包,由于监听程序将处理这些包,将导致性能下降。通过比较前后该机器性能(icmp echo delay等方法);加以判断。这种方法难度比较大。   一个看起来可行的检查监听程序的办法是搜索所有主机上运行的进程。当然,这几乎是不可能的,因为我们很难同时检查所有主机上的进程。但是至少管理员可以确定是否有一个进程被从管理员机器上启动。对于检查运行进程这种方法,那些使用DOS、Windows for Workgroup或者Windows 95的机器很难做到这一点。而使用UNIX和Windows NT的机器可以很容易地得到当前进程的清单。   在UNIX下,可以用下列命令:   ps -aun 或 ps -augx   这个命令产生一个包括所有进程的清单-----进程的属主、这些进程占用的CPU时间以及占用的内存等等。这些输出在STDOUT上,以标准表的形式输出。如果一个进程正在运行,它就会被列在这张清单中(除非ps或其他程序变成了一个特洛伊木马程序)。   另外一个办法就是去搜监听程序,现在只有那么多种的监听程序。入侵者很可能使遥用的是一个免费软件。在这种情况下,管理员就可以检查目录。找出监听程序,但这很困难而且很费时间。目前还不知道有哪种现在的工具可以做到这一点。在UNIX系统上,人们可能不得不自己编写一个程序,另外,如果监听程序被子换成另一个名字,管理员也不可能找到这个监听程序。   对付一个监听   击败一个监听程序的攻击,用户有多种选择,而最终采用哪种要取决于用户真正想做什么,剩下的就取决于运行时的开销了。   一般来讲,人们真正关心的是那些秘密数据(例如,用户名和口令)的安全传输,不被监听和偷换。如果这些信息是以明文的形式传输的,这就很容易被藿获而且阅读出来。这个问题的解决方法是很简单的,而且效率很高。加密是一个很好的办法,有一个产品叫做Secure Shell,或者叫SSH。SSH是一种在像Telnet那样的应用环境中提供保密通讯的协议,它实现了一个密钥交换协议,以及主机及客户端认证协议。提供Internet上的安全加密通讯方式和在不安全信道上很强的认证和安全通讯功能。它像许多协议一样,是建立在客户/服务器模型之上的,SSH绑定的端口号是非SSH完全排除了在不安全的信道上通讯的信息,被监听的可能性使用到了RAS算法,在授权过程结束之后,所有的传输都用IDEA技术加密。   在很长一段时间内,SSH被做为主要的通讯协议,因为它利用加密提供了通信的安全。但是在职996年,这种情况发生了变化。SSH成产了一个数据流的联盟F-SSH提供了高水平、多级别的加密算法。它针对一般利用TCP/IP进行的公共传输提供了更加有力的加密算法。如果用户使用了这样的产品。即使存在着监听,它得到的信息也是毫无意义的。   作为工具使用的SSH允许其用户安全地登录到远程主机上执行命令或传输文件。它是作为rlogin sh cp和rdist这些系统程序的替代而开发的,可以很好地运行任何使用TCP/IP协议的主机上。   SSH软件包提供如下一些工具:   Sdd运行于UNIX服务器主机上的服务程序。它监听来自客户主机的连接请求,当接收到一个连接请求,它就进行认证,并开始对客户端进行服务。   Shh客户程序,用来登录到其他主机去,或者在其他机上执行命令。Slogin是这一程序的另一个名字。   Scp用来安全的将文件从一台主机拷贝到另一台主机上。   其他防范监听的方法   一般能够接受的击败网络监听的方法的使用安全的拓朴结构。这种技术通常被称为分段技术。将网络分成一些小的网络,每一网段的集线器被连接到一个交换器上(Switch)。因为网段是硬件连接的,因而包只能在该子网的网球段内被监听工具截获。这样,网络中剩余的部分(在不同一网段的部分)就被保护了   用户也可以使用网桥或者路由器来进行分段。这可能更加合适一些,这取决于网络的结构和财力。实际上,一台旧的PCA工作站,可以被作网桥式路由器。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

地板
听雨岩 发表于 2004-5-18 13:00:00
我们模仿入侵者在主机上跑一个上面提到的sniffit软件,监听本机发出去的所有telnet数据,如下: server#./sniffit -A . -p 23 -s server 同时,我们模仿一个用户yiming登录一台client机器, server@yiming#telnet client Trying 192.168.1.1... Connected to 192.168.1.1 Escape character is ''^]''. login: yiming Password: Sun Microsystems Inc. SunOS 5.7 Generic October 1998 $ ls bak lost+found project wangguan libcap nms snmp wglist $ pwd /yiming $ 我们看到这个用户telnet到client机器,输入账号口令,执行了ls,pwd命令, 此时看看sniffit的记录文件记录了什么, server# more server.32780-client.23 ........... ..!.."..''.......h.7....#..$....VT100....''.........yiming..Power^man!..ls ..pwd.. 我们看到了账号yiming,密码Power^man!,还有登录后操作的命令。请注意一点,yiming这个用户尽管设置了非常复杂的密码,但对网络监听而言,是没有丝毫意义的。 其实除了截获telnet密码这样的功能外,专用的网络监听软件从密码到邮件,浏览的网页等内容,无所不包,但由于本文不是介绍网络监听软件用途的,因此这里不详细叙述各种监听软件的使用方法,有兴趣的读者可以参照各个软件的readme等文件,很简单。 网络监听的防范方法: 上面我们介绍了可以用来进行网络监听的软件,那么对这种不受欢迎的行为,有没有一些防范手段呢? 上面我们知道,sniffer是发生在以太网内的,那么,很明显,首先就要确保以太网的整体安全性,因为sniffer行为要想发生,一个最重要的前提条件就是以太网内部的一台有漏洞的主机被攻破,只有利用被攻破的主机,才能进行sniffer,去收集以太网内敏感的数据信息。 其次,采用加密手段也是一个很好的办法,因为如果sniffer抓取到的数据都是以密文传输的,那对入侵者即使抓取到了传输的数据信息,意义也是不大的-比如作为telnet,ftp等安全替代产品目前采用ssh2还是安全的。这是目前相对而言使用较多的手段之一,在实际应用中往往是指替换掉不安全的采用明文传输数据的服务,如在server端用ssh,openssh等替换unix系统自带的telnet,ftp,rsh,在client端使用securecrt,sshtransfer替代telnet,ftp等。 除了加密外,使用交换机目前也是一个应用比较多的方式,不同于工作在第一层的hub,交换机是工作在二层,也就是说数据链路层的,以CISCO的交换机为例,交换机在工作时维护着一张ARP的数据库,在这个库中记录着交换机每个端口绑定的MAC地址,当有数据报发送到交换机上时,交换机会将数据报的目的MAC地址与自己维护的数据库内的端口对照,然后将数据报发送到"相应的"端口上,注意,不同于HUB的报文广播方式,交换机转发的报文是一一对应的。对二层设备而言,仅有两种情况会发送广播报文,一是数据报的目的MAC地址不在交换机维护的数据库中,此时报文向所有端口转发,二是报文本身就是广播报文。由此,我们可以看到,这在很大程度上解决了网络监听的困扰。但是有一点要注意,随着dsniff,ettercap等软件的出现,交换机的安全性已经面临着严峻的考验!我们将在后面对这种技术进行介绍。 此外,对安全性要求比较高的公司可以考虑kerberos,kerberos是一种为网络通信提供可信第三方服务的面向开放系统的认证机制,它提供了一种强加密机制使client端和server即使在非安全的网络连接环境中也能确认彼此的身份,而且在双方通过身份认证后,后续的所有通讯也是被加密的。在实现中也即建立可信的第三方服务器保留与之通讯的系统的密钥数据库,仅kerberos和与之通讯的系统本身拥有私钥(private key),然后通过private key以及认证时创建的session key来实现可信的网络通讯连接。 检测网络监听的手段 对发生在局域网的其他主机上的监听,一直以来,都缺乏很好的检测方法。这是由于产生网络监听行为的主机在工作时总是不做声的收集数据包,几乎不会主动发出任何信息。但目前网上已经有了一些解决这个问题的思路和产品: 1:反应时间向怀疑有网络监听行为的网络发送大量垃圾数据包,根据各个主机回应的情况进行判断,正常的系统回应的时间应该没有太明显的变化,而处于混杂模式的系统由于对大量的垃圾信息照单全收,所以很有可能回应时间会发生较大的变化。 2:观测dns 许多的网络监听软件都会尝试进行地址反向解析,在怀疑有网络监听发生时可以在dns系统上观测有没有明显增多的解析请求。 3:利用ping模式进行监测上面我们说过:当一台主机进入混杂模式时,以太网的网卡会将所有不属于他的数据照单全收。按照这个思路,我们就可以这样来操作:假设我们怀疑的主机的硬件地址是00:30:6E:00:9B:B9,它的ip地址是192.168.1.1,那么我们现在伪造出这样的一种icmp数据包:硬件地址是不与局域网内任何一台主机相同的00:30:6E:00:9B:9B,目的地址是192.168.1.1不变,我们可以设想一下这种数据包在局域网内传输会发生什么现象:任何正常的主机会检查这个数据包,比较数据包的硬件地址,和自己的不同,于是不会理会这个数据包,而处于网络监听模式的主机呢?由于它的网卡现在是在混杂模式的,所以它不会去对比这个数据包的硬件地址,而是将这个数据包直接传到上层,上层检查数据包的ip地址,符合自己的ip,于是会对对这个ping的包做出回应。这样,一台处于网络监听模式的主机就被发现了。 这种方法,在10pht这个黑客组织的antisniff产品中有很好的体现。可参见:http://www.securitysoftwaretech.com/antisniff/download.html 4:利用arp数据包进行监测除了使用ping进行监测外,目前比较成熟的有利用arp方式进行监测的。这种模式是上述ping方式的一种变体,它使用arp数据包替代了上述的icmp数据包。向局域网内的主机发送非广播方式的arp包,如果局域网内的某个主机响应了这个arp请求,那 么我们就可以判断它很可能就是处于网络监听模式了,这是目前相对而言比较好的监测模式。 这种方式,在neped和PromiScan这两个产品中有所体现。可分别参见:http://www.apostols.org/、http://www.securityfriday.com/ToolDownload/PromiScan/promiscan_doc.html 值得注意的是,现在互联网上流传着一些基于上面这两种技术的脚本和程序,它们宣称自己能准确捕捉到局域网内所有进行网络监听的主机,目前来讲,这种说法基本上是不可靠的,因为上述技术在实现中,除了要考虑网卡的硬件过滤外,还需要考虑到不同操作系统可能产生的软件过滤。因为虽然理论上网卡处于混杂模式的系统应该接收所有的数据包,但实际上不同的操作系统甚至相同的操作系统的不同版本在tcp/ip的实现上都有自己的一些特点,有可能不会接收这些理论上应该接收的数据包。 除了上述几种方式外,还有一些其他的方式,如:检测hub灯,但相比局限性就更大了,只能作为上述模式的补充。 相对而言,对发生在本机的网络监听,是可以利用一些工具软件来发现的,比较简单,这里我们不介绍,有兴趣的读者可以参考cert等网站。 安全的交换机? 文章到这里结束了吗?没有,我们还漏掉了一个很重要的监听手段-交换环境下面的网络听,这是个很有必要谈及的话题,笔者作为网络管理员参加了许多的工程决策,吃惊的发现许多的公司都还停留在交换机是局域网安全的彻底解决之道的概念上。 应该认识到这个概念是个传说,是的,在以前,的确是这样的,但随着上面介绍的dsniff等软件的诞生,所谓交换机的安全已经成为一个传说了。 本文前面的部分介绍了交换机工作的原理,不同于HUB的共享式报文方式,交换机转发的报文是一一对应的,由此看来,交换环境下再采用传统的共享式局域网下网络监听是不可行了,由于报文是一一对应转发的,普通的网络监听软件此时无法监听到交换环境下其它主机任何有价值的数据。 交换机是安全的? 不,还有一些别的方法,比如利用arp,本文一开始就提到了局域网内主机数据包的传送完成不是依靠ip地址,而是依靠arp找出ip地址对应的mac地址实现的。而我们知道arp协议是不可靠和无连接的,通常即使主机没有发出arp请求,也会接受发给它的arp回应,并将回应的mac和ip对应关系放入自己的arp缓存中。 那么如果能利用这个特性,在这个环节中做些文章,还是可以截获数据包的。 Arp理论的实践 作者这里推荐一个不错的上述理论产物,dsniff,这个软件包中包括了filesnarf、 mailsnarf、msgsnarf、urlsnarf、dnsspoof、macof 等诸多很有特色的组件,可以捕获网络中的各种敏感数据,但这些不是今天感兴趣的主题,我们只看其中一个组件,arpspoof,这个组件就是上述arp理论的一个实践,它的工作原理是这样的:发起arpspoof的主机向目标主机发送伪造的arp应答包,骗取目标系统更新arp表,将目标系统的网关的mac地址修改为发起arpspoof的主机mac地址,使数据包都经由发起arpspoof的主机,这样即使系统连接在交换机上,也不会影响对数据包的攫取,由此就轻松的通过交换机实现了网络监听。 举例如下:主机a和b连接在交换机的同一个vlan上, A机的ip地址:192.168.1.37 B机的ip地址:192.168.1.35,mac地址为:08-00-20-c8-fe-15 网关的ip地址:192.168.1.33,mac地址为:00-90-6d-f2-24-00 首先在a机上看看a机的arp表 C:\ >arp -a Interface: 192.168.1.37 Internet Address Physical Address Type 192.168.1.33 00-90-6d-f2-24-00 dynamic 我们看到a机中保留着网关的ip地址192.168.1.33和对应的mac地址00-90-6d-f2-24-00 我们在B机上执行arpspoof,将目标指向a机,宣称自己为网关,如下: HOSTB# arpspoof -t 192.168.1.37 192.168.1.33 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 8:0:20:c8:fe:15 0:50:ba:1a:f:c0 0806 42: arp reply 192.168.1.33 is-at 8:0:20:c8:fe:15 可以看到b机持续向a发送arp回应包,宣称网关192.168.1.33的mac地址是自己!此时,我们在a机上看看arp表的内容, C:\>arp -a Interface: 192.168.1.37 Internet Address Physical Address Type 192.168.1.33 08-00-20-c8-fe-15 dynamic 哈!a机的arp表已经改变了,网关的mac地址被更新为了 b机的mac地址,这样,当有数据包发送时,a机理所当然的会发到它arp表中网关对应的mac地址08-00-20-c8-fe-15,然而这个地方的b机正在等待着,悄然无声的冒充网关收发着a机的数据包。 有一点要说明的是,为了让a机能正常使用网络,b机还必须打开数据转发, linux中可以使用sysctl -w net.ipv4.ip_forward = 1 bsd系统可以使用sysctl -w net.inet.ip.forwarding =1 solaris系统可以使用ndd -set /dev/ip ip_forwarding 1 除了这样打开内核的支持外,也可以选用外部的fragrouter等转发软件,如此,就能确保a机正常工作了。 此外,ettercap的作者指出,内核为2.4.x的linux系统在arp实现中,考虑到了arp欺骗,不会接受未经请求的arp回应,因此直接向这种系统发送arp reply也是无效的,不过,有意思的是虽然它不会接受未经请求的arp reply,但是只要接收到arp的request,它就会更新自己的arp缓存,;),如此就好办了,发送一个伪造的arp request即可!不过,作者在自己实验时没有发现这个问题,作者内核为2.4.7的系统接受了直接的arp reply,并更新了自己的arp表。 如果一切配置正常的话,被重定向的a机是不会有什么明显的感觉的,网络照常是通畅的,只是在后台数据都绕了一个小圈子,不是直接到网关,而是先经由b机,再由b机转发到网关,因为数据包都经过了b机,那么在b机上起一个网络监听软件,a机的所有数据必然会被监听到。交换环境下的监听由此实现! 除此之外,dsniff还提供了macof等淹没交换机arp表等进行监听的模式,这里就不介绍了,有兴趣的读者可以自己查阅相关资料。 Arp方式监听的防范 对付采用arp方式的监听也是个比较棘手的问题,有几个不是非常理想的对策。 首先还是上面提到的加密,尽可能的让局域网内的传输的数据都是秘文的,这个可能相对最理想的防范方法,但实施起来可能有一点困难。有一点要注意,ssh1是不安全的,我们提到的dsniff和ettercap都可以对ssh1实施中间人的监听。 另外,还可以考虑指定静态arp,如大多数unix系统支持arp读取指定的ip和mac地址对应文件,首先编辑内容为ip和mac地址对照的文件,然后使用命令:arp -f /path/to/ipandmacmapfile读取文件,这样就指定了静态的arp地址,即使接收到arp reply,也不会更新自己的arp缓存,从而使arpspoof丧失作用。windows系统没有-f这个参数,但有-s参数,用命令行指定ip和mac地址对照关系,如arp -s 192.168.1.33 00-90-6d-f2-24-00,可惜除了xp外,其它的版本的window平台即使这样做,当接收到伪造的arp reply后,依然会更新自己的arp缓存,用新的mac地址替换掉老的mac地址,所以无法对抗arpspoof。而且采用静态arp有一个缺憾,就是如果网络很大的话,工作量会非常的大。 Arp方式监听的检测 首先是借助检测ip地址和mac地址对应的工具,如arpwatch,安装了arpwatch的系统在发生mac地址变化时会在系统的日志文件中看到如下提示 Apr 21 23:05:00 192.168.1.35 arpwatch: flip flop 192.168.1.33 0:90:6d:f2:24:0 (8:0:20:c8:fe:15) Apr 21 23:05:02 192.168.1.35 arpwatch: flip flop 192.168.1.33 8:0:20:c8:fe:15 (0:90:6d:f2:24:0) Apr 21 23:05:03 192.168.1.35 arpwatch: flip flop 192.168.1.33 0:90:6d:f2:24:0 (8:0:20:c8:fe:15) 从提示中可以看出arpwatch检测到了网关mac地址发生了改变。 其次借助于一些入侵检测系统,如snort,亦可以起到的一定的检测作用。在snort的配置文件中打开arpspoof的preprocessor开关并进行配置即可。 作者本人试验发现,如果采用本地解析时,观测局域网本地的dns服务器的反解是一个好的办法,因为发起arpspoof的主机会不间断的尝试正反解析冒充的网关ip,发送数量非常多的重复解析数据包,当怀疑有arpspoof时很容易被发现,如下: nameserver# tcpdump -n -s 0 port 53 tcpdump: listening on hme0 23:19:22.489417 192.168.1.35.41797 > 192.168.1.68.53: 32611+ PTR? 33.224.102.202.in-addr.arpa. (45) (DF) 23:19:22.490467 192.168.1.35.41798 > 192.168.1.68.53: 32611+ PTR? 33.224.102.202.in-addr.arpa. (45) (DF) 结束语: 上面我们介绍了网络监听技术的几个主要方面,包括网络监听的主要技术细节,具体实现,检测方法等。此外还介绍了一种非传统的监听方式,通过本文,希望读者能对网络监听产生一些认识。
回复 支持 反对

使用道具 举报

新浪微博达人勋

千家认证

5#
听雨岩 发表于 2004-5-18 14:45:00
不是吧!没人看?打击死了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆 千家通行证登陆

本版积分规则

千家智客微信号
千家智客微信
玩物说商城
玩物说商城