网络安全基础之ARP攻击和防御

  信息安全

前言

在看这篇文章之前,请大家先看下交换机的工作原理,不知大家有没有想过数据链路层中头部协议数据帧的目的MAC地址是如何获取的呢?这就是今天的主角ARP协议,通过广播来获取IP地址对应的MAC地址。

问:广播有很多种,交换机可以广播,ARP协议可以广播,IP地址可以广播等等,有啥区别吗?
答:交换机广播和ARP协议广播比较容易混淆,因为都是交换机上发生的事情,下面我们来看下这部分,IP地址广播请看路由部分博客

交换机广播

上图会在下面阐述ARP原理和攻击的时候同样用到 ,结合上图我们来看下交换机广播的场合:

现做出如下假设:三个小圆圈表示局域网内的三台网络设备,IP地址分别为10.0.0.1、10.0.0.2、10.0.0.3;MAC地址分别为AA、BB、CC(简写,实际MAC长度为6个字节)。长方形表示AA设备向CC设备通信时准备发送的数据帧。

  1. 设备AA将数据发送到交换机1;
  2. 交换机解析数据帧,获取目标MAC,查询MAC地址表,但是MAC地址表中没有查到设备CC的MAC地址和交换机接口的关系,这个时候交换机为了知道谁的MAC是CC,则需要广播,即交换机向每个端口都发送一份数据帧;
  3. MAC地址不是CC的设备会忽略收到的数据帧,而MAC为CC的设备会接受数据帧,进行下一步处理。

总结:交换机只在MAC地址表没有目标MAC的时候才会广播

问:一开始长方形中的CC设备的MAC地址是怎么知道的呢?
答:这就是接下来要讲的ARP协议的工作

ARP协议

还是以上图交换机的原理图为例,来分析下ARP协议的原理,现在做出假设长方形中的CC设备MAC地址AA设备一开始不知道,来分析下获取CC设备MAC地址的流程:

  1. 数据帧中一开始因为不知道CC设备的MAC地址,这个时候需要将目标MAC地址填充为FF-FF-FF-FF-FF-FF
  2. 假设工作在局域网,交换机解析数据帧,获取到目标MAC地址为FF-FF-FF-FF-FF-FF,交换机会自动广播,将数据帧发送给局域网内的每台设备
  3. 局域网内的所有设备解析数据帧,获取到MAC地址为FF-FF-FF-FF-FF-FF,即便不是自己的MAC地址所有设备也会解析数据帧。目标IP是自己的设备,则会封装数据帧返回给发送者,并告知发送方自己的MAC地址;如果目标IP不是自己,则相应的设备会丢弃数据帧
  4. 收到CC设备的MAC后,AA设备会缓存到ARP缓存表。原因是为了避免下次发送数据给CC设备的时候,还要再次使用ARP协议去获取MAC地址

总结ARP协议原理:
1、发送ARP广播请求,请求内容为我是xxx,我的MAC是xxx,IP是xxx的MAC是多少?
2、接受ARP单播应答

问:ARP缓存表怎么看?
答:arp /help可以查看ARP相关的信息,arp /a可以查看本台计算机的arp表数据,如下图所示:

ARP攻击

还是以上图交换机的原理图为例,来分析下ARP协议的攻击,现在假设长方形中的CC设备的MAC地址AA设备一开始不知道,并假设BB为攻击设备:

  1. 数据帧中因为不知道CC设备的MAC地址,这个时候需要将目标MAC地址填充为FF-FF-FF-FF-FF-FF
  2. 假设工作在局域网,交换机解析数据帧,获取到目标MAC地址为FF-FF-FF-FF-FF-FF,交换机会自动广播,将数据发送给局域网内的每台设备
  3. 局域网内的所有设备解析数据帧,获取到MAC地址为FF-FF-FF-FF-FF-FF,即便不是自己的MAC地址所有设备也会解析数据帧。目标IP是自己的设备,则会封装数据帧返回给发送者,并告知发送方自己的MAC地址;如果目标IP不是自己,则相应的设备会丢弃数据帧。但是这个时候BB为攻击设备,即便数据帧中目标IP不是自己,它会伪造自己的MAC地址,然后冒充CC设备做出ARP响应
  4. AA设备这时候会收到2个ARP响应信息,如果CC设备的ARP响应先到AA设备,BB设备后伪造的ARP响应会覆盖CC设备的ARP响应。那么此时AA设备将无法与CC设备通信,因为AA设备的ARP表中与CC设备IP对应关系的MAC是BB设备的MAC,IP与MAC不匹配是无法通信的。
问:如果上述流程中BB设备的ARP响应的信息先到AA设备,那么AA就可以与CC设备通信了吗?
答:BB设备可以连续构造ARP响应,只要AA设备再次发送ARP数据帧,BB设备也是可以攻击AA设备通信的

问:AA虽然无法与CC设备通信,但CC设备可以与AA正常通信吗?
答:可以的,因为CC设备没有遭到攻击,CC设备ARP表里存储的IP和MAC地址的关系是正确的

问:ARP攻击是必须通过单播响应才能出发吗?
答:广播也可以触发ARP攻击,而且范围更广。如果BB设备一直发送ARP广播,冒充自己是网关(即构造自己是网关的ARP响应),那么局域网内的所有设备(除了攻击者)的ARP表里网关的IP地址和MAC地址关系都将不正确,造成的影响是断网。

ARP欺骗

这次以ARP攻击的例子为前提,来分析下ARP协议的欺骗,我们对上述流程中第三步做如下改变:
1、局域网内的所有设备解析数据帧,获取到MAC地址为FF-FF-FF-FF-FF-FF,即便不是自己的MAC地址所有设备也会解析数据帧。目标IP是自己的设备,则会封装数据帧返回给发送者,并告知发送方自己的MAC地址;如果目标IP不是自己,则相应的设备会丢弃数据帧。但是这个时候BB为攻击设备,即便数据帧中目标IP不是自己,BB却还是用自己网卡真实的MAC地址,做出ARP响应。
2、然后BB在与CC正常通信,这个时候BB起到中间转发的作用,但是AA能与CC正常通信。BB设备可以实现监听、窃取、篡改、控制流量等目的,但不中断AA设备和CC设备通信

问:啥时候是ARP攻击,啥时候是ARP欺骗?
答:攻击者提供虚假报文的MAC就是ARP攻击,攻击者提供自己真实的MAC就是ARP欺骗

ARP防御

1、静态ARP绑定
ARP表的静态数据优先级高于动态数据,因此我们直接在ARP表内绑定IP和MAC的关系不会被动态ARP响应覆盖。还是以上图交换机的原理图为例,比如AA设备手动绑定网关的IP地址和MAC地址,那么AA设备即便遭到ARP攻击,也不会出现断网的情况。虽然会收到冒充自己是网关的ARP攻击响应,但是会置之不理。同样AA设备和CC设备互相通信,双方互相绑定了AA和CC设备的IP和MAC地址,这时候BB设备即使想进行ARP欺骗,也无法实现。

问:静态ARP绑定怎么感觉有点不方便呢?
答:为了防止遭到ARP攻击,需要收集所有要进行通信的设备IP和MAC,然后添加到自己的ARP表里面,更要命的是ARP表是存放在内存中,机器重启后需要重新输入所有设备的IP和MAC地址关系,相当麻烦。

2、硬件级ARP防御
上述静态ARP绑定的方式工作量太大,要想从根本上解决ARP攻击,还需要从交换机上下手。交换机原本工作在二层,只能识别数据帧,但是为了解决dhcp攻击和ARP攻击等,企业级交换机增加了解析其它上层协议的功能【当然相应的价格就贵了】。解决ARP攻击的方案是在交换机上绑定每个端口的IP(配合DHCP服务器)和MAC地址的关系。

  1. 第一次BB设备与交换机通信,交换机记录下BB设备的端口IP和MAC地址关系;
  2. 当BB设备攻击,冒充自己是CC的时候,假如想进行攻击,就需要伪造自己的MAC,那么交换机检测到MAC与原来的记录不一样就会进行拦截。假如想进行欺骗,势必需要冒充CC的IP才行,这时候交换机检测到IP与原来记录的IP不一样同样会把攻击拦截了。