您好,欢迎访问三七文档
网络安全课程设计——ARP病毒的分析与防御班级:网络081班学号:0807100334姓名:王毅指导老师:葛志辉完成时间:2011.10.15目录1.实验要求--------------------------------------------------------32.实验原理--------------------------------------------------------33.实验步骤--------------------------------------------------------54.构造ARP数据包-----------------------------------------------95.实验结果与分析----------------------------------------------126.防范措施-------------------------------------------------------147.实验总结-------------------------------------------------------17一、实验要求能够深入分析ARP病毒的原理,能够利用winpcap、libnet构造网络数据包,实现ARP病毒,并结合抓包工具设计ARP病毒的防范方案。二、实验原理1、ARP工作原理每台主机都会根据以往在网络中与其他节点的通信,在自己的ARP缓存区(ARPCache)中建立一个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(windowspacketcapture)是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。具体步骤是:选择工具——选项——目录下的INCLUDEFILES和LIBRARYFILES中添加:1.2、安装Libnet2安装Libnet首先将下载的Libnet开发包解压缩,生成一个文件夹Libnet_1.1.2.1,把所有文件拷到一个盘符下,在LIBNET下的文件夹win32,双击文件libnet.dsw导入到visualC++工作空间,如图所示:此时可以对Libnet进行编译,但在libnet用到wincryptAPI函数,所以必须加上库中文件advapi32.lib。具体步骤是:选择:工程——设置——连接:在对象/苦模块中加入(wsock32.lib是windows中需要掉要其他网络函数所必须加入的):从编译信息可以看出没有任何错误,证明编译通过:至此,在win32中多了一个文件夹debug,打开文件夹可以看到libnet.dll和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环境下运行所必须的,如果没有libnet.dll文件,libnet应用程序无法运行,文件libnet.dll中有libnet库函数的导出定义。可以把文件libnet.dll和libnet.lib拷贝至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缓存一直处于被攻击状态:代码为:#includestdafx.h#includewin32/libnet.h#includestdio.h#defineIPADDRMAXSIZE16voidmain(intargc,char**argv){初始化libnet_init()初始化libnet_init()初始化libnet_init()构造ARP协议块Libnet_build_arp()或Libnet_autobuild_arp()构造以太网协议块Libnet_build_ethernet()或libnet_autobuild_ethernet()发送数据包libnet_write()销毁libnet_destroy()intpacket_size;libnet_t*l=NULL;libnet_ptag_tprotocol_tag;char*device=NULL;charerror_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_charhardware_destination[6]={0x00,0x00,0x00,0x00,0x00,0x00};u_charhardware_source[6]={0x00,0x24,0x1D,0x2E,0x29,0x6e};u_longdestination_ip;u_longsource_ip;destination_ip=libnet_name2addr4(l,destination_ip_str,LIBNET_RESOLVE);source_ip=libnet_name2addr4(l,source_ip_str,LIBNET
本文标题:Arp欺骗报告
链接地址:https://www.777doc.com/doc-2663321 .html