60763">
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应答包即可,这样它就可作为一个双向代理的身份插入两者之间的通讯链路。