ARP协议漏洞及安全防范.docx
《ARP协议漏洞及安全防范.docx》由会员分享,可在线阅读,更多相关《ARP协议漏洞及安全防范.docx(11页珍藏版)》请在冰豆网上搜索。
ARP协议漏洞及安全防范
毕业论文(设计)
摘要1
Abstract1
1引言2
2ARP协议2
2.1基本原理2
2.2ARP的查看4
2.3ARP的高速缓存6
2.4ARP协议的工作流程7
3ARP协议漏洞及防范8
3.1ARP协议的漏洞8
3.2ARP攻击9
3.3ARP攻击的防范.1.1...
4ARP攻击的实现1.3...
4.1系统概述13....
4.2概要设计14....
4.3相关数据结构及函数1.5..
4.4程序实现17....
4.5程序的测试.19...
5小结21......
致谢21......
参考文献22....
附录23.....
ARP协议漏洞及安全防范
摘要:
在TCP/IP协议族中,ARP协议是一个底层的基础协议,在网络的运行过程中起着重要的作用。
由于ARP设计的缺陷,其安全问题也日益突出。
论文在深入讨论APR协议及其工作的原理的基础上,分析了ARP协议的弱点及APR攻击的原理,探讨ARP攻击的防范措施。
最后结合实际,本文给出了一个简单的ARP欺骗工具的实现方法。
关键词:
ARP协议;ARP攻击;MAC地址
SecuritPFIawofARPProtocolandtheCountermeasures
Abstract
IntheTCP/IPprotocolsuitetheARPprotocolisthefoundationprotocolinthelowerlaPer.ARPplaPsanimportantroleinnetworkrunning.Becauseofthedefectsofitsdesign,thesecuritPproblemofARPisincreasing.AfterthoroughdiscussionofAPRprotocolthispaperanaIPzedARPweaknessandAPRcheat.ThenmeasuresagainstARPattacksarediscussed.FinallPasimpleimplementationofARPcheattoolisgiven.
KePwords:
ARPprotocol;ARPattack;MACaddress
1引言
随着计算机技术和Internet技术的不断推广与应用,网络逐渐已经成为人们日常生活中不可缺少的一部分。
在网络发展的初期,人们更多地强调网络的方
便性和可用性,而忽略了网络的安全性。
当网络仅仅用来传送一般性信息的时候,安全问题并没有突出地表现出来。
但是,当在网络上运行关键性的业务如银行业
务等,当企业的主要业务运行在网络上,当政府部门的活动正日益网络化的时候,再加上网络传播信息快捷,隐蔽行强,在网络上难以识别用户的真实身份,网络犯罪、黑客攻击、有害信息传播等方面的问题日趋严重。
网络安全问题严重影响了人们的生活和工作,以至整个国家的安全。
它可能对国家的重大部门造成严重的后果,如政府机关、军事设施、金融部门等。
可以肯定的说,哪里有网络哪里就有网络安全问题。
所谓网络安全,是指网络系统的硬件、软件及其系统中的数据信息能够受到保护,不会因为偶然的或者恶意的原因而遭到破坏、更改、泄露,系统能够连续、可靠地运行,网络服务不被中断。
由于网络安全问题是多种多样的,很多新的网络安全问题不断涌现,防不胜防。
已知的网络安全问题包括很多种,目前比较有影响的有以下几种:
1•网络病毒感染。
网络病毒层出不穷,其传播方式也不断发展,而且,新的病毒还跟其他网络安全技术(如木马)相结合,产生综合病毒,极难防范。
2•木马问题。
这个网络安全问题变得越来越突出,很多木马程序在网上可以直接得到,而且其使用方法也很简单,但是其危害程度非常高。
3•恶意扫描。
对网络主机扫描,是攻击者最先做的事情,它能够检查出主机存在的很多漏洞,以及漏洞的种类等很多有价值的信息,它是攻击者进行攻击的基础。
4.网络监听。
它可以监听整个网络的数据包,然后查看其数据内容。
本来,网络监听可以用于网络管理和网络流量检测,但是攻击者使用它就变成了窃取网络信息的行为了。
5•垃圾邮件。
这也是人们普遍遇到的网络安全问题。
由于邮件的使用很广泛,已经成为人们生产生活中的一种重要通信方式。
但是与邮件相关的安全问题也非常多,其中最严重的就是垃圾邮件,严重影响了人们正常使用邮件系统。
6•拒绝服务攻击。
它不断对网络服务系统进行干扰,改变其正常的作业流程,执行无关程序使系统响应减慢甚至瘫痪,影响正常用户的使用,甚至使合法
用户被排斥而不能进入计算机网络系统或不能得到相应的服务。
然而,在目前的网络安全防范研究中,大部分都是研究如何防范和抵御来
自外网的不安全因素,因此网络边界的安全得到了很大的重视,但内网的安全问题同样是一个不可忽略的部分。
在内网的安全防范中,ARP攻击病毒是一个重
要的内容,也是内网攻击者最偏向于利用网络底层协议的一种病毒。
因此,对ARP协议的安全性分析具有十分重要的意义。
要如何防范ARP攻击,首先就必
须先从ARP协议本身入手,掌握ARP协议的基本知识,了解ARP攻击的原理,这样才能总结出一套行之有效的防范方法。
2ARP协议
2.1基本原理
众所周知,IP地址是不能直接用来进行通信的,这是因为IP地址只是主机
在抽象的网络层中的地址。
如果要将网络层中传送的数据报交给目的主机,还要
传到数据链路层转变成硬件地址后才能发送到实际的网络上。
由于IP地址是32
位的,而局域网的硬件地址是48位的,因此它们之间不存在简单的映射关系。
此外,在一个网络上可能经常会有新的主机加入进来,或撤走一些主机,更换网
卡也会使主机的硬件地址改变。
可见在主机中应存放一个从IP地址到硬件地址
的映射表,并且这个映射表还必须能够经常更新。
将一台计算机的IP地址翻译
成等价的硬件地址的过程叫做地址解析。
地址解析是一个网络内的局部过程,即
一台计算机能够解析另一台计算机地址的充要条件是两台计算机都连在同一物理网络中,一台计算机无法解析远程网络上的计算机的地址。
地址解析协议ARP
(AddressResolutionProtocol)就是用来确定这些映象的协议。
ARP协议的标准是在RFC826中定义的。
这个协议起初是为
DEC/Intel/GeroG的10兆以太网设计的,现在已允许用在其它类型的网络上。
它负责从第三层的网络地址映射到第二层的硬件地址(也可以是以太网以外的硬优质参考文档
图2-1ARP数据帧格式
在图中每一行为32位,也就是4个八位一组表示,在以后的图中,我们也将遵循这一方式。
硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1。
协议类型字段指明了发送方提供的高层协议类型,IP为OG0800。
它的值与包含IP数据报的以太网数据帧中的类型字段的值相同,这是有意设计的。
接下来的硬件地址长度和协议长度分别指明了硬件地址和高层协议地址的长度,以字节为单位,这样ARP报文就可以在任意硬件和任意协议的网络中使用。
对于以太网上的IP地址的ARP请求或者应答来说,它们的值分别为6和4。
操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和RARP应答(值为4)。
这个字段是必需的,因为ARP请求和ARP应答的帧类型字段值是相同的。
接下来的四个字段是发送端的MAC地址(在本例中是以太网地址)、发送端的协议地
(IP地址)、目的端的MAC地址和目的端的协议地址。
注意,这里有一些重复信息:
在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
对于一个ARP请求来说,除目的端MAC地址外的所有其他的字段都有填充值。
当系统收到一份目的端为本机的ARP请求报文后,它就把MAC地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为2,最
后把它发送回去。
[1]
Hdxhea匕t41(lOHfb包口dxiii]
Protocoliyp?
*1181)0(IP)
L曰乩EUhq£hsLriiwareaddress=6bvtes
IstL^thofpj?
3tocolaiddrm弓s:
-4bytes
Opcode1i杭t?
P口匕口ye^t)^etb.d白mVhsiri^crG白dcLrm二:
^EPSendiij.1KpivtQtui•dJj—川=[59^3.1.1]
hfiPTatars-hardvstrflddrs-M*nnDflOOQQDODO
JkEPTsirgstjsrotocoladdress-[5'?
t:
.2.141
2们通过Sniffer软件捕获一个ARP包来检查
Bli'F]&by七匕生J:
fantepaddli-tL-i
匡F的人口気PH/j饰屮找Hdlt人骑曲曲11■催.》WWEM詡/
图2-2Sniffer捕获的ARP包
2.2ARP的查看
我们先看一下LinuG下的arp命令(如果开始arp表中的内容为空的话,需要先对某台主机进行一个连接,例如ping—下目标主机来产生一个arp项):
d2server:
/home/kerberos#arp
AddressHWtPpeHWaddressFlagsMasklface59.68.2.7ether00:
11:
11:
EE:
39:
44Ceth0
Address:
主机的IP地址
HwtPpe:
主机的硬件类型
Hwaddress:
主机的硬件地址
FlagsMask:
记录标志,"C"表示arp高速缓存中的条目,"M"表示静态的arp条目。
用"arp-a"命令可以显示主机地址与IP地址的对应表,也就是机器中所保存
的arp缓存信息。
这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。
高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开女台算起。
d2server:
/home/kerberos#arp-a
(59.68.2.7)at00:
11:
11:
EE:
39:
44[ether]oneth0
可以看到在缓存中有一条59.68.2.7相对应的arp缓存条目。
d2server:
/home/kerberos#telnet59.68.2.105
TrPing59.68.2.105…
Connectedto59.68.2.105.
Escapecharacteris'A]'.
A].
telnet>quit
connetionclosed.
在执行上面一条telnet命令的同时,用tcpdump进行监听:
d2server:
/home/kerberos#tcpdump-edsthost59.68.2.105
tcpdump:
listeningoneth0
我们将会听到很多包,我们取与我们arp协议相关的2个包:
10.000:
D0:
F8:
0A:
FB:
83FF:
FF:
FF:
FF:
FF:
FFarp60
whohas59.68.2.105telld2server
20.002344(0.0021)00-E0-4C-E2-06-8A00:
D0:
F8:
0A:
FB:
83arp60
arpreplP59.68.2.105isat00-E0-4C-E2-06-8A
在第1行中,源端主机(d2server)的硬件地址是00:
D0:
F8:
0A:
FB:
83。
目的端主机的硬件地址是FF:
FF:
FF:
FF:
FF:
FF这是一个以太网广播地址。
电缆上的每个以太网接口都要接收这个数据帧并对它进行处理。
第1行中紧接着的一个输出字段是arp,表明帧类型字段的值是0G0806,说明此数据帧是一个ARP请求或回答。
在每行中,单词后面的值60指的是以太网数据帧的长度。
由于ARP请求或回答的数据帧长都是42字节(28字节的ARP数据,14字节的以太网帧头),因此,每一帧都必须加入填充字符以达到以太网的最小长度要求:
60字节。
第1行中的下一个输出字段arpwho-has表示作为ARP请求的这个数据帧中,目的IP地址是59.68.2.105的地址,发送端的IP地址是d2server的地址。
tcpdump打印出主机名对应的默认IP地址。
从第2行中可以看到,尽管ARP请求是广播的,但是ARP应答的目的地址却是59.68.2.105(00-E0-4C-E2-06-8A)。
ARP应答是直接送到请求端主机的,
而是广播的。
tcpdump打印出arprepIP的字样,同时打印出响应者的主机IP
和硬件地址。
在每一行中,行号后面的数字表示tcpdump收到分组的时间(以秒为单位)。
除第1行外,每行在括号中还包含了与上一行的时间差异(以秒为单位)。
这个时候我们再看看机器中的arp缓存:
d2server:
/home/kerberos#arp-a(59.68.2.7)at00:
11:
11:
EE:
39:
44[ether]oneth0(59.68.2.105)at00-E0-4C-E2-06-8A[ether]oneth0
arp高速缓存中已经增加了一条有关59.68.2.105的映射。
再看看其他的arp相关的命令:
d2server:
/home/kerberos#arp-s59.68.2.10500:
00:
00:
00:
00:
00d2server:
/home/kerberos#arp
AddressHWtPpeHWaddressFlagsMasklface59.68.2.7ether00:
11:
11:
EE:
39:
44Ceth059.68.2.105ether00:
00:
00:
00:
00:
00CMeth0d2server:
/home/kerberos#arp-a
(59.68.2.7)at00:
11:
11:
EE:
39:
44[ether]oneth0
(59.68.2.105)at00:
00:
00:
00:
00:
00[ether]PERMoneth0
可以看到我们用arp-s选项设置了59.68.2.105对应的硬件地址为00:
00:
00:
00:
00:
00,而且这条映射的标志字段为CM,也就是说我们手工设置的
arp选项为静态arp选项,它保持不变没有超时,不像高速缓存中的条目要在一定的时间间隔后更新。
如果想让手工设置的arp选项有超时时间的话,可以加上temp选项
d2server:
/home/kerberos#arp-s59.68.2.10500:
00:
00:
00:
00:
00tempd2server:
/home/kerberos#arp-a
(59.68.2.7)at00:
11:
11:
EE:
39:
44[ether]oneth0
(59.68.2.105)at00:
00:
00:
00:
00:
00[ether]oneth0d2server:
/home/kerberos#arp
AddressHWtPpeHWaddressFlagsMasklface
59.68.2.7ether00:
11:
11:
EE:
39:
44Ceth0
59.68.2.105ether00:
00:
00:
00:
00:
00Ceth0
可以看到标志字段的静态arp标志"M"已经去掉了,我们手工加上的是一条动态条目。
在不同的系统中,手工设置的arp静态条目是有区别的。
在linuG和
win20GG中,静态条目不会因为伪造的arp响应包而改变,而动态条目会改变。
而在win98中,手工设置的静态条目会因为收到伪造的arp响应包而改变。
如果您想删除某个arp条目(包括静态条目),可以用下面的命令:
d2server:
/home/kerberos#arp-d59.68.2.105
d2server:
/home/kerberos#arp-a
(59.68.2.7)at00:
11:
11:
EE:
39:
44[ether]oneth0
(59.68.2.105)atoneth0
可以看到59.68.2.105的arp条目已经是不完整的了。
还有一些其他的命令,可以参考linuG下的相关文档。
Windows环境下的ARP命令也类似,在此不再累赘。
2.3ARP的高速缓存
ARP高效运行的关键是由于每个主机都有一个ARP高速缓存。
这个高速缓
存存放了最近Internet地址到硬件地址之间的映射记录。
高速缓存中的每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。
我们可以用arp-a
命令来检查ARP的高速缓存。
参数-a的意思是显示高速缓存中所有的内容。
在一些网络安全的开发包中,可以使用相关函数来调用ARP的高速缓存。
例如在使用Libdnet开发包对ARP缓存进行操作时,就要用到ARP缓存的数据结构。
ARP缓存的数据结构中定义了与ARP缓存相关的一些信息,如协议地址和硬件地址。
ARP缓存结构的定义在arp.h中。
以下是Libdnet中ARP缓存的结构定义。
structarp_entrP{
structaddrarp_pa;/G协议地址G/
structaddrarp_ha;/G硬件地址G/
};
#denfinearp_pack_hdr_ethip(hdr,op,sha,tha,tpa)do{\structarp_hdrGpack_arp_p=(structarp_hdrG)(hdr);\structarp_ethipGpack_ethip_p=(structarp_ethipG)\
((uint8_tG)(hdr)+ARP_HDR_LEN);\
pack_arp_p->ar_hrd=htons()(ARP_HDR_ETH);\
pack_arp_p->ar_pro=htons()(ARP_PRO」P);\
pack_arp_p->ar_hln=ETH_ADDR_LEN;\
pack_arp_p->ar_pln=IP_ADDR_LEN;\
pack_arp_p->ar_op=htons(op);\
memmove(pack_ethip_p->ar_sha,&(sha),ETH_ADDR_LEN);\memmove(pack_ethip_p->ar_spa,&(spa),ETH_ADDR_LEN);\memmove(pack_ethip_p->ar_tha,&(tha),ETH_ADDR_LEN);\