局域网嗅探与监听
一. 谁偷看了我的网络日记
检察员小洁从小就有写日记的习惯,毕业后上了工作岗位也不曾改变,无论工作多忙多累,每天晚上临近睡觉前她总会把今日发生的事情记录进日记本里,例如一些工作问题、心情想法、同事和上级的事情等等。小洁使用的是一个网站提供的网络日记本服务,她很喜欢那个宁静简洁的文字界面,偶尔没任务要忙或者心情不好的时候,她就会用院里的网络上去看自己以前写的日记。
这天小洁和往常一样来到办公室,却发现气氛不同往常了:同事们面对她的时候笑容很不自然,有几个女同事还偷偷对她指指点点的,小洁看过去时她们却又不说话了,她只好竖起耳朵偷听,隐隐约约听到一句“……连别人还欠着50元没还她都写上去,这个人真……”,小洁的脸瞬间变得煞白:这不是她某天的日记内容吗?……
究竟是谁把小洁的日记偷看了呢?你正在使用的局域网,又能真的很安全吗?小洁不知道,大院的局域网里,有一双耳朵正在悄悄的记录着她的电脑上发送和接收的一切信息……
这双耳朵的名词被称为“网络嗅探”(Network Sniffing)或“网络监听”(Network Listening),它并不是最近才出现的技术,也并非专门用在黑道上的技术,监听技术作为一种辅助手段,在协助网络管理员监测网络传输数据、排除网络故障等方面具有不可替代的作用,因此一直倍受网络管理员的青睐并逐渐发展完善,所谓“监听”技术,就是在互相通讯的两台计算机之间通过技术手段插入一台可以接收并记录通讯内容的设备,最终实现对通讯双方的数据记录。一般都要求用作监听途径的设备不能造成通讯双方的行为异常或连接中断等,即是说,监听方不能参与通讯中任何一方的通讯行为,仅仅是“被动”的接收记录通讯数据而不能对其进行篡改,一旦监听方违反这个要求,这次行为就不是“监听”,而是“劫持”(Hijacking)了。
看了以上对于“监听”概念的描述,有人也许已经跃跃欲试了:我有网络,也有电脑,还有网络嗅探工具,那我能不能把某个收费电影站甚至国防部网站的账号密码记录下来呢?当然这也不是不可能,但是前提是你有足够能力在相关站点实体服务器的网关或路由设备上接入一个监听设备,否则凭一台你自己家里的计算机是无法实现的。这就是“监听”的弱点:它要求监听设备的物理传输介质与被监听设备的物理传输介质存在直接联系或者数据包能经过路由选择到达对方,即一个逻辑上的三方连接。能实现这个条件的只有以下情况:
1. 监听方与通讯方位于同一物理网络,如局域网
2. 监听方与通讯方存在路由或接口关系,例如通讯双方的同一网关、连接通讯双方的路由设备等
因此,直接用自己家里的计算机去嗅探国防部网站的数据是不可能的,你看到的只能是属于你自己领域的数据包,那些害怕自己在家里上网被远方的入侵者监听的朋友大可以松口气了(你机器上有木马的情况除外),除非入侵者控制了你的网关设备,但这需要入侵者具有高级的入侵技术,而一个有高级技术的入侵者会稀罕普通家庭用户的一台计算机吗?
不可否认,“监听”行为是会对通讯方造成损失的,一个典型例子是在1994年的美国网络窃听事件,一个不知名的人在众多的主机和骨干网络设备上安装了网络监听软件,利用它对美国骨干互联网和军方网窃取了超过100000个有效的用户名和口令,引发了重大损失,而“监听”技术,就是在那次事件以后才从地下走向公开化的。
下面,我们来更深入一层了解如今最常见的网络监听。
二. 活跃在局域网里的“耳朵”们
由于前面说过的原因,嗅探技术不太能在公共网络设备上使用(仅指入侵行为的安装方式,因为网络管理员要在某个路由设备上设置监听是简单的事情),所以当今最普遍的嗅探行为并不是发生在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,任何用户只要在相应选择上打个勾,他的机器就变成了可以记录局域网内任何机器传输的数据的耳朵,由于共享式局域网的特性,所有人都是能收到数据的,这就造成了不可防御的信息泄漏。
可是,最终这种监听方式还是被基本消灭了,人们用了什么手段呢?很简单,局域网结构升级了,变成“交换式局域网”。
但是魔高一丈,若干年后,监听再次卷土重来。
3.发生在交换式局域网内的窃听
作为与“共享式”相对的“交换式”局域网(Switched Lan),它的网络连接设备被换成了交换机(Switch),交换机比集线器聪明的一点是它连接的每台计算机是独立的,交换机引入了“端口”的概念,它会产生一个地址表用于存放每台与之连接的计算机的MAC地址,从此每个网线接口便作为一个独立的端口存在,除了声明为广播或组播的报文,交换机在一般情况下是不会让其他报文出现类似共享式局域网那样的广播形式发送行为的,这样即使你的网卡设置为混杂模式,它也收不到发往其他计算机的数据,因为数据的目标地址会在交换机中被识别,然后有针对性的发往表中对应地址的端口,决不跑到别人家里去。
这一改进迅速扼杀了传统的局域网监听手段,但是历史往往证明了人是难以被征服的……
(1).对交换机的攻击:MAC洪水
不知道是谁第一个发现了这种攻击模式,大概是因为交换机的出现破坏了嗅探器的工作,所以一肚子气泄到了交换机身上,另一种看法则是精明的技术人员设想交换机的处理器在超过所能承受信息量的时候会发生什么情况而进行的试验,无论是从什么论点出发的,至少这个攻击模式已经成为现实了:所谓MAC洪水攻击,就是向交换机发送大量含有虚假MAC地址和IP地址的IP包,使交换机无法处理如此多的信息而引起设备工作异常,也就是所谓的“失效”模式,在这个模式里,交换机的处理器已经不能正常分析数据报和构造查询地址表了,然后,交换机就会成为一台普通的集线器,毫无选择的向所有端口发送数据,这个行为被称作“泛洪发送”,这样一来攻击者就能嗅探到所需数据了。
不过使用这个方法会为网络带来大量垃圾数据报文,对于监听者来说也不是什么好事,因此MAC洪水使用的案例比较少,而且设计了端口保护的交换机可能会在超负荷时强行关闭所有端口造成网络中断,所以如今,人们都偏向于使用地址解析协议ARP进行的欺骗性攻击。
(2).地址解析协议带来的噩梦
回顾前面提到的局域网寻址方式,我们已经知道两台计算机完成通讯依靠的是MAC地址而与IP地址无关,而目标计算机MAC地址的获取是通过ARP协议广播得到的,而获取的地址会保存在MAC地址表里并定期更新,在这个时间里,计算机是不会再去广播寻址信息获取目标MAC地址的,这就给了入侵者以可乘之机。
当一台计算机要发送数据给另一台计算机时,它会以IP地址为依据首先查询自身的ARP地址表,如果里面没有目标计算机的MAC信息,它就触发ARP广播寻址数据直到目标计算机返回自身地址报文,而一旦这个地址表里存在目标计算机的MAC信息,计算机就直接把这个地址作为数据链路层的以太网地址头部封装发送出去。为了避免出现MAC地址表保持着错误的数据,系统在一个指定的时期过后会清空MAC地址表,重新广播获取一份地址列表,而且新的ARP广播可以无条件覆盖原来的MAC地址表。
假设局域网内有两台计算机A和B在通讯,而计算机C要作为一个窃听者的身份得到这两台计算机的通讯数据,那么它就必须想办法让自己能插入两台计算机之间的数据线路里,而在这种一对一的交换式网络里,计算机C必须成为一个中间设备才能让数据得以经过它,要实现这个目标,计算机C就要开始伪造虚假的ARP报文。
ARP寻址报文分两种,一种是用于发送寻址信息的ARP查询包,源机器使用它来广播寻址信息,另一种则是目标机器的ARP应答包,用于回应源机器它的MAC地址,在窃听存在的情况下,如果计算机C要窃听计算机A的通讯,它就伪造一个IP地址为计算机B而MAC地址为计算机C的虚假ARP应答包发送给计算机A,造成计算机A的MAC地址表错误更新为计算机B的IP对应着计算机C的MAC地址的情况,这样一来,系统通过IP地址获得的MAC地址都是计算机C的,数据就会发给以监听身份出现的计算机C了。但这样会造成一种情况就是作为原目标方的计算机B会接收不到数据,因此充当假冒数据接收角色的计算机C必须担当一个转发者的角色,把从计算机A发送的数据返回给计算机B,让两机的通讯正常进行,这样,计算机C就和计算机AB形成了一个通讯链路,而对于计算机A和B而言,计算机C始终是透明存在的,它们并不知道计算机C在偷听数据的传播。只要计算机C在计算机A重新发送ARP查询包前及时伪造虚假ARP应答包就能维持着这个通讯链路,从而获得持续的数据记录,同时也不会造成被监听者的通讯异常。
计算机C为了监听计算机A和B数据通讯而发起的这种行为,就是“ARP欺骗”(ARP Spoofing)或称“ARP攻击”(ARP Attacking),实际上,真实环境里的ARP欺骗除了嗅探计算机A的数据,通常也会顺便把计算机B的数据给嗅探了去,只要计算机C在对计算机A发送伪装成计算机B的ARP应答包的同时也向计算机B发送伪装成计算机A的ARP应答包即可,这样它就可作为一个双向代理的身份插入两者之间的通讯链路。
三. 围堵“耳朵”:局域网监听的防御
知道了局域网监听的实现,我们就不难重现开篇提及的检察员小洁的日记内容是如何被别人看到的了:虽然办公室的网络是交换式局域网,但是窃听者使用ARP欺骗工具篡改了小洁机器的MAC地址表,使小洁的机器发出的数据实际上是在窃听者机器里走一圈后才真正发送出去的,这时候只要小洁登录任何使用明文传输密码的网页表单,她输入的网址、用户名和密码就会被嗅探软件记录下来,窃听者只要使用这个密码登录网站,就可以把小洁写在日记本上的隐私一览无余了。
由此可见,由网络监听引发的信息泄漏后果是非常严重的,轻则隐私泄漏,重则因为银行密码、经过网络传输的文档内容失窃而导致无法计量的经济损失,因此,如何有效防止局域网监听,一直是令管理员操心的问题。
由于共享式局域网的局限性(集线器不会选择具体端口),在上面流通的数据基本上是“你有,我也有”的,窃听者连ARP信息都不需要更改,自然无法躲过被监听的命运,要解决这个问题,只能先把集线器更换为交换机,杜绝这种毫无隐私的数据传播方式。
好了,现在我们换到交换式局域网了,下一步,就该开始着手围堵这些不受欢迎的耳朵们了。
1.寻找隐匿的耳朵
如果我们怀疑某台机器在偷听数据,应该怎么办呢?
早在几年前,有一种被称为ping检测的方法就已经开始流行了,它的原理还是利用MAC地址自身,大部分网卡允许用户在驱动程序设置里自行指定一个MAC地址(特别说明:这种通过驱动程序指定的MAC地址仅仅能用于自身所处的局域网本身,并不能用于突破远程网关的MAC+IP绑定限制!),因此我们就可以利用这一特性让正在欺骗MAC地址的机器自食其果。
•假设IP为192.168.1.4的机器上装有ARP欺骗工具和嗅探器,所以ping 192.168.1.4,然后arp –a | find “192.168.1.4” 得到它的MAC地址“00-00-0e-40-b4-a1”
•修改自己的网卡驱动设置页,改Network Address为“00000e40b4a2”,即去掉分隔符的MAC地址最末位加1
•再次ping 192.168.1.4,正常的话应该不会看到任何回应,因为局域网中不会存在任何与“00-00-0e-40-b4-a2”相符的MAC地址。
•如果看到返回,则说明192.168.1.4很可能装有嗅探器。
另一种比较“恶毒”的方法是对被怀疑安装了嗅探器的计算机发送大量不存在的MAC地址的数据报,由于监听程序在进行分析和处理大量的数据包需要占用很多的CPU资源,这将导致对方计算机性能下降,这样我们只要比较发送报文前后该机器性能就能加以判断,但是如果对方机器配置比较高,这个方法就不太有效了。
除了主动嗅探的行为,还有一些机器是被入侵者恶意种植了带有嗅探功能的后门程序,那么我们就必须使用本机测试法了,其原理是建立一个原始连接(Raw Socket)打开自己机器的随机端口,然后再建立一个UDP连接到自己机器的任意端口并随意发送一条数据,正常情况下,这个方法建立的原始连接是不可能成功接收数据的,如果原始连接能接收这个数据,则说明机器网卡正处于“混杂”模式——嗅探器经常这么干,接下来的事情就不用我说了吧?
但是基本上没找到现成的工具可以使用,也可能是我的查找能力问题,但是其实这个问题很好解决:因为安装了嗅探器的机器是能接收到任何数据的,那么只要在这个机器上再次安装一个嗅探软件(不是ARP欺骗类型!)就能“共享”捕获的数据,正常情况下我们是只能看到属于自己IP的网络数据的,如果不巧发现嗅探器把其它计算机的数据也顺手牵羊了,并且由于ARP欺骗的存在,我们还可能嗅探到自己的计算机会定期发送一条ARP应答包出去……既然都做得那么明显了,那就不要客气把它灭了……
2.预防为主——从根本上防御网络监听
虽然利用ARP欺骗报文进行的网络监听很难察觉,但它并不是无法防御的,与ARP寻址相对的,在一个相对稳定的局域网里(机器数量和网卡被更换的次数不多,也没有人一没事干就去更改自己IP),我们可以使用静态ARP映射,即记录下局域网内所有计算机的网卡MAC地址和对应的IP,然后使用“arp –s IP地址 MAC地址”进行静态绑定,这样计算机就不会通过ARP广播来找人了,自然不会响应ARP欺骗工具发送的动态ARP应答包(静态地址的优先度大于动态地址),但是这个方法存在的劣势就是对操作用户要求挺高,要知道并不是所有人都理解MAC地址是干什么用的,另外一点就是如果机器数量过多或者变动频繁,会对操作用户(通常是网络管理员)造成巨大的心灵伤害……
因此,一般常用的方法是使用软件防御,例如Anti Arp Sniffer,它可以强行绑定本机与网关的MAC关系,让伪装成网关获取数据的监听机成了摆设,而如果是监听者仅仅欺骗了某台计算机的情况呢?这就要使用ARP Watch了,ARP Watch会实时监控局域网中计算机MAC地址和ARP广播报文的变化情况,如果有ARP欺骗程序发送虚假地址报文,必然会造成MAC地址表不符,ARP Watch就会弹出来警告用户了。
此外,对网络进行VLAN划分也是有效的方法,每个VLAN之间都是隔离的,必须通过路由进行数据传输,这个时候MAC地址信息会被丢弃,每台计算机之间都是采用标准TCP/IP进行数据传输的,即使存在嗅探器也无法使用虚假的MAC地址进行欺骗了。
四. 结语
网络监听技术作为一种工具,总是扮演着正反两方面的角色,尤其在局域网里更是经常以黑暗的身份出现。对于入侵者来说,通过网络监听可以很容易地获得用户的关键信息,因此他们青睐。而对于入侵检测和追踪者来说,网络监听技术又能够在与入侵者的斗争中发挥重要的作用,因此他们也离不开必要的嗅探。我们应该努力学习网络安全知识,进一步挖掘网络监听技术的细节,扎实掌握足够的技术基础,才能在与入侵者的斗争中取得胜利。
检察员小洁从小就有写日记的习惯,毕业后上了工作岗位也不曾改变,无论工作多忙多累,每天晚上临近睡觉前她总会把今日发生的事情记录进日记本里,例如一些工作问题、心情想法、同事和上级的事情等等。小洁使用的是一个网站提供的网络日记本服务,她很喜欢那个宁静简洁的文字界面,偶尔没任务要忙或者心情不好的时候,她就会用院里的网络上去看自己以前写的日记。
这天小洁和往常一样来到办公室,却发现气氛不同往常了:同事们面对她的时候笑容很不自然,有几个女同事还偷偷对她指指点点的,小洁看过去时她们却又不说话了,她只好竖起耳朵偷听,隐隐约约听到一句“……连别人还欠着50元没还她都写上去,这个人真……”,小洁的脸瞬间变得煞白:这不是她某天的日记内容吗?……
究竟是谁把小洁的日记偷看了呢?你正在使用的局域网,又能真的很安全吗?小洁不知道,大院的局域网里,有一双耳朵正在悄悄的记录着她的电脑上发送和接收的一切信息……
这双耳朵的名词被称为“网络嗅探”(Network Sniffing)或“网络监听”(Network Listening),它并不是最近才出现的技术,也并非专门用在黑道上的技术,监听技术作为一种辅助手段,在协助网络管理员监测网络传输数据、排除网络故障等方面具有不可替代的作用,因此一直倍受网络管理员的青睐并逐渐发展完善,所谓“监听”技术,就是在互相通讯的两台计算机之间通过技术手段插入一台可以接收并记录通讯内容的设备,最终实现对通讯双方的数据记录。一般都要求用作监听途径的设备不能造成通讯双方的行为异常或连接中断等,即是说,监听方不能参与通讯中任何一方的通讯行为,仅仅是“被动”的接收记录通讯数据而不能对其进行篡改,一旦监听方违反这个要求,这次行为就不是“监听”,而是“劫持”(Hijacking)了。
看了以上对于“监听”概念的描述,有人也许已经跃跃欲试了:我有网络,也有电脑,还有网络嗅探工具,那我能不能把某个收费电影站甚至国防部网站的账号密码记录下来呢?当然这也不是不可能,但是前提是你有足够能力在相关站点实体服务器的网关或路由设备上接入一个监听设备,否则凭一台你自己家里的计算机是无法实现的。这就是“监听”的弱点:它要求监听设备的物理传输介质与被监听设备的物理传输介质存在直接联系或者数据包能经过路由选择到达对方,即一个逻辑上的三方连接。能实现这个条件的只有以下情况:
1. 监听方与通讯方位于同一物理网络,如局域网
2. 监听方与通讯方存在路由或接口关系,例如通讯双方的同一网关、连接通讯双方的路由设备等
因此,直接用自己家里的计算机去嗅探国防部网站的数据是不可能的,你看到的只能是属于你自己领域的数据包,那些害怕自己在家里上网被远方的入侵者监听的朋友大可以松口气了(你机器上有木马的情况除外),除非入侵者控制了你的网关设备,但这需要入侵者具有高级的入侵技术,而一个有高级技术的入侵者会稀罕普通家庭用户的一台计算机吗?
不可否认,“监听”行为是会对通讯方造成损失的,一个典型例子是在1994年的美国网络窃听事件,一个不知名的人在众多的主机和骨干网络设备上安装了网络监听软件,利用它对美国骨干互联网和军方网窃取了超过100000个有效的用户名和口令,引发了重大损失,而“监听”技术,就是在那次事件以后才从地下走向公开化的。
下面,我们来更深入一层了解如今最常见的网络监听。
二. 活跃在局域网里的“耳朵”们
由于前面说过的原因,嗅探技术不太能在公共网络设备上使用(仅指入侵行为的安装方式,因为网络管理员要在某个路由设备上设置监听是简单的事情),所以当今最普遍的嗅探行为并不是发生在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,任何用户只要在相应选择上打个勾,他的机器就变成了可以记录局域网内任何机器传输的数据的耳朵,由于共享式局域网的特性,所有人都是能收到数据的,这就造成了不可防御的信息泄漏。
可是,最终这种监听方式还是被基本消灭了,人们用了什么手段呢?很简单,局域网结构升级了,变成“交换式局域网”。
但是魔高一丈,若干年后,监听再次卷土重来。
3.发生在交换式局域网内的窃听
作为与“共享式”相对的“交换式”局域网(Switched Lan),它的网络连接设备被换成了交换机(Switch),交换机比集线器聪明的一点是它连接的每台计算机是独立的,交换机引入了“端口”的概念,它会产生一个地址表用于存放每台与之连接的计算机的MAC地址,从此每个网线接口便作为一个独立的端口存在,除了声明为广播或组播的报文,交换机在一般情况下是不会让其他报文出现类似共享式局域网那样的广播形式发送行为的,这样即使你的网卡设置为混杂模式,它也收不到发往其他计算机的数据,因为数据的目标地址会在交换机中被识别,然后有针对性的发往表中对应地址的端口,决不跑到别人家里去。
这一改进迅速扼杀了传统的局域网监听手段,但是历史往往证明了人是难以被征服的……
(1).对交换机的攻击:MAC洪水
不知道是谁第一个发现了这种攻击模式,大概是因为交换机的出现破坏了嗅探器的工作,所以一肚子气泄到了交换机身上,另一种看法则是精明的技术人员设想交换机的处理器在超过所能承受信息量的时候会发生什么情况而进行的试验,无论是从什么论点出发的,至少这个攻击模式已经成为现实了:所谓MAC洪水攻击,就是向交换机发送大量含有虚假MAC地址和IP地址的IP包,使交换机无法处理如此多的信息而引起设备工作异常,也就是所谓的“失效”模式,在这个模式里,交换机的处理器已经不能正常分析数据报和构造查询地址表了,然后,交换机就会成为一台普通的集线器,毫无选择的向所有端口发送数据,这个行为被称作“泛洪发送”,这样一来攻击者就能嗅探到所需数据了。
不过使用这个方法会为网络带来大量垃圾数据报文,对于监听者来说也不是什么好事,因此MAC洪水使用的案例比较少,而且设计了端口保护的交换机可能会在超负荷时强行关闭所有端口造成网络中断,所以如今,人们都偏向于使用地址解析协议ARP进行的欺骗性攻击。
(2).地址解析协议带来的噩梦
回顾前面提到的局域网寻址方式,我们已经知道两台计算机完成通讯依靠的是MAC地址而与IP地址无关,而目标计算机MAC地址的获取是通过ARP协议广播得到的,而获取的地址会保存在MAC地址表里并定期更新,在这个时间里,计算机是不会再去广播寻址信息获取目标MAC地址的,这就给了入侵者以可乘之机。
当一台计算机要发送数据给另一台计算机时,它会以IP地址为依据首先查询自身的ARP地址表,如果里面没有目标计算机的MAC信息,它就触发ARP广播寻址数据直到目标计算机返回自身地址报文,而一旦这个地址表里存在目标计算机的MAC信息,计算机就直接把这个地址作为数据链路层的以太网地址头部封装发送出去。为了避免出现MAC地址表保持着错误的数据,系统在一个指定的时期过后会清空MAC地址表,重新广播获取一份地址列表,而且新的ARP广播可以无条件覆盖原来的MAC地址表。
假设局域网内有两台计算机A和B在通讯,而计算机C要作为一个窃听者的身份得到这两台计算机的通讯数据,那么它就必须想办法让自己能插入两台计算机之间的数据线路里,而在这种一对一的交换式网络里,计算机C必须成为一个中间设备才能让数据得以经过它,要实现这个目标,计算机C就要开始伪造虚假的ARP报文。
ARP寻址报文分两种,一种是用于发送寻址信息的ARP查询包,源机器使用它来广播寻址信息,另一种则是目标机器的ARP应答包,用于回应源机器它的MAC地址,在窃听存在的情况下,如果计算机C要窃听计算机A的通讯,它就伪造一个IP地址为计算机B而MAC地址为计算机C的虚假ARP应答包发送给计算机A,造成计算机A的MAC地址表错误更新为计算机B的IP对应着计算机C的MAC地址的情况,这样一来,系统通过IP地址获得的MAC地址都是计算机C的,数据就会发给以监听身份出现的计算机C了。但这样会造成一种情况就是作为原目标方的计算机B会接收不到数据,因此充当假冒数据接收角色的计算机C必须担当一个转发者的角色,把从计算机A发送的数据返回给计算机B,让两机的通讯正常进行,这样,计算机C就和计算机AB形成了一个通讯链路,而对于计算机A和B而言,计算机C始终是透明存在的,它们并不知道计算机C在偷听数据的传播。只要计算机C在计算机A重新发送ARP查询包前及时伪造虚假ARP应答包就能维持着这个通讯链路,从而获得持续的数据记录,同时也不会造成被监听者的通讯异常。
计算机C为了监听计算机A和B数据通讯而发起的这种行为,就是“ARP欺骗”(ARP Spoofing)或称“ARP攻击”(ARP Attacking),实际上,真实环境里的ARP欺骗除了嗅探计算机A的数据,通常也会顺便把计算机B的数据给嗅探了去,只要计算机C在对计算机A发送伪装成计算机B的ARP应答包的同时也向计算机B发送伪装成计算机A的ARP应答包即可,这样它就可作为一个双向代理的身份插入两者之间的通讯链路。
三. 围堵“耳朵”:局域网监听的防御
知道了局域网监听的实现,我们就不难重现开篇提及的检察员小洁的日记内容是如何被别人看到的了:虽然办公室的网络是交换式局域网,但是窃听者使用ARP欺骗工具篡改了小洁机器的MAC地址表,使小洁的机器发出的数据实际上是在窃听者机器里走一圈后才真正发送出去的,这时候只要小洁登录任何使用明文传输密码的网页表单,她输入的网址、用户名和密码就会被嗅探软件记录下来,窃听者只要使用这个密码登录网站,就可以把小洁写在日记本上的隐私一览无余了。
由此可见,由网络监听引发的信息泄漏后果是非常严重的,轻则隐私泄漏,重则因为银行密码、经过网络传输的文档内容失窃而导致无法计量的经济损失,因此,如何有效防止局域网监听,一直是令管理员操心的问题。
由于共享式局域网的局限性(集线器不会选择具体端口),在上面流通的数据基本上是“你有,我也有”的,窃听者连ARP信息都不需要更改,自然无法躲过被监听的命运,要解决这个问题,只能先把集线器更换为交换机,杜绝这种毫无隐私的数据传播方式。
好了,现在我们换到交换式局域网了,下一步,就该开始着手围堵这些不受欢迎的耳朵们了。
1.寻找隐匿的耳朵
如果我们怀疑某台机器在偷听数据,应该怎么办呢?
早在几年前,有一种被称为ping检测的方法就已经开始流行了,它的原理还是利用MAC地址自身,大部分网卡允许用户在驱动程序设置里自行指定一个MAC地址(特别说明:这种通过驱动程序指定的MAC地址仅仅能用于自身所处的局域网本身,并不能用于突破远程网关的MAC+IP绑定限制!),因此我们就可以利用这一特性让正在欺骗MAC地址的机器自食其果。
•假设IP为192.168.1.4的机器上装有ARP欺骗工具和嗅探器,所以ping 192.168.1.4,然后arp –a | find “192.168.1.4” 得到它的MAC地址“00-00-0e-40-b4-a1”
•修改自己的网卡驱动设置页,改Network Address为“00000e40b4a2”,即去掉分隔符的MAC地址最末位加1
•再次ping 192.168.1.4,正常的话应该不会看到任何回应,因为局域网中不会存在任何与“00-00-0e-40-b4-a2”相符的MAC地址。
•如果看到返回,则说明192.168.1.4很可能装有嗅探器。
另一种比较“恶毒”的方法是对被怀疑安装了嗅探器的计算机发送大量不存在的MAC地址的数据报,由于监听程序在进行分析和处理大量的数据包需要占用很多的CPU资源,这将导致对方计算机性能下降,这样我们只要比较发送报文前后该机器性能就能加以判断,但是如果对方机器配置比较高,这个方法就不太有效了。
除了主动嗅探的行为,还有一些机器是被入侵者恶意种植了带有嗅探功能的后门程序,那么我们就必须使用本机测试法了,其原理是建立一个原始连接(Raw Socket)打开自己机器的随机端口,然后再建立一个UDP连接到自己机器的任意端口并随意发送一条数据,正常情况下,这个方法建立的原始连接是不可能成功接收数据的,如果原始连接能接收这个数据,则说明机器网卡正处于“混杂”模式——嗅探器经常这么干,接下来的事情就不用我说了吧?
但是基本上没找到现成的工具可以使用,也可能是我的查找能力问题,但是其实这个问题很好解决:因为安装了嗅探器的机器是能接收到任何数据的,那么只要在这个机器上再次安装一个嗅探软件(不是ARP欺骗类型!)就能“共享”捕获的数据,正常情况下我们是只能看到属于自己IP的网络数据的,如果不巧发现嗅探器把其它计算机的数据也顺手牵羊了,并且由于ARP欺骗的存在,我们还可能嗅探到自己的计算机会定期发送一条ARP应答包出去……既然都做得那么明显了,那就不要客气把它灭了……
2.预防为主——从根本上防御网络监听
虽然利用ARP欺骗报文进行的网络监听很难察觉,但它并不是无法防御的,与ARP寻址相对的,在一个相对稳定的局域网里(机器数量和网卡被更换的次数不多,也没有人一没事干就去更改自己IP),我们可以使用静态ARP映射,即记录下局域网内所有计算机的网卡MAC地址和对应的IP,然后使用“arp –s IP地址 MAC地址”进行静态绑定,这样计算机就不会通过ARP广播来找人了,自然不会响应ARP欺骗工具发送的动态ARP应答包(静态地址的优先度大于动态地址),但是这个方法存在的劣势就是对操作用户要求挺高,要知道并不是所有人都理解MAC地址是干什么用的,另外一点就是如果机器数量过多或者变动频繁,会对操作用户(通常是网络管理员)造成巨大的心灵伤害……
因此,一般常用的方法是使用软件防御,例如Anti Arp Sniffer,它可以强行绑定本机与网关的MAC关系,让伪装成网关获取数据的监听机成了摆设,而如果是监听者仅仅欺骗了某台计算机的情况呢?这就要使用ARP Watch了,ARP Watch会实时监控局域网中计算机MAC地址和ARP广播报文的变化情况,如果有ARP欺骗程序发送虚假地址报文,必然会造成MAC地址表不符,ARP Watch就会弹出来警告用户了。
此外,对网络进行VLAN划分也是有效的方法,每个VLAN之间都是隔离的,必须通过路由进行数据传输,这个时候MAC地址信息会被丢弃,每台计算机之间都是采用标准TCP/IP进行数据传输的,即使存在嗅探器也无法使用虚假的MAC地址进行欺骗了。
四. 结语
网络监听技术作为一种工具,总是扮演着正反两方面的角色,尤其在局域网里更是经常以黑暗的身份出现。对于入侵者来说,通过网络监听可以很容易地获得用户的关键信息,因此他们青睐。而对于入侵检测和追踪者来说,网络监听技术又能够在与入侵者的斗争中发挥重要的作用,因此他们也离不开必要的嗅探。我们应该努力学习网络安全知识,进一步挖掘网络监听技术的细节,扎实掌握足够的技术基础,才能在与入侵者的斗争中取得胜利。
顶(0)
踩(0)
下一篇:用防火墙伪装抵住黑客攻击
- 最新评论