于是A接收到一个被伪造的ARP应答。 A被欺骗了!!倘若在局域网中看某某机器不顺眼, ……
以太网中的嗅探太有作用了, 但是交换网络对嗅探进行了限制, 让嗅探深入程度大打折扣。 不过, 很容易就能
够发现, 主机、Switch(动态更新地址表类型, 下同)中的缓存表依然是(主要是)动态的。 要在一个交换网络中
进行有效的嗅探工作(地下党?), 需要采用对付各种缓存表的办法, 连骗带哄, 甚至乱踹, 在上面的ARP欺骗基础
中我们就能够做到。
就象上面程序中实现的一样, 对目标A进行欺骗, A去Ping主机C却发送到了DD-DD-DD-DD-DD-DD这个地址上。 如
果进行欺骗的时候, 把C的MAC地址骗为BB-BB-BB-BB-BB-BB, 于是A发送到C上的数据包都变成发送给B的了。 这不正
好是B能够接收到A发送的数据包了么, 嗅探成功。
A对这个变化一点都没有意识到, 但是接下来的事情就让A产生了怀疑。 因为A和C连接不上了!!B对接收到A发送
给C的数据包可没有转交给C。
做“man in the middle”,进行ARP重定向。 打开B的IP转发功能, A发送过来的数据包, 转发给C, 好比一个路由
器一样。 不过, 假如B发送ICMP重定向的话就中断了整个计划。
直接进行整个包的修改转发, 捕获到A发送给的数据包, 全部进行修改后再转发给C, 而C接收到的数据包完全认为
是从A发送来的。 不过, C发送的数据包又直接传递给A, 倘若再次进行对C的ARP欺骗。 现在B就完全成为A与C的中间桥
梁了。
对Switch的MAC欺骗
Switch上同样维护着一个动态的MAC缓存, 它一般是这样, 首先, 交换机内部有一个对应的列表, 交换机的端口对
应MAC地址表Port n <-> Mac记录着每一个端口下面存在那些MAC地址, 这个表开始是空的, 交换机从来往数据帧中学
习。 举例来说, 当Port 1口所接的计算机发出了一个数据帧, 这帧数据从Port 1进入交换机, 交换机就取这个数据帧
的原MAC地址AAAA, 然后在地址表中记录:Port 1 <-> AAAA, 以后, 所有发向MAC地址为AAAA的数据帧, 就全从Port 1
口输出, 而不会从其它的口输出。
跟前面对目标进行欺骗相类似。 如果把Switch上的MAC-PORT表修改了, 那么对应的MAC和PORT就一样跟着改变, 本来
不应该发送到嗅探器的数据结果发送过来了, 这样也达到了嗅探的目的。 修改本地(B)发送的数据包MAC地址为原来A的
MAC地址, 当经过交换机的时候, 交换机发现端口B对应的地址是机器A的MAC地址, 于是就将会把A的MAC地址同端口B相对
应, 从而把发送给A的数据从端口B传输了, 本来这些应该是传送到端口A的。 因此, 从机器B就能够获得发送给A的数据。
但是, 这里有一个问题, A将接收不到数据了。 嗅探不目的并不是要去破坏正常的数据通讯。 同时, 从刚才的欺骗中,
让交换机中一个MAC地址对应了多个端口, 这种对于交换机处理还不清楚。 还请多指教。
就象上面介绍Switch的MAC和Port对应关系形成的原理, 因为MAC-PORT缓存表是动态更新的, 那么让整个Switch的端
口表都改变, 对Switch进行MAC地址欺骗的Flood, 不断发送大量假MAC地址的数据包, Switch就更新MAC-PORT缓存, 如果
能通过这样的办法把以前正常的MAC和Port对应的关系破坏了, 那么Switch就会进行泛洪发送给每一个端口, 让Switch基
本变成一个HUB, 向所有的端口发送数据包, 要嗅探的目的一样能够达到。
存在的问题, Switch对这种极限情况的处理, 因为属于不正常情况, 可能会引起包丢失情况。 而且现在对这种极限情
况的Switch状态还很不了解。 如果对网络通讯造成了大的破坏, 这不属于正常的嗅探(嗅探也会引起一些丢失)。
对Switch进行各种手段的操作, 需要小心, 如果打开了端口保护, 那么可能会让交换机关闭所有用户。 因此, 对交换
机这样的设备进行欺骗或者其他操作, 还不如对一些上级设备进行欺骗, 比如目标主机或者路由器。
至于上面关于嗅探的手段都是基于这个动态表进行的。 因此, 使用静态的ARP就能够进行防范了。 对于WIN, 使用
arp -s 来进行静态ARP的设置。
感谢winpcap这个开放项目, 也感谢Dancefire提供的大量帮助和指正。 我在网络设备上的了解还很不够, 还请多指正。
……