瑞星卡卡安全论坛

首页 » 技术交流区 » 入侵防御(HIPS) » 【原创】帮你解读ARP欺骗
梅罗 - 2010-2-10 16:49:00
为了在短时间内使各位有个稍微系统的认识,那么我们先从2个基础知识开始说,其中由于本人的知识有限,有出入的地方请大家原谅:

1.OSI参考模型(OSI/RM)的全称是开放系统互连参考模型(Open System Interconnection Reference ModelOSI/RM),它是由国际标准化组织(International Standard OrganizationISO)提出的一个网络系统互连模型。

那么通过下面这个图来理解一下什么是包,为了方便大家理解下一个基础知识点ARP包,那么我们就来简单说说各层的功能,以及包是怎么封装的, 2个计算机之间的信息和数据通过包交换和传输,请看下面的图:

我们再大概了解一下各层的功能以及他们用的协议:

1、物理层(Physical Layer
  物理层规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性。该层为上层协议提供了一个传输数据的物理媒体。
  在这一层,数据的单位称为比特(bit)。
  属于物理层定义的典型规范代表包括:EIA/TIA RS-232EIA/TIA RS-449V.35RJ-45等。
  2、数据链路层(Data Link Layer
  数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
  在这一层,数据的单位称为帧(frame)。
  数据链路层协议的代表包括:SDLCHDLCPPPSTP、帧中继等。
  3、网络层(Network Layer)
    网络层负责对子网间的数据包进行路由选择。此外,网络层还可以实现拥塞控制、网际互连等功能。
  在这一层,数据的单位称为数据包(packet)。
  网络层协议的代表包括:IPIPXRIPOSPF等。
  4、传输层(Transport Layer
  传输层是第一个端到端,即主机到主机的层次。传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
  在这一层,数据的单位称为数据段(segment)。
  传输层协议的代表包括:TCPUDPSPX等。
  5、会话层(Session Layer
  会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
  会话层协议的代表包括:NetBIOSZIPAppleTalk区域信息协议)等。
  6、表示层(Presentation Layer
  表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
  表示层协议的代表包括:ASCIIASN.1JPEGMPEG等。
  7、应用层(Application Layer
  应用层为操作系统或网络应用程序提供访问网络服务的接口。
  应用层协议的代表包括:TelnetFTPHTTPSNMP等。

      OSI参考模型中,当一台主机需要传送用户的数据(DATA)时,数据首先通过应用层的接口进入应用层。在应用层,用户的数据被加上应用层的报头(Application HeaderAH),形成应用层协议数据单元(Protocol Data UnitPDU),然后被递交到下一层-表示层。
  表示层并不"关心"上层-应用层的数据格式而是把整个应用层递交的数据包看成是一个整体进行封装,即加上表示层的报头(Presentation HeaderPH)。然后,递交到下层-会话层。
  同样,会话层、传输层、网络层、数据链路层也都要分别给上层递交下来的数据加上自己的报头。它们是:会话层报头(Session HeaderSH)、传输层报头(Transport HeaderTH)、网络层报头(Network HeaderNH)和数据链路层报头(Data link HeaderDH)。其中,数据链路层还要给网络层递交的数据加上数据链路层报尾(Data link TerminationDT)形成最终的一帧数据。
  当一帧数据通过物理层传送到目标主机的物理层时,该主机的物理层把它递交到上层-数据链路层。数据链路层负责去掉数据帧的帧头部DH和尾部DT(同时还进行数据校验)。如果数据没有出错,则递交到上层-网络层。
  同样,网络层、传输层、会话层、表示层、应用层也要做类似的工作。最终,原始数据被递交到目标主机的具体应用程序中。

    通过这里,我们可以看出,我们2台计算机之间的信息和数据交流是以下的过程,首先由上次的应用程序决定需要发送的数据(我们需要着重了解的是传输层,网络层,数据链路层这3层,因为数据在网络的传输主要是这3层在起作用),在这里我们可以根据TCP模型将OSI模型的后3层归结于应用层,这里的应用程序即是笼统意义上指的应用程序,关于后3层之间的关系,为了篇幅我们在这里不过多的讲述,请感兴趣的同学自行百度吧,我们只抽象出一个应用程序的概念即可。我们知道一个程序在系统里是通过一个或多个进程来体现的,我们抽象出的应用层决定了将要发送的数据,并且发起了建立会话的要求,并已经加好了后3层各层的头,于是数据被指明利用传输层的某种协议(比如TCP协议),于是被加上TCP头,变成数据段,再被网络层封装成IP包,交到数据链路层封装成帧,交到物理层发送。
     
2.ARP协议:我们所说的ARP欺骗实际上是根据ARP协议的原理来进行的,具体呢也是利用了ARP协议。 

      ARPAddress Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址。ARP协议和ICMP协议是常用的TCP/IP底层协议。我们通常将他归结于网络层。
  首先我们来了解两个地址:
      1.IP地址,这个大家都应该很熟悉;
      2.MAC(Media Access Control)地址:或称为 MAC位址、硬件位址,用来定义网络设备的位置。在OSI模型中,第三层网络负责IP地址,第二层数据链路层则负责 MAC位址。因此一个主机会有一个IP地址,而每个网络位置会有一个专属于它的MAC位址。所以主机,路由器,交换机都会有自己的MAC地址,因为他们都是标准的网络设备,而我们说的主机的MAC地址通常指的是主机里网卡的MAC地址,这在网卡出厂时已经设定好了且不可更改,现在用软件可以修改,或者通过修改注册表的方法改变mac地址,因为MAC地址是从内存读出再打包的。

用户系统信息:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; MAXTHON 2.0)
梅罗 - 2010-2-10 16:51:00

  那么什么时候要用到ARP协议呢,我们知道,当一台新的计算机AIP地址为192.168.1.2)加入以太网并要和另外一台计算机BIP地址为192.168.1.4)进行通讯时,它怎么知道另外一台的位置呢,这时候ARP协议就有用处了,这个时候主机A会先检查其ARP缓存内是否有主机BMAC地址。如果没有,主机A会发送一个ARP请求广播包(即向网内所有主机发送),此包内包含着其欲与之通信的主机的IP地址,也就是主机BIP地址(192.168.1.4)。目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“192.168.1.4MAC地址是什么?网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“IP192.168.1.4的主机BMAC地址是00-aa-00-62-c6-09”并更新自己的ARP缓存,也就是同时将主机AIP地址/MAC地址对保存起来,以供后面使用。主机A在得到主机BMAC地址后,就可以与主机B通信了。同时,主机A也将主机BIP地址/MAC地址对保存在自己的ARP缓存内。

3.ARP欺骗:
      说了这么多,我们终于可以说到哦ARP欺骗了,呼。
    ARP
欺骗其实就是利用ARP协议向网关虚构一个IP地址和MAC的关系(虚构地址之后就欺骗了网关),导致某台计算机无法上网或者接受数据。一般分为两种情况,通过以下的图梅罗来详细说明它们各自的情况:
   
    第一种ARP欺骗的原理是——截获网关数据。它通知路由器一系列错误的内网MAC地址,并按照一定的频率不断进行,使真实的地址信息无法通过更新保存在路由器中(路由器的路由表刷新时间是有间隔的,各厂商的不同),结果路由器的所有数据只能发送给错误的MAC地址,造成正常PC无法收到信息,比如说,主机A不想让主机B接受数据,它不断的向路由器发送ARP包声明IP 192.168.1.3的主机B对应的MAC地址为00-23-ed-51-32(这个地址是虚构的和主机IP原来的MAC不同)这样外网主机F,原本通过路由给主机B的信息其实就被传输到一个虚假的MAC
        第二种ARP欺骗的原理是——伪造网关。它的原理是建立假网关,让被它欺骗的PC向假网关发数据,而不是通过正常的路由器途径上网,这是局域网木马常用的手段,还是以上图为例,假设主机B中了木马,这个时候能它就会向局域网内别的主机发送ARP包声明IP192.168.1.1的路由(它是网关)MAC地址是00-aa-00-62-c6-09(其实就是把自己的MAC和网关的IP绑定然后大叫三声:我是网关,想上网的快来孝敬我!),这下局域里的其他主机就把数据包发到了主机B,但是由于他没有网关的功能,别的主机自然就上不了网了。
       
    那么我们来分析如何处理ARP欺骗,当然杜绝ARP欺骗当然是进行IP MAC双向绑定,如果没绑定或者绑定一端的时候我们可以这样做,假设A端IP是110,MAC是AB,B端IP是120,MAC是AC,那么为了达到我们的目的,那么如果A只绑定了B的120和原始MAC AC,这叫单方面绑定,但是我们发送声明120对应的MAC地址修改的时候,由于与预先绑定的MAC不符,然后我们可以判定是个ARP欺骗不理会,但是由于B端没有绑定A的IP和MAC,我们可以发包欺骗B端,而双向绑定就不存在这个漏洞了。但是绑定的权限需要受到保护,这点个是我个人的补充;那么,遇见ARP欺骗怎么办呢,最简单的方法当然是关闭ARP发送源。关于这个源头如何判定,我们根据原理并参照论坛的这个例子来解释一下:

 
  论坛问题地址http://bbs.ikaka.com/showtopic.aspx?page=end&topicid=8694034#10249187
 
  那么,从上面的理论来说,有可能是之前绑定静态规则的网关设备,即00-25-86-83-ED-4E中马,则它会发送IP192.168.1.1虚假MAC地址为00-13-D4-CB-A3-D3ARP欺骗包。当然,也会有人问那么难道不可能是MAC00-13-D4-CB-A3-D3中马并伪造网关呢,我认为也是可能的,当然从ARP欺骗包的MAC多半是虚构的情况,我们应该当先从下面的MAC开始查起,因为之前的静态规则我们可以肯定00-25-86-83-ED-4E这台设备在网络中是存在的,而00-13-D4-CB-A3-D3有可能则是局域里根本不存在的设备,当然我们排除了00-25-86-83-ED-4E的嫌疑之后,我们仍然需要排查MAC00-13-D4-CB-A3-D3的设备。
  最后呢,ARP欺骗实际是不能被完全防止和解决的,只要还用ARP协议一天,就会有ARP欺骗~
      文章的最后梅罗谢谢大家的捧场,希望对大家有用,祝大家新年快乐~
筠林碧湫 - 2010-2-10 20:33:00
太棒啦 很好的教程就是排版再好点就更好了
梅罗 - 2010-2-10 22:03:00
谢谢 可是写了贴上去编辑太卡了
小棉花ZY - 2010-3-4 19:43:00
梅罗同学,以前的时候吧,我的本本常会 卡卡上网助手的警示灯亮红 貌似被ARP攻击,很频繁的,后来又好了这是什么情况?
梅罗 - 2010-3-5 0:41:00
。与你同属于一网段内的机器有中了ARP木马向你发送arp欺骗包,然后么某天他主人良心发现恍然大悟杀毒了,自然就不攻击你了~
WangAnwu - 2010-3-5 16:43:00
这教程做得很好,就是没有视频那么直观.
海生 - 2010-3-25 16:06:00
呵呵,有兴趣的可以去搜搜我以前的帖子,可以了解更多一点
错爱如画 - 2010-4-7 20:35:00
写的不错 可以看下
云中飞燕333 - 2010-4-9 15:03:00
有视频没有啊,要是有视频就好了
1
查看完整版本: 【原创】帮你解读ARP欺骗