一、ARP协议原理
地址解析协议(Address Resolution Protocol,ARP),负责把目的主机的IP 地址解析成目的MAC地址,地址解析的目标就是发现逻辑地址与物理地址的映射关系。网络中的计算机、交换机、路由器等都会定期维护自己的ARP缓存表。
为什么需要ARP?
在发送者给其他的网络设备发送数据的时候, 是以数据帧的形式发送的,数据帧是由源MAC地址和目的MAC地址组成的,如果发送者只知道目的主机的IP地址, 不知道目的主机的MAC地址, 就不能把这个数据包转化成数据帧发走。
如果发送者和接收者在同一个网络内,arp解析的就是接收者的MAC地址。如果发送者和接收者不在同一个网络内, arp解析的就是这个网络内网关的接口MAC地址。
ARP协议工作原理主要是ARP高速缓存(ARP cache)。ARP高速缓存就是一个映射表,它记录了IP地址和物理地址的映射关系。在实际传输中,通常已知下一跳的目的IP地址,通过查询ARP高速缓存即可知道对应的物理地址。
假设AA,BB,CC分别为PC1,PC2,PC3各自的MAC地址,且二层交换机只解封到帧数据包,也就是说,只认MAC地址(ARP是网络层协议)
当PC1向PC3发送data数据时,因为不知道PC3的MAC,会发送ARP广播来获取MAC地址。
ARP广播:目的MAC为FF,源MAC为AA,源IP为10.1.1.1,目的IP为10.1.1.3的数据包,PC2收到该数据包发现目的IP不是本机IP,丢弃;PC3收到后发现目的IP与本机IP一致,则给PC1发送单播ARP响应报文告知自己的MAC地址。
二、中间人攻击原理
假设PC2装了ARP攻击工具,其可以发送伪装的ARP报文,当PC1发送ARP广播:目的MAC为FF,源MAC为AA,源IP为10.1.1.1,目的IP为10.1.1.3的数据包后,PC3收到后会返回单播报文告知MAC(我是10.1.1.3我的MAC是CC),此时,PC1的ARP缓存表认为10.1.1.3映射的MAC为CC;然后PC2利用ARP工具也回复了同样的单播ARP响应报文告知MAC(我是10.1.1.3我的MAC是BB),此时,PC1的ARP缓存表认为10.1.1.3映射的MAC为BB(ARP缓存映射原则为谁后到达学谁),则前一条映射被覆盖。通常PC3的ARP响应报文只会回复一次,而PC2利用ARP攻击工具可以回复N次,所以PC1最后的ARP缓存映射必然是10.1.1.3映射的MAC为BB。
然后,PC1会发送数据包(目的MAC为BB,源MAC为AA,源IP为10.1.1.1,目的IP为10.1.1.3,data),交换机并不会解封装IP头,所以根据目的IP为BB,则将其发送至PC2,但因为PC3未收到该报文,则不会响应PC1。为了避免窃听被发现,当数据包(目的MAC为BB,源MAC为AA,源IP为10.1.1.1,目的IP为10.1.1.3,data)发送至PC2,PC2读取后,将数据包修改为(目的MAC为CC,源MAC为AA,源IP为10.1.1.1,目的IP为10.1.1.3,data)转发至PC3,PC3响应。同时,PC2也可以欺骗PC3,告知PC3(我是10.1.1.1,MAC为AA),那么PC3最后的ARP缓存映射是10.1.1.1映射的MAC为BB。最终,PC2可以窃取PC1与PC3之间的通信报文,即中间人攻击(ARP欺骗)。
另,当PC2发送ARP广播(目的MAC为FF,源MAC为BB,源IP为10.1.1.1,目的IP随意),那么接收到该广播的PC无论是否为目的IP主机,都会在自己的ARP缓存表映射10.1.1.1的MAC为BB,以此类推,修改源IP地址继续发送ARP广播(目的MAC为FF,源MAC为BB,源IP为10.1.1.2,目的IP随意),那么最终10.1.1.1-254映射的MAC都是BB。