1.ARP协议原理
ARP是地址解析协议(Address Resolution Protocol)的简称,它的功能是在局域网中找出某IP对应的MAC地址。例如“ping”命令的常见格式是:“ping 1.1.1.1”,其中的参数是IP地址,但以太网交换机并不能识别32位IP地址,它们是以48位以太网地址传输以太网数据包。因此,在真正发送“ping”命令产生的ICMP报文前,必须发送ARP请求报文得到目的IP地址(1.1.1.1)对应的以太网地址。
ARP协议的工作流程如下。
(1)首先,每台主机都会在自己的ARP缓冲区 (ARP Cache)中建立一个 ARP列表,以表示IP地址和MAC地址的对应关系。
(2)当源主机需要将一个数据包发送到目的主机时,会首先检查自己 ARP列表中是否存在该 IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址,以及目的主机的IP地址。
(3)网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址。
(4)源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
在Windows系列操作系统的命令提示符窗口中可以使用“arp-a”或“arp-g”命令查看本地的ARP缓冲区,使用“arp–d * ”命令删除本地动态产生的ARP记录。ARP命令的其他用法可以键入“arp/?”查看帮助信息。
2.ARP欺骗原理
ARP的请求报文如同向所有人(广播)询问“谁能告诉我1.1.1.1的MAC地址”?ARP的响应报文如同悄悄回答(单播)说“我是1.1.1.1,我的MAC地址是1111.1111.1111”。如果存在某台IP地址为1.1.1.2 MAC地址为1111.1111.2222的恶意主机发送ARP响应报文悄悄回答“我是1.1.1.1,我的MAC地址是1111.1111.2222”,因为请求的主机没有判断响应报文真伪的机制,所以会信以为真,在缓冲区中覆盖真正地址记录下来。这种冒充IP地址为1.1.1.1的主机进行欺骗的行为就是ARP欺骗。ARP的这种缺陷是因为对响应报文缺少验证引起的。
3.ARP欺骗实例
ARP欺骗工具非常多,比较出名的有ARPSpoof、Cain&abel等,ARPSpoof在Windows、Linux操作系统平台都有实现,Kali操作系统中已经集成安装。在图4-8所示的拓扑中实施ARP欺骗,在PC3上开启Kali虚拟机,利用其中的ARPSpoof工具同时欺骗PC1与PC2,使PC1与PC2通信的数据包都经过PC3。图中交换机使用二层或者三层都是可以的。
图4-8 ARP欺骗拓扑
按照图4-8的拓扑连接线路并配置IP地址,同一网段内的计算机通信可以不设置网关。使用“ping”命令测试PC1与PC2的连通性,此时两台计算机可以通信,在PC3上使用Wireshark软件监听数据包,不能收到PC1与PC2之间的ICMP数据包。
在PC3上开启Kali虚拟机,以root用户登录,密码为:toor,在虚拟机设置对话框中设置虚拟机以“桥接模式”接入PC3所在的网络,如图4-9所示。
图4-9 虚拟机以桥接模式与网络连接
在Kali虚拟机的终端使用命令“ifconfig eth0 1.1.123.33 netmask 255.255.255.0 up”更改IP地址为1.1.123.33,网络掩码为255.255.255.0,同时激活网卡,如图4-10所示。
图4-10 更改Kali操作系统下网卡参数(www.xing528.com)
在Kali虚拟机的终端里使用“ping”命令测试与PC1、PC2、PC3的连通性,结果显示都可以通信。在终端命令行中输入“arpspoof-i eth0–t 1.1.123.2-r 1.1.123.1”命令开始ARP欺骗,如图4-11所示。
图4-11 使用ARPSpoof工具开始ARP欺骗
ARPSpoof的命令格式如下。
(1)“-i eth0”参数:指明从本机的哪一块网卡发送欺骗数据包,“eth0”是默认网卡名字。
(2)“-t 1.1.123.2”参数:指定要欺骗的主机(target)的IP地址为1.1.123.2,如果“-t”后不加IP地址的话,默认将欺骗所在网段下所有主机。
(3)“-r”参数:表示对targe和host进行双向欺骗,即PC2发往PC1的数据包将发往虚拟机的网卡,PC1发往PC2的数据包也将发往虚拟机的网卡,这个参数只有在指定“–t”参数的时候才有效。
(4)“host”参数:指定假冒的主机。
(5)“Ctrl+C”键:能停止已经启动的ARP欺骗,在停止前,ARPSpoof 会向刚刚欺骗的主机发送5个正确的ARP响应报文来还原初始正确的状态。
(6)“-c”参数:用来指定最后发出的ARP响应报文的源MAC地址用谁的,“own”代表用虚拟机的,“host”代表用每台主机自己的,“both”代表用每台主机自己的发一遍再用虚拟机的发一遍,所以共有10个还原报文(ARP响应)。如果不指定“-c”参数,默认使用“own”方式,因为使用“host”方式要伪造源MAC地址,可能会对某些转发设备有影响。
启动ARPSpoof后观察PC2与PC1的连通性,它们之间将不能“ping”通了,如果在PC2和PC1主机上使用Wireshark软件进行数据包捕获,能够发现大约2 s会收到一个ARP响应报文,这个报文就是Kali虚拟机发出的ARP欺骗报文,PC2和PC1收到后会在自己的ARP缓冲区中更新。如果此时PC1和PC2有数据需要发送,将根据IP地址查询ARP缓冲区,查到的是错误的MAC地址,这样就会将数据发送到了冒充者的主机(即PC3),观察PC3捕获的报文,将看到其捕获了ICMP请求报文。
停止ARP欺骗后,在Kali虚拟机的终端里使用命令“cat /proc/sys/net/ipv4/ip_forward”查看内容是否为“1”,如果不是,使用命令“echo 1 > /proc/sys/net/ipv4/ip_forward”将字符“1”写入ip_forward文件,再次开启ARP欺骗,如图4-12所示。
图4-12 修改数据包转发控制文件
PC1与PC2可以“ping”通,并不是ARP欺骗没有成功,而是Kali虚拟机启用了报文转发,将收到的报文转发到了正确的主机,图4-8中的箭头与标号指明了数据转发路径。此时在PC3上使用Wireshark软件进行数据包捕获,将看到PC3收到了PC1与PC2通信的报文并且转发出去,如图4-13所示。
图4-13 PC3转发PC1与PC2之间的通信报文
与使用“ifconfig”命令配置网卡参数一样,使用命令“echo 1 >/proc/sys/net/ipv4/ip_forward”修改ip_forward文件在Kali操作系统重启后会失效,即还原为0,如果需要系统重启后仍然为1,需要修改/etc/sysctl.conf文件,打开此文件找到“# net.ipv4.ip_forward=1”这一行,将行首的“# ”删掉,解除此行的注释即可。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。