ARP协议有啥用?带你全面了解ARP协议,利用Kali实现中间人攻击之ARP欺骗原理与实战教程

一、网关是什么?

首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一扇门。

Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程

网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能够通过数据链路进行转发。数据帧必须要包含目的MAC地址,因此发送端还必须获取到目的MAC地址。通过目的IP地址而获取目的MAC地址的过程由ARP(Address Resolution Protocol)协议来实现。

ARP数据包格式

ARP协议有啥用?带你全面了解ARP协议

PS:ARP报文不能穿越路由器,不能被转发到其他广播域

网络设备通过ARP报文来发现目的MAC地址。 ARP报文中包含以下字段

  1. Hardware Type表示硬件地址类型, 一般为以太网;
  2. Protocol Type表示三层协议地址类型, 一般为IP;
  3. Hardware Length和Protocol Length为MAC地址和IP地址的长度单位是字节;
  4. Operation Code指定了ARP报文的类型, 包括ARP request和ARP reply;
  5. Source Hardware Address指的是发送ARP报文的设备MAC地址;
  6. Source Protocol Address指的是发送ARP报文的设备IP地址;
  7. Destination Hardware Address指的是接收者MAC地址在ARPrequest报文中 该字段值为0;
  8. Destination Protocol Address指的是指接收者的IP地址。

ARP工作过程

ARP协议有啥用?带你全面了解ARP协议

主机A发送一个数据包给主机C之前,首先获取主机C的MAC地址。通过ARP协议, 网络设备可以建立目标IP地址和MAC地址之间的映射。网络设备通过网络层获取到目的IP地址之后, 还要判断目的MAC地址是否已知。

ARP缓存

ARP协议有啥用?带你全面了解ARP协议

网络设备一般都有一个ARP缓存(ARP Cache) , ARP缓存用来存放IP地址和MAC地址的关联信息。 在发送数据前, 设备会先查找ARP缓存表。 如果缓存表中存在对方设备的MAC地址, 则直接采用该MAC地址来封装帧, 然后将帧发送出去。 如果缓存表中不存在相应信息, 则通过发送ARP request报文来获得它。 学习到的IP地址和MAC地址的映射关系会被放入ARP缓存表中存放一段时间。 在有效期内, 设备可以直接从这个表中查找目的MAC地址来进行数据封装, 而无需进行ARP查询。 过了这段有效期, ARP表项会被自动删除。

如果目标设备位于其他网络, 则源设备会在ARP缓存表中查找网关的MAC地址, 然后将数据发送给网关, 网关再把数据转发给目的设备。

ARP请求

ARP协议有啥用?带你全面了解ARP协议

本例中,主机A的ARP缓存表中不存在主机C的MAC地址, 所以主机A会发送ARP request来获取目的MAC地址。 ARP request报文封装在以太帧里。 帧头中的源MAC地址为发送端主机A的MAC地址。 此时, 由于主机A不知道主机C的MAC地址, 所以目的MAC地址为广播地址FF-FFFF-FF-FF-FF。 ARP request报文中包含源IP地址、 目的IP地址、 源MAC地址、 目的MAC地址, 其中目的MAC地址的值为0。ARP Request报文会在整个网络上传播, 该网络中所有主机包括网关都会接收到此ARP request报文。 网关将会阻止该报文发送到其他网络上。

ARP响应

ARP协议有啥用?带你全面了解ARP协议

所有的主机接收到该ARP Request报文后, 会检查它的目的协议地址字段与自身的IP地址是否匹配。 如果不匹配, 则该主机将不会响应该ARP Request报文。 如果匹配, 则该主机会将ARP报文中的源MAC地址和源IP地址信息记录到自己的ARP缓存表中, 然后通过ARP Reply报文进行响应。

ARP协议有啥用?带你全面了解ARP协议

主机C会向主机A回应ARP Reply报文。 ARP Reply报文中的源协议地址是主机C自己的IP地址, 目标协议地址是主机A的IP地址, 目的MAC地址 是 主 机 A 的 MAC 地 址 , 源 MAC 地 址 是 自 己 的 MAC 地 址 , 同 时Operation Code被设置为reply。 ARP Reply报文通过单播传送。

ARP缓存

ARP协议有啥用?带你全面了解ARP协议

主机A收到ARP Reply以后, 会检查ARP报文中目的MAC地址是否与自己的MAC匹配。 如果匹配, ARP报文中的源MAC地址和源IP地址会被记录到主机A的ARP缓存表中。 ARP表项的老化超时时间缺省为1200秒

ARP代理

ARP协议有啥用?带你全面了解ARP协议

在上述例子的组网中,主机A需要与主机B通信时, 目的IP地址与本机的IP地址位于不同网络, 但是由于主机A未配置网关, 所以它将会以广播形式发送ARP Request报文, 请求主机B的MAC地址。 但是, 广播报文无法被路由器转发, 所以主机B无法收到主机A的ARP请求报文, 当然也就无法应答。

在路由器上启用代理ARP功能, 就可以解决这个问题。 启用代理ARP后, 路由器收到这样的请求, 会查找路由表, 如果存在主机B的路由表项, 路由器将会使用自己的G0/0/0接口的MAC地址来回应该ARP request。 主机A收到ARP reply后, 将以路由器的G0/0/0接口MAC地址作为目的MAC地址进行数据转发。

路由器启用代理ARP功能:在接口模式下执行如下命令

arp-proxy enable

免费ARP

免费ARP是用来探测IP地址是否冲突。

ARP协议有啥用?带你全面了解ARP协议

主机被分配了IP地址或者IP地址发生变更后, 必须立刻检测其所分配的IP地址在网络上是否是唯一的, 以避免地址冲突。 主机通过发送ARP request报文来进行地址冲突检测。

主机A将ARP Request广播报文中的目的IP地址字段设置为自己的IP地址, 该网络中所有主机包括网关都会接收到此报文。 当目的IP地址已经被某一个主机或网关使用时, 该主机或网关就会回应ARP reply报文。通过这种方式,主机A就能探测到IP地址冲突了。

ARP欺骗原理

上面提到过了ARP缓存表,在每台主机都有一个ARP缓存表,缓存表中记录了IP地址与MAC地址的对应关系,而局域网数据传输依靠的是MAC地址。

假设主机 A 192.168.1.2,B 192.168.1.3,C 192.168.1.4; 网关 G 192.168.1.1; 在同一局域网,主机A和B通过网关G相互通信,就好比A和B两个人写信,由邮递员G送信,C永远都不会知道A和B之间说了些什么话。但是并不是想象中的那么安全,在ARP缓存表机制存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己是否向对方主机发送过ARP请求包,就直接把这个返回包中的IP地址与MAC地址的对应关系保存进ARP缓存表中,如果原有相同IP对应关系,原有的则会被替换。

这样C就有了偷听A和B的谈话的可能,继续思考上面的例子:

C假扮邮递员,首先要告诉A说:“我就是邮递员” (C主机向A发送构造好的返回包,源IP为G 192.168.1.1,源MAC为C自己的MAC地址),愚蠢的A很轻易的相信了,直接把“C是邮递员”这个信息记在了脑子里;

C再假扮A,告诉邮递员:“我就是A” (C向网关G发送构造好的返回包,源IP为A 192.168.1.2,源MAC地址为自己的MAC地址),智商捉急的邮递员想都没想就相信了,以后就把B的来信送给了C,C当然就可以知道A和B之间聊了些什么

上面ABCG的故事就是ARP双向欺骗的原理了

ARP单向欺骗就更好理解了,C只向A发送一个返回包,告诉A:G 192.168.1.1 的MAC地址为 5c-63-bf-79-1d-fa(一个错误的mac地址),A把这个信息记录在了缓存表中,而G的缓存表不变,也就是说,A把数据包给了C,而G的包还是给A,这样就是ARP单向欺骗了。

注:我们可以通过在终端输入 arp -a 来查询 ARP 缓存,为了防治 ARP 欺骗,

可以通过 arp -s IP MAC 绑定 IP 和 MAC 生成静态 ARP 表项

二、ARP欺骗实验演示如下:

1、虚拟机 A,使用 kali linux(攻击者)

2、本地主机 B,win10

3、A 和 B 处于同一局域网,这里的虚拟机需要以桥接的方式进行连接!!!

Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程
Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程

桥接和 NAT 的区别:

1、桥接和 NAT 都是虚拟机的一种通讯模式,都需要一块网卡,但在桥接模式下虚拟机和主机在同一网段,

而 NAT 模式下虚拟机和主机不在同一网段

2、桥接网络相当于虚拟机和主机接在同一交换机上,同时上网,虚拟机对物理机的 CPU 和网络的直接影响较小,但安全性较低

3、NAT 相当于虚拟机通过物理机连接网络,此时物理机相当于一个路由器,虚拟机等同于申请到一个上网名额,

对物理机的 CPU 和网络的直接影响较大,但安全性较高

实验步骤:

1、在主机 B 里使用 ping 命令检查网络

Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程

 

2、在主机 B 的终端输入 ipconfig 查询主机 B 的 IP 地址

Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程

 

3、在 kali 的终端里输入命令 route -n 查询当前局域网网关

Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程

4、在 kali 的终端里输入命令 arpspoof -i eth0 -t B的IP 当前局域网网关(-i 指定接口,-t 指定目标)

Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程

 

5、保持操作 4,回到主机 B,在终端里使用 ping 命令检查网络

Kali Linux实战篇:中间人攻击之ARP欺骗原理与实战教程

注:kali 里使用 route -n 或 ip route show 等查询 Gateway(网关),需要在 kali 里面终止 ARP 欺骗才能使主机正常上网