60763">
二、活跃在局域网里的“耳朵”们
由于前面说过的原因,嗅探技术不太能在公共网络设备上使用(仅指入侵行为的安装方式,因为网络管理员要在某个路由设备上设置监听是简单的事情),所以当今最普遍的嗅探行为并不是发生在Internet上的,而是各个或大或小的局域网,因为它很显然满足监听技术需要的条件:监听方与通讯方位于同一物理网络。
1、写在前面:局域网内计算机通讯的概念和寻址
要发生监听事件,就必须有至少两台计算机处于通讯状态,而监听的实质也是数据的传输,这就要求窃听者自身也处于通讯网络中,而实现局域网通讯的基础是以太网模型(Ethernet),它包括物理上的数据传输设备如网卡、集线器和交换机等,除此之外还需要逻辑上的软件、网络协议和操作系统支持,如网卡驱动程序、TCP/IP协议、NetBIOS协议、多种寻址和底层协议等,具备了这些条件,计算机才可以实现完整的通讯过程。
那么局域网内的计算机通讯是怎么进行的呢?计算机系统要传输数据时,是严格按照IEEE802.3标准的局域网协议进行的,而且还要结合TCP/IP和OSI模型7层规范实施,所以数据是经过打包封装的,从高层到低层被分别加上相关数据头和地址,直至物理层把其转化为电平信号传送出去,而另一台计算机则是通过逆向操作把数据还原的,这就引发了一个问题:寻址问题。
在局域网里,计算机要查找彼此并不是通过IP进行的,而是通过网卡MAC地址(也被称为以太网地址),它是一组在生产时就固化的全球唯一标识号,根据协议规范,当一台计算机要查找另一台计算机时,它必须把目标计算机的IP通过ARP协议(地址解析协议)在物理网络中广播出去,“广播”是一种让任意一台计算机都能收到数据的数据发送方式,计算机收到数据后就会判断这条信息是不是发给自己的,如果是,就会返回应答,在这里,它会返回自身地址,这一步被称为“ARP寻址”。当源计算机收到有效的回应时,它就得知了目标计算机的MAC地址并把结果保存在系统的地址缓冲池里,下次传输数据时就不需要再次发送广播了,这个地址缓冲池会定时刷新重建,以免造成数据老旧和错误。当前活动的ARP表可以使用arp –a命令查看。
话题回到数据被打包成为比特流的最后两层,在这里有一个关键部分被称为“数据链路层”,数据在网络层形成IP数据报,再向下到达数据链路层,由数据链路层将IP数据报分割为数据帧,增加以太网包头,再向下一层发送。以太网包头中包含着本机和目标设备的MAC地址,也就是说,链路层的数据帧发送时,是依靠以太网地址而非IP地址来确认的,网卡驱动程序不会关心IP数据报中的目标地址,它所需要的仅仅是MAC地址,而MAC地址就是通过前面提到的ARP寻址获得的。简单的说,数据在局域网内的最终传输目标地址是对方网卡的MAC地址,而不是IP地址,IP地址在局域网里只是为了协助系统找到MAC地址而已。
而就是因为这个寻址结构,最终导致了监听实现的发生。
那么,发生在Internet上的监听又是怎么进行的呢?Internet并不采用MAC地址寻址,因此不可能发生类似局域网内的监听案例,实际上,Internet上的监听是因为数据必须通过的路由网关路由设备被做了手脚,不属于本文讨论范围。
2、发生在共享式局域网内的窃听
所谓的“共享式”局域网(Hub-Based Lan),指的是早期采用集线器HUB作为网络连接设备的传统以太网的结构,在这个结构里,所有机器都是共享同一条传输线路的,集线器没有端口的概念,它的数据发送方式是“广播”, 集线器接收到相应数据时是单纯的把数据往它所连接的每一台设备线路上发送的,例如一台机器发送一条“我要和小金说话”的报文,那么所有连接这个集线器的设备都会收到这条报文,但是只有名字为“小金”的计算机才会接收处理这条报文,而其他无关的计算机则会“不动声色”的抛弃掉该报文。因此,共享以太网结构里的数据实际上是没有隐私性的,只是网卡会“君子”化的忽略掉与自己无关的“闲言碎语”罢了,但是很不巧,网卡在设计时是加入了“工作模式”的选项的,正是这个特性导致了噩梦。
每块网卡基本上都会有以下工作模式:Unicast、Broadcast、Multicast、Promiscuous,一般情况下,操作系统会把网卡设置为Broadcast(广播)模式,在Broadcast模式下,网卡可以接收所有类型为广播报文的数据帧——例如ARP寻址,此外它会忽略掉目标地址并非自己MAC地址的报文,即只接收发往自身的数据报文、广播和组播报文,这才是网卡的正常工作模式;如果一块网卡被设置为Unicast或Multicast模式,在局域网里可能会引发异常,因为这两个模式限制了它的接收报文类型;而Promiscuous(混杂)模式,则是罪恶的根源。在混杂模式里,网卡对报文中的目标MAC地址不加任何检查而全部接收,这样就造成无论什么数据,只要是路过的都会被网卡接收的局面,监听就是从这里开始的。
一般情况下,网卡的工作模式是操作系统设置好的,而且没有公开模式给用户选择,这就限制了普通用户的监听实现,但是自从嗅探器(Sniffer)家族发展到一定程度后,开始拥有了设置网卡工作模式的权力,而且矛头直指Promiscuous,任何用户只要在相应选择上打个勾,他的机器就变成了可以记录局域网内任何机器传输的数据的耳朵,由于共享式局域网的特性,所有人都是能收到数据的,这就造成了不可防御的信息泄漏。
可是,最终这种监听方式还是被基本消灭了,人们用了什么手段呢?很简单,局域网结构升级了,变成“交换式局域网”。
但是魔高一丈,若干年后,监听再次卷土重来。