实验目的

  1. 掌握 ARP 协议的内容,ARP 攻击的原理,检测方法;

  2. 会用基本的 ARP 欺骗软件,以及简单的抓包分析。

实验原理

ARP 协议介绍

以太网卡一般都有固定的 MAC 地址(以太网硬件地址),但一块网卡使用的 IP 地址却可能发生变化,这就引发了一个问题:基于 IP 网络如何获取发送数据包的一端的MAC 地址。ARP 应运而生,在 IP 地址与对应的 MAC 地址之间提供动态映射,其功能是提供 32 位的 IP 地址到 48 位的硬件地址的转换。

当网络中一台主机要向另一台主机或者路由器发送数据时,发送方必须要知道接收方的 MAC 地址。发送方便要在自己的 ARP 缓冲中搜索接收方 IP 地址所对应的 MAC 地址,如果发送方没有在本地的 ARP 缓冲中找到接收方的 MAC 地址,就需要广播 ARP 请求。ARP 请求中包含了接收方的 IP 地址,当接收方接收到了这个请求,就会做出 ARP应答,应答中就包含了应答一方的 IP 地址和 MAC 地址。为了避免每次数据发送之前都要进行 ARP 请求的广播,发送方会将查询得到的结果保存到本地的 ARP 缓存中,并以超时则删除的策略加以维护。

欺骗的原理

ARP 欺骗的核心思想就是向目标主机发送伪造的 ARP 应答,并使目标主机接收应答中伪造的 IP 地址与 MAC 地址之间的映射对,以此更新目标主机 ARP 缓存。下面就在理论上说明实施 ARP 欺骗的过程(见下图):S 代表源主机,也就是将要被欺骗的目标主机;D 代表目的主机,源主机本来是向它发送数据;A 代表攻击者,进行 ARP 欺骗。

实施ARP欺骗的过程

进一步假设 A 已知 D 的 IP 地址,于是他暂时将自己的 IP 地址改为 D 的 IP 地址。

当 S 想要向 D 发送数据时,假设目前他的 ARP 缓存中没有关于 D 的记录,那么他首先在局域网中广播包含 D 的 IP 地址的 ARP 请求。但此时 A 具有与 D 相同的 IP 地址,于是分别来自 A 与 D 的 ARP 响应报文将相继到达 S。此时,A 是否能够欺骗成功就取决于 S的操作系统处理重复 ARP 响应报文的机制。不妨假设该机制总是用后到达的 ARP 响应中的地址对刷新缓存中的内容。那么如果 A 控制自己的 ARP 响应晚于 D 的 ARP 响应到达 S,S 就会将如下伪造映射:D 的 lP 地址→A 的 MAC 地址,保存在自己的 ARP 缓存中。在这个记录过期之前,凡是 S 发送给 D 的数据实际上都将发送给 A。而 S 却毫不察觉。

或者 A 在上述过程中,利用其它方法直接抑制来自 D 的 ARP 应答将是一个更有效的方法而不用依赖于不同操作系统的处理机制。进一步,A 可不依赖于上述过程,直接在底层伪造 ARP 响应报文来达到同样的目的。

IP与MAC地址静态绑定

  1. 做好整个局域网终端用户计算机的命名,指定 IP 地址。根据用户的类别统一命名计算机,并给定 IP 地址。这样通过机器名,就知道是哪个部门哪台计算机,便于管理。
  2. 统计每个终端机器网卡的 MAC 地址,建立 IP 地址与 MAC 地址对应表。
  3. 将 IP 地址与 MAC 地址绑定。要根据局域网接入互联网的方式不同而采用不同的方法。

如果采用代理服务器接入互联网,那就是用如下的命令:ARP -s IP 地址 MAC 地址 例:ARP -s 192.168.1.4 00-EO-4C-6C-08-75这样,就将静态 IP 地址 192.168.1.4 与网卡地址为 00-EO-4C-6C-08-75 的计算机绑定在一起了,即使别人盗用你的 IP 地址 192.168.1.4,也无法通过代理服务器上网。

如果要查看是否绑定,可以用 arp -a 192.168.1.4 回车,会得到如下提示:Internet Address Physical Address Type 192.168.1.4 00-EO-4C-6C-08-75 static

IP与MAC地址动态绑定

采用的命令如下:Internet Address Physical Address Type 192.168.1.4 00-EO-4C-6C-08-75 dynamic

当网络中有很多台主机时,如果这样每一台都去做动态绑定,工作量是非常大的。这种绑定,在电脑每次重起后,都必须重新再绑定,虽然也可以做一个批处理文件,但是还是比较麻烦的。

IP与MAC地址硬件绑定

如果是通过路由器直接接入互联网,最好通过硬件防火墙来实现 IP 与 MAC 的绑定。一般的硬件防火墙都具有这个功能,具体的操作也非常简单。

ARP欺骗行为检测

目前存在着几种检测 ARP 欺骗的机制。在主机级,普通主机可以采用两种方法检测自己的IP 地址是否正在被其它机器挪用:一种是被动检查网络广播报文;另一种是主动探查有嫌疑的主机。在服务器级,文件服务器或者路由器试图检测出它的服务对象所做的 ARP 欺骗。

在网络级,处于网络管理员控制下的机器将检查所有的 ARP 请求与响应以查明异常并判断是否出现 ARP 欺骗行为。

  1. 主机缓被动检测

当系统接收到来自局域网上的 ARP 请求时,系统检查该请求发送端的 IP 地址是否与自己的IP 地址相同。如果相同,则说明该网络上另有一台机器与自己具有相同的 IP 地址。

  1. 主机级主动检测

主机定期向所在局域网发送查询自己 IP 地址的 ARP 请求报文。如果能够收到另一 ARP 响应报文,则说明该网络上另有一台机器与自己具有相同的 IP 地址。

以上两种检测方式检测出的异常情况很多时候是由于非恶意的操作失误,如其他用户错配IP地址。而下面这种检测方式检测到的异常情况则更可能是真正的 ARP 欺骗。因为它说明目标主机收到的 ARP 应答包是伪造的。

  1. 服务器缓检测

当服务器收到 ARP 响应时,为了证实它的真实性,根据反向地址解析协议(RARP)就用从响应报文中给出的 MAC 地址再生成一个 RARP 请求,它询问这样一个问题: “如果你是这个MAC 地址的拥有者,请回答你的 IP 地址”。这样就会查询到这个 MAc 地址对应的 IP 地址,比较这两个 IP 地址,如果不同,则说明对方伪造了 ARP 响应报文。

  1. 网络级检测

配置主机定期向中心管理主机撤告其 ARP 缓存的内容。这样中心管理主机上的程序就会查找出两台主机报告信息的不一致,以及同一台主机前后报告内容的变化。这些情况反映了潜

在的安全问题。或者利用网络嗅探工具连续监测网络内主机硬件地址与 IP 地址对应关系的变化。

需要注意的是,上述方法在检测到异常情况时,它有可能是正当的,意外的,或者就是破坏安全的攻击行为。因而在实际的处理过程中,针对不同的情况需要使用不同的策略。

实验内容及步骤

(1)正确安装 netfuke 软件和 wireshark 软件。

(2)搭建实验环境,将三台主机用网线和路由器连接起来,并令三者的IP处在同一子网内,如下面几张图所示。实验环境

主机1

主机2

主机3

(3)打开 netfuke 主界面,如下图所示。

netfuke界面

(4)ARP 欺骗设置

单击设置,选择 ARP 欺骗,弹出如下图所示的对话框,对相关参数进行正确的配置。其中,欺骗方式选择单向欺骗和双向欺骗,根据需要进行配置。来源 IP 为网关的 IP 地址,中间人 IP 为自己主机的 IP 地址,目标 IP 为想要欺骗的主机的 IP 地址。来源 MAC和目标 MAC 由软件根据所填的 IP 地址自动填写,中间人 MAC 是由操作者自己填写自己主机的 MAC 地址。

双向欺骗设置

(5)嗅探配置

单击设置,选择嗅探欺骗,弹出如下图所示的对话框,对相关参数进行正确的配置。按如图进行 ARP 欺骗所需要的配置进行勾选即可。

嗅探设置

(6)打开wireshark抓包,选择以太网3,开始抓包。

(7)使用netfuke开始攻击,如下图所示。

开始攻击

实验结果及分析

单向欺骗结果

表1-1 相关主机信息
主机IP地址MAC地址
攻击者192.168.1.10200E09408D6EC
被攻击者192.168.1.100448A5BFDBBD3
通信主机192.168.1.101448A5BFDBC3D

从下图可以看出,被攻击者的ARP表中的192.168.1.101表项本应是通信主机的MAC,而现在是攻击者的MAC,即00E09408D6EC,说明攻击者欺骗成功。

被攻击者ARP表

由下图可知,ARP进行攻击时,单向欺骗中随着被攻击者的网络流量的变化,ARP攻击的流量也在变化。

ARP攻击流量

单向欺骗报文分析

如下图所示,当主机向另一台主机发起连接请求时,由于ARP表为空,所以会发送ARP请求,目标IP为想要建立连接的主机,即192.168.1.101,目标MAC为全0,即为广播。

ARP请求报文

从下图可以看出,攻击者接收到被攻击者主机的ARP广播请求后,会伪装ARP请求目标主机发送ARP应答,此时应答的发送方的MAC为攻击者MAC(00E09408D6EC),发送方IP为ARP请求目标主机IP(192.168.1.101)。被攻击者接收到该ARP应答报文后会把目标主机的IP与攻击者的MAC进行绑定,后续与目标主机的交互都会经过攻击者,攻击者欺骗成功。

ARP应答报文

双向欺骗结果

表1-2 相关主机信息
主机IP地址MAC地址
攻击者192.168.1.10200E09408D6EC
被攻击者1192.168.1.100448A5BFDBBD3
被攻击者2192.168.1.101448A5BFDBC3D

从下图可以看出,两个被攻击者的通信ARP表项均变成了攻击者的MAC地址00E09408D6EC,攻击者欺骗成功。

被攻击者1 ARP表

被攻击者2 ARP表

由下图可知,ARP 进行攻击时,双向欺骗中随着被攻击者的网络流量的变化,ARP攻击的流量也在变化。

ARP攻击流量

双向欺骗报文分析

从下图可以看出,当被攻击者1想与被攻击者2通信时,由于ARP为空,会发送ARP请求报文广播,因此目标IP为192.168.1.101,目的MAC地址为广播。

被攻击者1的ARP请求报文

从下图可以看出攻击者嗅探到被攻击者1的ARP请求报文后,会伪装成其目标IP进行应答,发送方MAC为自己的MAC地址,当被攻击者1收到该应答后便会将192.168.1.101的表项设置成攻击者MAC地址。

攻击者的ARP应答报文

被攻击者2收到经攻击者转发的攻击者1的消息报文后,由于其ARP也是空的,因此被攻击者2会发送192.168.1.100的ARP请求报文。攻击者收到后,伪装为被攻击者1进行应答,发送方MAC为自己的MAC地址,如下图所示。当被攻击者2收到该应答后便会将192.168.1.100的表项设置成攻击者MAC地址。从而实现了双向欺骗。

攻击者的ARP应答报文

总结与反思

这个实验最令人头痛的是搭建实验环境。起初我使用的是以手机为AP的无线局域网,实验架构如图4-1所示,这种方案攻击AP是有问题的。

  • 当攻击AP时,由于手机无法查看ARP表项,导致很难展示攻击的结果;

  • 当攻击主机时,始终攻击无效,我以为由于WLAN数据包始终由AP转发的特点,导致攻击者很难进行攻击。真正原因后面会说。

无线局域网方案不行,导致实验一度陷入僵局。如果用有线的话需要用三根网线、转换口和一个转发设备,这都是我没有的。经过苦苦寻找,在图书馆发现了插着网线的电脑,实验又有了希望。最后我把寝室的路由器“偷”了出来才得以完成实验。

无线局域网实验架构

还有一个坑是netfuke嗅探设置中的网卡选择。一开始我以为用默认的就行,结果攻击始终没有效果,我一度以为是软件的问题。而且下拉的菜单的这些网卡很难和各种网卡名字对应,我只能一个一个试,很麻烦。

嗅探设置网卡选择

也正是这个坑,导致我以为用无线局域网不行,做完有线局域网实验后我又尝试了下用手机热点搭建无线局域网来攻击主机。事实证明,选择了正确网卡后可以实现攻击,如图4-3至图4-5所示。

欺骗前主机ARP表

欺骗后主机ARP表

ARP攻击流量