ARP详解

1  ARP协议概述  
  IP数据包常通过以太网发送,但是以太网设备并不识别32IP地址,它们是以48位以太网地址传输以太网数据包的。因此,IP驱动器必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映射,常常需要查看一张表。地址解析协议(Address Resolution ProtocolARP)就是用来确定这些映射关系的协议,位于TCP/IP协议栈中的低层,是 TCP/IP设计者利用以太网的广播性质设计出来的,主要特性和优点是它的位址对应关系是动态的﹐以查询的方式来获得 IP地址和MAC地址的对应。


2  ARP工作原理  
  2.1 ARP工作过程 
  1) 首先﹐每一台主机都会在 ARP Cache中建立一个 ARP表格﹐用来记录 IP地址和MAC地址的对应关系。这个 Table的每一条信息会根据自身的存活时间递减而最终消失﹐以确保信息的真实性。

  2) 当发送主机有一个封包要传送给目的主机并且获得目的主机的 IP 地址的时候﹐发送主机会先检查自己的 ARP表格中有没有与该 IP地址对应的MAC地址。如果有﹐就直接使用此地址来传送封包﹔如果没有﹐则向网络发出一个 ARP Request广播封包﹐查询目的主机的MAC地址。这个封包会包含发送端的 IP地址和MAC地址信息。

  3) 这时﹐网络上所有的主机都会收到这个广播封包﹐会检查封包的 IP 栏位是否和自己的 IP 地址一致。如果不是则忽略﹔如果是则会先将发送端的MAC地址和 IP资料更新到自己的 ARP表格去﹐如果已经有该 IP的对应﹐则用新的信息覆盖原来的﹔然后再回应一个 ARP Reply封包给对方﹐告知发送主机关于自己的MAC地址﹔

  4)当发送端接到 ARP Reply之后﹐也会更新自己的 ARP表格﹔然后就可以用此记录进行传送了。

  5) 如果发送端没有得到 ARP Reply ﹐则宣告查询失败。

  如图1所示,描述了ARP广播过程。

 

 

2.2 ARP 的查询过程

  前面说的 ARP表格﹐只有在 TCP/IP协议被载入内核之后才会建立﹐如果 TCP/IP协议被卸载或关闭机器﹐那么表格就会被清空﹔到下次协议载入或开机的时候再重新建立﹐而同时会向网络发出一个 ARP广播﹐告诉其它机器它的当前地址﹐以便所有机器都能保持最正确的资料。

  然而﹐ARP cache 的大小是有所限制的﹐如果超过了界限﹐那么越长时间没被使用过渡资料就必须清理掉﹐以腾出空间来储存更新的资料。所以﹐当机器收到 ARP equest 封包时﹐如果查询对象不是自己﹐则不会根据发送端位址资料来更新自己的 ARP 表格﹐而是完全忽略该封包。同时﹐每笔存在 cache 中的资料﹐都不是永久保存的﹕每笔资料再更新的时候﹐都会被赋予一个存活倒数计时值﹐如果在倒数时间到达的时候﹐该资料就会被清掉。然而﹐如果该资料在倒数时间到达之前被使用过﹐则计时值会被重新赋予。

  当然了﹐ARP尚有一套机制来处理当 ARP表格资料不符合实际地址资料的状况(例如﹐在当前连接尚未结束前﹐收到目的端的地址资料更新消息)﹔或是目的主机太忙碌而未能回答 ARP请求等状况。

 

2.3 ARP报文格式
  ARP报文被封装在以太网帧头部中传输,如图2所示,是ARP协议报文头部格式。

 

2.4 ARP高速缓存

    ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存,这个高速缓存放了最近Internet地址到硬件地址之间的映射记录,高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。我们可以通过arp -a或show arp来显示高速缓存中所有的内容

注意:ARP不能通过IP路由器发送广播,所以不能用来确定远程网络设备的MAC地址。对于目标主机位于远程网络的情况,IP利用ARP确定默认网关(路由器)的MAC地址,并将数据包发到默认网关,由路由器按它自己的方式转发数据包。

 

3 反向ARP  
  反向ARPReverse ARPRARP)用于把物理地址(MAC地址)转换到对应的 IP 地址。例如,在无盘工作站启动的时候,因为无法从自身的操作系统获得自己的IP地址配置信息。这时,无盘工作站可发送广播请求获得自己的IP地址信息,而RARP服务器则响应IP请求消息-为无盘工作站分配1个未用的IP地址(通过发送RARP应答包)。  
  RARP在很大程度上已被BOOTPDHCP所替代,后面这两种协议对RARP的改进是可以提供除了IP地址外的其它更多的信息,如默认网关、DNS服务器IP地址等信息。 

RARP的查询过程

  首先是查询主机向网络送出一个 RARP Request广播封包﹐向别的主机查询自己的 IP。在时候﹐网络上的 RARP服务器就会将发送端的 IP 地址用 RARP Reply封包回应给查询者。这样查询主机就获得自己的 IP地址了。

  不过与ARP不同的是﹐查询主机将 RARP Request封包发送之后﹐可能得到的 RARP Reply会不止一个。因为网络上可能存在不止一台 RARP服务器(基于备份和分担考量﹐极有可能如此设计)﹐那么﹐所有收到 RARP请求的服务器都会尝试向查询主机作出 RARP Reply 回应。如果这样的话﹐网络上将充斥这种 RARP回应﹐做成额外的负荷。这时候﹐我们有两种方法来解决RARP的回应问题。

  第一种方法﹐为每一个做 RARP 请求的主机分配一主服务器﹐正常来说﹐只有主服务器才回做出 RARP 回应﹐其它主机只是记录下接收到 RARP 请求的时间而已。假如主服务器不能顺利作出回应﹐那么查询主机在等待逾时再次用广播方式发送 RARP 请求﹐其它非主服务器假如在接到第一个请求后很短时间内再收到相同请求的话﹐才会作出回应动作。

  第二种方法也很类似﹕正常来说﹐主服务器当收到 RARP 请求之后﹐会直接作出回应﹔为避免所有非主服务器同时传回 RARP 响应﹐每台非主服务器都会随机等待一段时间再作出回应。如果主服务器未能作出回应的话﹐查询主机会延迟一段时间才会进行第二次请求﹐以确保这段时间内获得非主服务器的回应。当然﹐设计者可以精心的设计延迟时间至一个合理的间隔。

 

4 代理ARP  
  代理ARP(PROXY ARP)也被称作混杂ARP(Promiscuous ARP)(RFC 925、1027)一般被像路由器这样的设备使用--用来代替处于另一个网段的主机回答本网段主机的ARP请求。 
  下面是代理ARP的应用之一,如图5所示,主机PC1(192.168.20.66/24)需要向主机PC2(192.168.20.20/24)发送报文,因为主机PC1不知道子网的存在且和目标主机PC2在同一主网络网段,所以主机PC1将发送ARP请求广播报文请求192.168.20.20的MAC地址。这时,路由器将识别出报文的目标地址属于另一个子网(注意,路由器的接口IP地址配置的是28位的掩码),因此向请求主机回复自己的硬件地址(0004.dd9e.cca0)。之后,PC1将发往PC2的数据包都发往MAC地址0004.dd9e.cca0(路由器的接口E0/0),由路由器将数据包转发到目标主机PC2。(接下来路由器将为PC2做同样的代理发送数据包的工作)。这种ARP使得子网化网络拓扑对于主机来说时透明的(或者可以说是路由器以一个不真实的PC2的MAC地址欺骗了源主机PC1)。

 

5 无故ARP(免费ARP)  
  无故(Gratuitous ARP,GARP)ARP也称为无为ARP。主机有时会使用自己的IP地址作为目标地址发送ARP请求。这种ARP请求称为无故ARP,GARP,主要有两个用途:  
  (1)检查重复地址(如果收到ARP响应表明存在重复地址)。  
  (2)用于通告一个新的数据链路标识。当一个设备收到一个arp请求时,发现arp缓冲区中已有发送者的IP地址,则更新此IP地址的MAC地址条目。

 

6. 应用举例

这里进行的操作是在linux系统下进行的,Windows环境基本相同,可以在命令窗口下输入arp直接进行查询.

基本命令

arp -a [ ip-address ]:表示显示ARP映射表。如果在arp -a命令中没有指定IP地址,则缺省显示全部ARP映射表。

arp -d ip-address : 表示删除ARP映射项。

arp -s ip-address ether-address [ temp ] :表示增加ARP映射项。ip-addressARP映射项的IP地址,为点分十进制格式。 ether-addressARP映射项的以太网MAC地址,格式为XX-XX-XX-XX-XX-XX,其中XX为十六进制数。temp表示增加的映射项为临时,有效时间为20ms,否则将在路由器工作时间内永远有效(可选)。如果配置静态映射项时没有指定temp选项,则缺省为永远有效。

需要注意arp静态条目与动态条目的区别。在不同的系统中,手工设置的arp静态条目是有区别的。在linuxwin2000中,静态条目不会因为伪造的arp响应包而改变,而动态条目会改变。而在win98中,手工设置的静态条目会因为收到伪造的arp响应包而改变.

一般情况下,ARP映射表由动态ARP协议维护,在特殊情况下,才需要手工配置。另外ARP映射表只用于局域网内,对于广域网的地址解析,有其它的配置或获取方法(如帧中继的逆向地址解析)。

clear arp-cache:清空ARP映射表。在某些情况下,需要清空并更新ARP映射表,这时可以用arp -d逐条删除,也可以用clear arp-cache命令一次清空。

show arp :显示ARP映射表。

 

7. ARP欺骗

在实现TCP/IP协议的网络环境下,一个ip包走到哪里,要怎么走是靠路由表定义,但是,当ip包到达该网络后,哪台机器响应这个ip包却是靠该ip包中所包含的硬件mac地址来识别。也就是说,只有机器的硬件mac地址和该ip包中的硬件mac地址相同的机器才会应答这个ip包,因为在网络中,每一台主机都会有发送ip包的时候,所以,在每台主机的内存中,都有一个 arp--> 硬件mac 的转换表。通常主机在发送一个ip包之前,它要到该转换表中寻找和ip包对应的硬件mac地址,如果没有找到,该主机就发送一个ARP广播包,于是,主机刷新自己的ARP缓存。然后发出该ip包。

了解这些常识后,现在就可以谈在以太网络中如何实现ARP欺骗了.

 

7.1同一网段的ARP欺骗

如图所示,三台主机

A: ip地址 192.168.0.1硬件地址 AA:AA:AA:AA:AA:AA
B: ip
地址 192.168.0.2 硬件地址 BB:BB:BB:BB:BB:BB
C: ip
地址 192.168.0.3 硬件地址 CC:CC:CC:CC:CC:CC

一个位于主机B的入侵者想非法进入主机A,可是这台主机上安装有防火墙。通过收集资料他知道这台主机A的防火墙只对主机C有信任关系(开放23端口(telnet))。而他必须要使用telnet来进入主机A,这个时候他应该如何处理呢?

我们这样考虑,入侵者必须让主机A相信主机B就是主机C,如果主机A和主机C之间的信任关系是建立在ip地址之上的。如果单单把主机Bip地址改的和主机C的一样,那是不能工作的,至少不能可靠地工作。如果你告诉以太网卡设备驱动程序,自己IP192.168.0.3,那么这只是一种纯粹的竞争关系,并不能达到目标。我们可以先研究C这台机器,如果我们能让这台机器暂时当掉,竞争关系就可以解除,这个还是有可能实现的。在机器C当掉的同时,将机器Bip地址改为192.168.0.3,这样就可以成功的通过23端口telnet到机器A上面,而成功的绕过防火墙的限制.

上面的这种想法在这种情况下是无效的,如果主机A和主机C之间的信任关系是建立在硬件地址的基础上。这个时候还需要用ARP欺骗的手段让主机A把自己的ARP缓存中的关于192.168.0.3映射的硬件地址改为主机B的硬件地址.

我们可以人为的制造一个arp_reply的响应包,发送给想要欺骗的主机,这是可以实现的,因为协议并没有规定必须在接收到arp_echo后才可以发送响应包.这样的工具很多,我们也可以直接用snifferpro抓一个arp响应包,然后进行修改.也人为地制造这个包。可以指定ARP包中的源IP、目标IP、源MAC地址、目标MAC地址.

这样你就可以通过虚假的ARP响应包来修改主机A上的动态ARP缓存达到欺骗的目的

下面是具体的步骤:

他先研究192.0.0.3这台主机,发现这台主机的漏洞。

1)        根据发现的漏洞使主机C当掉,暂时停止工作。

2)        这段时间里,入侵者把自己的ip改成192.0.0.3

3)        他用工具发一个源ip地址为192.168.0.3MAC地址为BB:BB:BB:BB:BB:BB的包给主机A,要求主机A更新自己的arp转换表

4)        主机更新了arp表中关于主机Cip-->mac对应关系

5)        防火墙失效了,入侵的ip变成合法的mac地址,可以telnet

上面就是一个ARP的欺骗过程,这是在同网段发生的情况,但是,提醒注意的是,在BC处于不同网段的时候,上面的方法是不起作用的.

 

7.2 不同网段的ARP欺骗

所示AC位于同一网段而主机B位于另一网段,三台机器的ip地址和硬件地址如下:

A: ip地址 192.168.0.1硬件地址 AA:AA:AA:AA:AA:AA
B: ip
地址 192.168.1.2硬件地址
BB:BB:BB:BB:BB:BB
C: ip
地址 192.168.0.3硬件地址 CC:CC:CC:CC:CC:CC

在这种下,位于192.168.1网段的主机B如何冒充主机C欺骗主机A呢?显然用上面的办法的话,即使欺骗成功,那么由主机B和主机A之间也无法建立telnet会话,因为路由器不会把主机A发给主机B的包向外转发,路由器会发现地址在192.168.0.这个网段之内.

现在就涉及到另外一种欺骗方式―ICMP重定向。把ARP欺骗和ICMP重定向结合在一起就可以基本实现跨网段欺骗的目的.

ICMP重定向报文是ICMP控制报文中的一种。在特定的情况下,当路由器检测到一台机器使用非优化路由的时候,它会向该主机发送一个ICMP重定向报文,请求主机改变路由。路由器也会把初始数据报向它的目的地转发.

我们可以利用ICMP重定向报文达到欺骗的目的.

 下面是结合ARP欺骗和ICMP重定向进行攻击的步骤:

1)        为了使自己发出的非法ip包能在网络上能够存活长久一点,开始修改ip包的生存时间ttl为下面的过程中可能带来的问题做准备。把ttl改成255. (ttl定义一个ip包如果在网络上到不了主机后,在网络上能存活的时间,改长一点在本例中有利于做充足的广播)

2)        下载一个可以自由制作各种包的工具(例如hping2

3)        然后和上面一样,寻找主机C的漏洞按照这个漏洞当掉主机C

4)        在该网络的主机找不到原来的192.0.0.3后,将更新自己的ARP对应表。于是他发送一个原ip地址为192.168.0.3硬件地址为BB:BB:BB:BB:BB:BBARP响应包。

5)        现在每台主机都知道了,一个新的MAC地址对应192.0.0.3,一个ARP欺骗完成了,但是,每台主机都只会在局域网中找这个地址而根本就不会把发送给192.0.0.3ip包丢给路由。于是他还得构造一个ICMP的重定向广播。

6)        自己定制一个ICMP重定向包告诉网络中的主机:到192.0.0.3的路由最短路径不是局域网,而是路由,请主机重定向你们的路由路径,把所有到192.0.0.3ip包丢给路由。

7)        主机A接受这个合理的ICMP重定向,于是修改自己的路由路径,把对192.0.0.3的通讯都丢给路由器.

8)        入侵者终于可以.在路由外收到来自路由内的主机的ip包了,他可以开始telnet到主机的23

其实上面的想法只是一种理想化的情况,主机许可接收的ICMP重定向包其实有很多的限制条件,这些条件使ICMP重定向变的非常困难.

TCP/IP协议实现中关于主机接收ICMP重定向报文主要有下面几条限制:

1)        新路由必须直达

2)        重定向包必须来自屈枉目标的当前路由

3)        重定向包不能通知主机用自己作路由

4)          被改变的路由必须是一条间接路由

由于有这些限制,所以ICMP欺骗实际上很难实现。

 

7.3 ARP欺骗的防御

知道了ARP欺骗的方法和危害,我们给出一些初步的防御方法:

1)        不要把安全信任关心建立在ip地址或者mac地址的基础上(RARP同样存在欺骗问题),理想的关系应该是ip+mac;

2)        设置静态的mac->ip映射,不要让主机刷新设置好的arp转换表.

3)        停止使用arp,arp作为永久条目保存在对应表中.linux下可以用ifconfig –arp使得网卡驱动停用arp.

4)        使用代理网关发送上行数据.

5)        修改系统配置拒收ICMP重定向报文.

linux下可以通过在防火墙上拒绝ICMP重定向报文或者是修改
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值