![9712687488e83a565b22f2a60fd86f7a.png](https://i-blog.csdnimg.cn/blog_migrate/5a077805412c64705288dac651f77020.jpeg)
ARP欺骗是一种非常古老的电子欺骗攻击,虽然从诞生到现在已经过去了二十多年,但在很多网络中仍然有效。之前写的
沈传宁:谈谈TCP/IP协议的学习zhuanlan.zhihu.com![ff02826d956178f935b24a4bb8790d04.png](https://i-blog.csdnimg.cn/blog_migrate/c034b458a0de7fa98acbcf27ef72b35b.jpeg)
文章中也提到,我第一次接触的网络攻击就是ARP欺骗攻击,利用ARP欺骗成为全网电脑的“网关”,然后在通过转发数据报文到真正的网关,从而成为全网计算机上网的“中间人”,实现对全网计算机的上网控制。要理解ARP欺骗原理,我们首先要了解ARP协议的工作机制,我在之前的文章已经说过了,如果了解了协议的工作机制,对攻击的实现就不难理解了。
一、ARP协议工作机制
ARP是地址解析协议,是将IP地址解析成MAC地址的协议。为什么要解析MAC地址?
如果理解了OSI模型分层机制,了解封装与分用的概念,就很好理解了。一个数据在发送前要进行逐层的封装,你可以用现实的一个例子来想象:你给国外一个朋友寄一个手机作为生日礼物,这个寄出去的手机就是数据。那么这个手机快递公司会装到一个纸盒中。然后多个纸盒会打包成一个大邮包,然后多个邮包可能打包成一个更大的邮包,最终装在一个集装箱中用飞机或者船运出去。这个过程就是封装。数据的发送也是这样,一个数据包发送前需要在传输层进行封装,然后送到互联网络层进行封装,最后是送到网络接口层进行封装。传输层封装的寻址地址是端口,互联网络层封装的寻址是IP地址,而网络接口层寻址就是MAC地址。很多时候我们访问操作的时候其实只是指定了目的端的IP地址,例如执行
ping 192.168.1.1
这个命令时,你只告诉了计算机要ping的IP地址,可是数据发送出去进行封装时需要知道发送的目的MAC地址,这样才能在网络接口层封装时将目的MAC地址封装到数据包头部中,然后发送出去,交换机看到这个MAC地址,才知道要把数据包交给谁。如何获得192.168.1.1的 MAC地址?这就是ARP协议的作用。
当你在计算机上输入ping 192.168.1.1命令,并且敲了回车后, 计算机做了什么呢?
1)计算机会向全网广播发出一个ARP请求报文,这个请求报文你可有理解为其实是问,谁是192.168.1.1这个IP地址的拥有者。
2)拥有这个IP地址的计算机在收到这个请求报文的时候,会回应一个ARP应答报文,在这个应答报文里边会给出自己的MAC地址。
3)询问的计算机收到了这个应答报文之后就知道了192.168.1.1这台计算机对应的MAC地址。为了避免每发一个数据包就问一次,询问计算机会把收到的这个MAC地址给记下来,也就是放在缓存里。那么下一次他再要去发数据包的时候,缓存地址里已经有了192.168.1.1这个IP地址对应的MAC地址,那么他就不需要再去问了,直接从缓存里取出来进行封装。
这就是ARP协议的工作过程。下面这张图就是计算机上ARP表,也就是ARP缓存。
![9a605854ad108d5fda6d9dc4498f350b.png](https://i-blog.csdnimg.cn/blog_migrate/d2efa2797e0ae76725c5e9acd824d6fe.jpeg)
二、 ARP欺骗的原理
如果对ARP有所了解,应该清楚ARP有两个特点。
第一是ARP是无状态的协议,所谓无状态的意思就是我不一定要你问我,我才能应答,我可以主动去回答。局域网里的计算机可以主动发ARP应答报文到其他的计算机那里去。
第二操作系统对ARP的实现上,ARP的缓存是可以动态刷新的,也就是说当一个ARP应答过来的时候,它会把原来已有的应答给刷新掉。
把这两个特点理解了,那么ARP欺骗你就很容易理解了,攻击者要做的就是伪造ARP应答去刷新其他计算机里边的ARP缓存。
![6bdd961f2d1e090df114030678c21265.png](https://i-blog.csdnimg.cn/blog_migrate/3fdc02bf9bd3a831111da57f718f1e5c.jpeg)
我们可以参考上面这张图,我们可以看到攻击者C发出了一个伪造的ARP应答报文。我们可以看到这个伪造的ARP应答报文指定的MAC地址是他自己的,但是IP地址是192.168.1.1,并不是他自己的。这样的应答报文被收到以后,我们可以看到计算机会把它放到缓存里。这时候在计算机B上就形成了一个错误的ARP缓存。192.168.1.1这个IP地址在缓存中的ARP表中对应的MAC地址是c的地址。那么当计算机b要给192168.1.1发送数据包的时候,它在网络接口层进行封装的时候,封装的MAC地址按照错误的缓存,封装的目的MAC地址是攻击者192168.1.3这台计算机的MAC地址,标准的交换机是2层设备,会按照MAC地址来分发数据包,也就是说这个数据包会被交换机交给攻击者计算机192.168.1.3。
也就是说攻击者成功的欺骗了计算机B,让计算机B以为它是192.168.1.1。
![de43ba0db883c6e2c5613ca2d3a31a35.png](https://i-blog.csdnimg.cn/blog_migrate/399f31b8ea7ba645d367d947b04edc21.jpeg)
如上图,如果攻击者在做一个数据包的转发,这就是我在《谈谈TCP/IP协议的学习》这篇文章里介绍的中间人攻击。
三、如何防御
关于ARP欺骗的具体实现我就不介绍了,有很多工具可以帮助你实现,例如 KALI Linux里边arpspoof。这些只是敲几个命令而已。
理解了原理,如何防御,我想也很容易理解了。
1)使用三层交换
刚才我们谈到之所以ARP欺骗能成功,是因为标准的交换机是二层的设备,会使用MAC地址来分发数据包,如果使用三层交换设备,那么三层交换机会使用IP地址来进行数据包的分发,也就意味着即使ARP欺骗使得封装了错误的MAC地址也没问题。因为三层交换机使用三层的地址,也就是IP地址来分发数据包。所以不会受到aIP欺骗的影响。
2)使用静态的ARP缓存
在计算机终端上通过ARP -s这个命令生成静态的APP缓存,也就是这个缓存不可修改。那么攻击者伪造的aIP应答报文就无法更改缓存了,也就没法完成ARP欺骗。但是这种方法对于局域网当中有较多的终端的情况下不太适用,因为要手工管理这么多的计算机MAC地址和IP地址,这是非常麻烦的一件事。
3)使用ARP防火墙
为了应对ARP欺骗,很多计算机终端都可以安装第三方的软件ARP防火墙。这种ARp防御工具可以帮助抵御ARb欺骗。
4)划分子网
划分子网也能帮助我们比较好的抵御ARP欺骗,因为ARP不跨路由,除非特殊情况下路由器设置了进行ARP代理。因此ARP欺骗只能对同一网段的其他计算机进行,划分子网就能更好的降低ARP欺骗攻击的风险。