代理ARP:合法的MAC欺诈技术


代理ARP:合法的MAC欺诈技术

文章插图
OSI七层模型
根据OSI七层网络模型 , 任何设备要和另外一台设备通信时 , 都必须要知道对方的mac地址 。不然就没有办法在链路层封装数据 , ARP就是用来自动获取MAC地址的一种技术 。基本的ARP工作原理比较简单 , 我想大家之前肯定已经有所了解 , 在这里我们就不在累述了 , 今天要介绍的是ARP的一个变种:Proxy ARP , 即代理ARP 。
我们先来看看代理ARP的定义和适用场景:
定义:一个设备 , 通常是一台路由器 , 如果发现收到的ARP请求地址在不同的子网 , 就会以自己的MAC地址来回复ARP请求 , 这个ARP回复报文就被称作Proxy ARP 。
适用场景:没有配置网关的终端(PC)想要访问不在同一个subnet的其它的设备时 , 就需要启用路由器的代理ARP功能 。
下面咋们以一个完整的例子来解释代理ARP工作原理 。
拓扑和说明
代理ARP:合法的MAC欺诈技术

文章插图
拓扑
  1. PC1和PC2在网段A中 , 它们的网络地址分别是10.1.0.0/16,10.1.1.0/24.
  2. PC3和PC4在网段B中 , 它们的网络地址是10.1.2.0/24
  3. 4台PC都只配置了IP地址 , 没有配置网关
  4. PC1想要访问PC3
?验证过程
步骤1:PC1的地址为10.1.1.1/16 , 则它会认为与之相连的subnet上所有的PC的网段都是10.1.0.0 , 即当PC1想和PC3通信时 , 它认为PC3的subnet也是10.1.0.0/16 , 所以它会向路由器发送ARP请求 , 以便获得PC3的MAC地址 。
PC1发送的ARP请求内容如下:
代理ARP:合法的MAC欺诈技术

文章插图
ARP请求
步骤2:路由器收到PC1发送的ARP请求报文 , 却不会直接转发给PC3:因为路由器在默认情况下不会转发广播报文 , 更不会回复了 , 而ARP也是广播报文的一种 。
步骤3:如果路由器启用Proxy ARP , 此时才会回复ARP报文 。
  1. 路由器把自己的接口E0的MAC地址回复给PC1 , 告诉PC1 , 自己就是PC3 , 这是一种伪装技术(欺诈) 。
  2. 路由器为什么可以进行伪装呢?因为路由器知道PC3的地址是10.1.2.3 , 并且知道它的网段是10.1.2.0/24 。既然能找到PC3 , 就可以做流量的中转 。
  3. 路由器发送的ARP答复报文就称为proxy ARP , 其主要表项如下:

代理ARP:合法的MAC欺诈技术

文章插图
ARP应答
步骤4:PC1收到ARP以后 , 就会更新自己的ARP表, 此时PC1并不知道自己被欺诈了 , 它认为是一个正常的ARP答复报文 。
PC1的ARP表项:
代理ARP:合法的MAC欺诈技术

文章插图
ARP表项
步骤5:PC1有了这个ARP表项以后 , 以后所有发送给PC3的报文,目的MAC都会使用路由器E0接口的MAC地址来封装, 然后由路由器将这个报文转发给PC3 , 这样它们就能够正常通信了 。
步骤6:如果PC1还想和PC4通信 , 也会触发Proxy ARP , 最后形成如下的ARP表项
代理ARP:合法的MAC欺诈技术

文章插图
ARP表项
可以看到 , PC3和PC4对应的MAC地址都是路由器E0接口的MAC.
小经验:如果我们在工作中看到这种多个IP地址映射到同一个MAC地址的情况 , 基本上就可以断定这个网络中启用了代理ARP 。
代理ARP缺点
现在大家在工作中 , 基本上不会用到Proxy ARP了 , 因为它的适用场景太单一了 。尤其是不需要配置网关这一条 , 咋们基本上遇不到 , 因为正常我们的PC获取地址都是有网关的 , 和外界通信都是通过网关进行的 。
除了场景单一以外 , Proxy ARP还有如下的缺点:
  1. 它会增加网络上的ARP报文流量 , 因为PC每访问一个设备 , 都需要发送ARP请求;
  2. PC需要会维护一张很大的ARP表:需要保存所有要访问设备的MAC;
  3. ARP地址欺诈:涉及到安全问题 , 在网络中的任何一台设备能够宣称自己是路由器的接口 , 回复PC的ARP请求 。这样就可以发起中间人攻击 , 获取用户数据等 。


推荐阅读