zoukankan      html  css  js  c++  java
  • 交换网络中的sniffer讨论>基于交换网络的ARP spoofing sniffer

    转自--http://blog.csdn.net/zhangnn5/article/details/6810347

    在阅读这篇文章之前,我假设你已经知道TCP/IP协议,ARP协议,知道什么是sniffer等基本网络知识。
    在一般的局域网里面,经常会有两种接入方式,一种是HUB接入(这里的HUB是指普通HUB),一种是交换机直接接入(这里的交换机是比较高级的交换机,老式交换机不在此列)。采用HUB方式接入的网络,数据传送的时候,是采用广播的方式发送,这个时候,只要一台主机将自己的网卡设置成混杂模式(promiscuous mode),就可以嗅探到整个网络的数据。 此篇文章不打算讨论这种网络环境的嗅探(sniffer)和反嗅探(anti sniffer)方法,主
    要是想就交换机方式直接接入的网络环境如何sniffer以及如何anti sniffer做一个比较粗浅的分析。

    我们知道,一台计算机想要接入到网络中,必须要有两个地址。一个是网卡的地址,我们称之为MAC地址,它是固化在网卡中的。在以太网中,我们通过MAC地址来进行数据传送和数据交换。在以太网环境中,数据会分帧传送,每一个数据帧都会包含自己的MAC和目的MAC地址信息; 另外一个地址是平时所说的IP地址,定义在网络层,每一台网络计算机都会有一个或者多个IP地址,这是一个虚拟的数据,并且可以随时更改。IP地址和MAC地址是同时使用的,在数据传送过程中,一个完整的TCP/IP包需要由以太网进行数据封装,数据分帧,最后再通过物理层传输到目标计算机。在以太网封装上层的TCP/IP包的时候,它需要知道源MAC地址和目的MAC地址,但是我们只能给出一个对方的IP地址,这个时候就需要一个协议来支持IP到MAC的转换,这就是ARP,Address Resolution Protocol. 在局域网中,ARP是通过广播的方式来发送的,比如,我的机器IP是192.168.7.110(A),需要知道192.168.7.119(B)机器的MAC地址,那从A机器就会广播一个ARP包,这个包里带有B机器的IP,如果B机器收到了此ARP包,那么他就会同样返回一个ARP包,里面带有响应的MAC地址。A收到这个ARP包后,得到B的MAC地址,这个时候以太网就可以开始封装TCP/IP包了,可以开始正常的数据传送了。比如:

    d:\>arp -a

    1. Interface: 192.168.7.110 on Interface 0x1000003  
    2. Internet Address Physical Address Type  
    3. 192.168.7.1 00-90-0b-01-a0-61 dynamic  
    4.   
    5. d:\>ping 192.168.7.119  
    6.   
    7. Pinging 192.168.7.119 with 32 bytes of data:  
    8.   
    9. Reply from 192.168.7.119: bytes=32 time<10ms TTL=128  
    10.   
    11. Ping statistics for 192.168.7.119:  
    12. Packets: Sent = 1Received = 1Lost = 0 (0% loss),  
    13. Approximate round trip times in milli-seconds:  
    14. Minimum = 0msMaximum = 0msAverage = 0ms  
    15. Control-C  
    16. ^C  
    17. d:\>arp -a  
    18.   
    19. Interface: 192.168.7.110 on Interface 0x1000003  
    20. Internet Address Physical Address Type  
    21. 192.168.7.1 00-90-0b-01-a0-61 dynamic  
    22. 192.168.7.119 00-d0-59-26-df-1a dynamic  


    可以清楚的看到,在未和192.168.7.119通讯之前,本机是没有该IP对应MAC地址的,但一旦通讯后,我们就知道了对方的MAC地址,windows会将对方MAC地址存在自己的ARP cache里面。
    为了节省网络资源以及通讯时间,多数操作系统会保留一张ARP缓存表,里面记录曾经访问的IP和MAC地址影射记录,一旦局域网中有一个新的ARP广播,对应一个IP到MAC的记录,这个ARP缓存表就会被刷新,MAC地址会更换成新的广播包里定义的MAC地址,这个时候就存在一个问题,在更新的时候,系统并没有去检查是否真的是由该机器广播出来的,局域网中的恶意用户就会利用欺骗的方式来更改网络途径,将真正的MAC地址替换成自己的MAC地址,这种方法称之为:ARP spoofing。
    交换机在处理数据的时候,它会根据自己机器内部的一个MAC到端口的数据表来查询符合要求的MAC地址数据包该发往哪个端口。这张表从交换机开机的时候就存在,在每个端口第一次数据传送的时候就会记录对应的端口的MAC地址. 通过发送我们伪造的MAC地址数据包到交换机,就可以欺骗交换机刷新自己的MAC地址到端口的数据表,假设A主机连接在2口,假设我在4口,要sniffer A主机的数据,那么我就需要伪造一个ARP数据包,告诉交换机A主机MAC地址是在4口,那么交换机就会将本来发送到A主机的数据会转送到4口上,这个时候我就可以监听到了A主机的数据传送了,这个就是基于交换网络的arp欺骗sniffer过程。
    通过arp 欺骗,一般sniffer有几个方法:
    1. 就是上面介绍的欺骗MAC进行数据窃听,但由于A收不到数据,这样它会重新发布ARP包,这样导致sniffer很容易暴露,而且效果不好,A会丢包,同样你的sniffer 一样不会抓到全部的数据。
    2. 发起"中间人"窃听。攻击者可以在两台通讯主机之间插入一个中转回路,这样,攻击者既可以sniffer到两机的数据,同样还可以不影响两机的通讯。我们假设X是攻击者的机器,A和B是目标机器。
    X如果想发起攻击,首先在向A主机发送一个ARP包,让A认为B机器IP对应的MAC地址是X主机的,同时再向B机器发送一个ARP包,让B机器认为A机器IP对应的MAC地址是X主机的,如下图:

    3. MAC flood攻击
    通过快速(比如超过1000线程) 发送大量伪造MAC地址数据包,会造成交换机的MAC-端口表塞满,但为了正常数据不被丢弃,大多数交换机会采取类似HUB一样方式:广播的方式发送数据。这个时候,再在网络中任何一台机器设置网卡为混杂模式,就可以sniffer到任何想要监听的数据了。
    *注: 以上方法我并没有正式测试过,理论上可行,实际上还有待验证。
    上面介绍了几种常见的基于switch网络的arp spoofing sniffer方法,那么对于一个管理员来说,如何防范这种方式的数据嗅探呢?
    严格来说,没有一种通用的方法来解决arp欺骗造成的问题,最大的可能就是采用静态的ARP缓存表,由于静态的ARP表不可以刷新,那么伪造的ARP包将会被直接丢弃。但这样造成的问题就是,整个网络中的所有机器,都必须要建立一个静态的MAC表,在大型网络中,会增加交换机的负担,造成效率下降。如果机器更换,那么就要手工去更改MAC地址表,很显然,在大型网络中这种方式是不适用的。
    在这里需要注意的是,windows下即使你建立了静态的MAC到IP的影射表,但是在收到了强制更新的ARP包后,依然会刷新机器的影射表,一样会被sniffer到。
    高级交换机还提供了MAC绑定功能,指定交换机某个端口和某个MAC绑定,这种方法可以很有效的防止MAC克隆(clone)方式的窃听,但是对于上述的arp 欺骗攻击效果不大。
    最可靠的方法就是采用第三方软件来解决,Arpwatch是一个运行在Unix平台下的免费工具,他可以检测到网络中所有MAC地址的变化,一旦网络中的MAC地址有变化,它就会发送一封email到指定地点。

    后记:这篇小文写的很简短,其实在交换网络中还有其他几种攻击方法,比如MAC clone等,而且交换网络中的sniffer方法还不止这一种,我这里只是介绍最常见,容易发生和编程实现的sniffer方法,希望对大家有所帮助。本人水平有限,如有错误,请不吝指责

  • 相关阅读:
    Go语言中new()和 make()的区别详解
    对于Linux内核tty设备的一点理解
    中国移动MySQL数据库优化最佳实践
    深入分析Linux自旋锁
    JAVA大数据项目+整理的Mysql数据库32条军规
    MySQL DBA面试全揭秘
    LINUX 内核基础
    子查询
    linuxprobe----LINUX 基础课程目录学习
    从事分布式系统,计算,hadoop
  • 原文地址:https://www.cnblogs.com/linyawen/p/2224828.html
Copyright © 2011-2022 走看看