一、arp协议简介
一个工作在二层的三层协议,事一个2.5层协议
ARP协议地址解析协议,将一个已知的Ip地址解析为MAC地址,从而进行二层数据交互
二、工作流程
1、两个阶段
- ARP请求
- ARP响应
两台主机IP地址主机A和主机B,IP地址和MAC地址如图所示:主机A发送数据给主机B会先发送给ARP请求报文给主机B,主机B收到请求后会给主机A发送响应即ARP响应。
主机A发送数据给主机B,首先要知道主机B的IP地址,主机A在数据封装的时候会进行三层封装和二层封装,三层封装会将源IP和目的IP封装进去,二层封装会将源MAC地址和目的MAC地址封装进去,主机A初始不知道目的MAC地址,是以广播的MAC地址00-00,以广播的方式发送请求。响应的时候是单播。 - ARP请求很简单就是一个请求一个响应,由于很简单所以会造成不安全的因素,就比如你广播发送出去数据,中间有个人冒充主机B及性能响应就会造成ARP欺骗。
2、实验
ARP请请求和响应的过程
主机A(192.168.2.12)和主机B(192.168.2.16)
- 打开主机B的winshark,并在主机A上ping主机B(192.168.2.16)
ARP报文:一个是ARP请求报文一个是ARP响应报文
(1)ARP请求报文
显示出来目标的MAC地址是一个广播地址,源MAC地址是主机A(192.168.2.12)、Type类型是0x0806
整体的ARP请求里面的在整体内容,这里有源MAC地址和目标MAC地址,因为目标MAC地址它不知道所以用全零来填充。上面的destination是broadcast广播。
(2)ARP响应报文
主机B(192.168.2.16)收到之后会进行响应
ARP请求里面源MAC是自己,目的MAC是对方。
3、ARP协议报文
(1)ARP报文格式
- 以太网的数据帧格式是这样的
目的MC、接着是源MAC,帧的类型,中间是网络层的数据包,后面是帧校验 - 对比ICMP报文,可以看到数据链路层下来是网络层,但是ARP协议是二层之后就到了ARP协议,没有网络层。
目的MC、接着是源MAC,帧的类型,中间是ARP的数据包,后面是帧校验
(2)ARP数据帧
- ARP报文数据帧格式:
- 硬件类型
- 协议类型
- 硬件地址长度
- 协议地址长度
- Opcode操作类型标识报文时请求报文还是响应报文,1代表请求 2代表响应
- 发送方MAC地址
- 发送方IP地址
- 接收方的MAC地址
- 接收方的IP地址
4、ARP缓存
主要目的是为了避免去重复发送ARP请求
(1)windows的ARP命令
重新抓取流量就不会有ARP请求和响应的报文了,因为主机中存在了ARP缓存
- 使用arp -a命令可以查看arp缓存
- arp -d清空缓存
下一次访问会重新发送ARP请求。通过请求和响应的出来的是动态学习到的
- 使用arp -s命令可以静态绑定
(2)思科设备GNS3
c3600设备三台,改变图标为两台主机一台交换机
- PC1 ping PC2、关闭交换机路由功能
R2#
R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#no ip routing
R2(config)#int f0/0
R2(config-if)#ip add 192.168.2.1 255.255.255.0
R2(config-if)#no shut
R2(config-if)#hostname PC1
PC2(config)#
R3#
R3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#no ip routing
R3(config)#int f0/0
R3(config-if)#ip add 192.168.2.2 255.255.255.0
R3(config-if)#no shut
R3(config-if)#
*Mar 1 00:03:54.163: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar 1 00:03:55.163: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R3(config-if)#hostname PC2
PC2(config)#
R1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R1(config)#hostname SW
SW(config)#
SW(config)#no ip routing
SW(config)#
- PC1pingPC2
- show arp
- clear arp
- 永久绑定(直接绑定的还没有通信)
- 清除静态绑定的
- 静态绑定虚假MAC地址成功
ping 不通目标主机,给虚假的MAC地址发信息目标主机收不到。
- 引出安全性因素
主机C想主机A响应虚假MAC地址,主机A学习到了主机C响应的虚假的MAC地址,主机A就会想虚假的MAC地址发信息,主机A无法通信,这就是ARP攻击。
场景:主机C响应给主机A自己的MAC地址,造成主机A误认为主机C是主机B,当主机A给主机B发送消息的时候就会发送给主机C。主机C截获主机A发给主机B的数据,这就是ARP欺骗。
三、ARP攻击和ARP欺骗
1、ARP攻击
伪造ARP应答向被攻击主机和网关响应虚假的MAC地址
当被攻击主机进行网络通信时,会将数据交给虚假的MAC地址进行转发,由于虚假的MAC地址不存在,所以造成被攻击主机无法访问网络。
示例:
主机A发送arp请求在整个网络中进行广播,当主机收到ARP请求会进行响应,此时发送方主机就学习到目的主机的MAC地址。若主机C伪造ARP应答,向被攻击主机响应虚假的MAC地址就实施了ARP攻击。
当被攻击主机进行网络通信时,会将数据交给虚假的MAC地址进行转发,由于虚假的MAC地址不存在,所以造成被攻击主机无法访问网络。
主机A访问公网,首先会向网络中发送ARP请求,主机B主机C和路由器都能够收到ARP请求,正常的当路由器收到主机A数据发现主机A请求得路由器得IP地址会进行响应,如果此时主机C(攻击主机)向主机A响应虚假得MAC地址,造成主机无法进行网络通信。
2、 ARP欺骗
(1)欺骗网关
- 伪造ARP应答,向被攻击主机和网关响应真实的MAC地址
- 当被攻击主机进行网络通信时,会将数据交给真实的MAC地址进行转发,从而截获被攻击主机的数据。这时被攻击主机时可以进行网络通信的。
主机A访问互联网会将数据交给自己的出口路由器,攻击主机C向主机A发送ARP应答,响应自己的MAC地址给主机A,主机A访问公网的时候就会将数据给到主机C,还要在攻击主机上开启ARP转发的功能,主机C向出口路由器发送ARP应答,告诉出口路由器主机A的MAC地址时主机C自己的MAC地址从而实现数据监听。
(2)欺骗主机
- 伪造ARP应答向被攻击主机和网关响应真实的MAC地址
- 当被攻击主机进行主机通信时,会将数据交给真实的MAC地址进行转发,从而截获被攻击主机的数据。
主机A发送数据给主机B,主机C向主机A发送应答,主机C向主机发应答
3、避免ARP攻击/欺骗
- ARP防火墙
- 主机上进行ARP静态绑定(设备基本都有此功能)