ARP欺骗的实现与防御_第1页
ARP欺骗的实现与防御_第2页
ARP欺骗的实现与防御_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ARP 欺骗的实现与防御什么是ARP协议官话:在以太协议中规定,同局域中的台主机要和另台主机进直接通信,必须要知道标主机的MAC地址。在TCP/IP协议中,络层和传输层只关标主机的IP地址。这就导致在以太中使IP协议时,数据链路层的以太协议接到上层IP协议提供的数据中,只包含的主机的IP地址。于是需要种法,根据的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。所谓地址解析(address resolution)就是主机在发送帧前将标IP地址转换成标MAC地址的过程。 Extracted from WikiPedia.通俗点说,在局域中通信时使的是MAC地址,不是常见的IP地址。所

2、以在局域的两台主机间通信时,必须要知道对的MAC地址,这就是ARP协议要做的事:将IP地址转换为MAC地址。从以太帧来看,以太帧分为:以太部、上层数据部分、以太尾,三部分。在物理层传输的数据都是使以太帧来封装起来传输的(通俗的说就是在数据包头加上以太部,数据包尾加上以太尾),络传输是分层进的,也就是物理层只处理物理层的数据,对于以太帧中的上层数据部分并不关。在以太帧中,以太部中存放了的主机的MAC地址和源主机的MAC于在以太中传输数据。所以,在以太通信中,只知道对的IP地址是不可以通信的,因为IP地址属于第三层(络层)的地址,对于物理层的以太帧来说IP地址属于上层数据部分,以太是法识别的,所以

3、就要使ARP协议获取到对的MAC地址进通信。ARP是如何作的?举个栗:现在有两台处于同局域的主机A、B。主机 IP地址 MAC地址A 192.168.1.1 0A-11-22-33-44-01B 192.168.1.2 0A-11-22-33-44-02现在主机A要和主机B通信,那么根据上的介绍可以知道,主机A仅有主机B的IP地址是不可以通信的,还要知道主机B的MAC地址,下介绍主机A是如何通过ARP协议获取主机B的MAC地址的:第1步:根据主机A上的路由表内容,IP确定于访问主机B的转发IP地址是192.168.1.2。然后A主机在的本地ARP缓存中检查主机B的匹配MAC地址。第2步:如果主

4、机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从将ARP请求帧播到本地络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地络上的每台主机都接收到ARP请求并且检查是否与的IP地址匹配。如果主机发现请求的IP地址与的IP地址不匹配,它将丢弃ARP请求第3步:主机B确定ARP请求中的IP地址与的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。第5步:当主机A收到从主机B发来的ARP回复消息时,会主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有存期的,存

5、期结束后,将再次重复上的过程。主机B的MAC地址旦确定,主机A就能向主机B发送IP通信了。了解ARP协议的作原理后可以分析出其存在个严重的安全问题:在ARP回复时,发送请求包的主机A并不会验证ARP回复包的真实性,也就是不能判断回复主机A的是不是主机B。由此引出个局域攻击式ARP欺骗。什么是ARP欺骗举个栗:主机 IP MACA 192.168.1.1 0A-11-22-33-44-01B 192.168.1.2 0A-11-22-33-44-02C 192.168.1.3 0A-11-22-33-44-031.主机A要和主机C通信,主机A发出ARP包询问谁是192.168.1.3?请回复19

6、2.168.1.12.这时主机B在疯狂的向主机A回复,我是192.168.1.3,我的地址是0A-11-22-33-44-023.由于ARP协议不会验证回复者的份,造成主机A错误的将192.168.1.3的MAC映射为0A-11-22-33-44-02。ARP欺骗的分类1.主机欺骗,如同上的栗,主机B欺骗局域中的主机A。2.关欺骗,局域中的主机欺骗关,从获取其他主机的进流量。ARP攻击的危害1.造成局域中的其他主机断。2.劫持局域中其他主机或关的流量,获取敏感信息等。如何实现ARP攻击找轮例如kali下的arpspoof、ettercap等具。造轮先介绍下LibPacp:LibPcap是个UN

7、IX下的C函数库,它提供的API,能获取和过滤从任意块卡在数据链路层上的帧。不同的UNIX系统有不同的架构去处理数据链路层上的数据帧,所以程序员如果想要写个能运在UNIX上的、直接读取或者操作数据链路层上的帧的应程序,他就不得不专门为这个特点版本的UNIX写个访问帧的函数。libpcap的的就是提供个抽象层,这样程序员就能编写可运在所有版本的UNIX上的包获取和分析具了。然后是WinPcap:WinPcap是个专为Windows系统设计的、基于libpcap的库。多数Windows下的络流量分析具都是基于WinPcap开发的,如Wireshark。接着是SharpPcap:SharpPcap是

8、封装好WinPcap和LibPcap的C#库。除了知道开发的库还要知道以太帧和ARP报的结构(SharpPcap提供了封装好的法,但是为了学习还是造轮):第部分:以太部也可以说是以太帧的头部,这部分包括了标主机的MAC地址、源主机的MAC地址、上层协议类型第部分:ARP报这部分中的第20位,000,001表ARP请求包,000,002表应答包。由于以太帧最短长度为64个字节,由于ARP报加上以太头不64个字节,所以要填充18个字节的000第三部分:FCS帧校验序列即计算机络数据链路层的协议数据单元(帧)的尾部字段,是段4个字节的循环冗余校验码。源节点发送数据帧时,由帧的帧头和数据部分计算得出F

9、CS,的节点接收到后,同样的式再计算遍FCS,如果与接收到的FCS不同,则认为帧在传输过程中发了错误,从选择丢弃这个帧。知道了ARP欺骗的原理和ARP数据包的格式后,只要构造出个ARP欺骗包,重复向标主机发出就可以了。原理很简单,实现起来稍有点难度:先要先要获取本机的IP地址和MAC地址,我在下的Deemo中实现了SharpPacp获取本机IPv4地址和MAC地址的法:代码分析:LibPcapLiveDeviceList.Instance获取本机中所有卡的Listdevice.AddressIPv4IPv6MAC)Sockaddr.AddressType.AF_INET_AFINET6 ()S

10、ockaddr.AddressType.HARDWAREMAC地址接下来还要获取到标主机的地址信息,IP地址和MAC可以动指定,为了更加性化的挨打操作,当然要根据输的IP动获得MAC地址了,知道ARP原理了,获取对的MAC地址只要向对发送个ARP请求包然后监听卡就可以了。代码如下:scanThread = new Thread() =/ inject the packet to the wire 发送请求包/read the next packet from the networkvar reply = _device.GetNextPacket(); / ARPif (reply = nul

11、l) /下个包为空时,跳过本次循环continue;/ parse the packet 解析数据包var packet = PacketDotNet.Packet.ParsePacket(reply.LinkLayerType, reply.Data);/ is this an arp packet? arp数据包吗?var arpPacket = PacketDotNet.ARPPacket.GetEncapsulated(packet);if (arpPacket = null)continue;/if this is the reply were looking for, stop /

12、ARP IP等于 UIIPif (arpPacket.SenderProtocolAddress.ToString().Equals(recipientIP)/ 通知事件 -MACif (ResolvedEvent != null)ResolvedEvent(this, arpPacket.SenderHardwareAddress);break;_device.Close(); /关闭设备);scanThread.Start(); / 启动线程代码解析:创建个线程专门来发送ARP请求包和解析卡中收到的ARP应答包,启动线程发送个包后,检测卡数据,并过滤出所有卡中的ARP数据包,然后对包进解析

13、,如果包中的源主机IP是构造的包中的标主机证明这个包是刚才发送的请求包的应答包,然后:1.通知事件更新UI、2.结束线程、3.关闭设备得到本机地址信息和标主机的地址信息后,只要将之前构造的包中的相应的地址信息体替换掉就好了除了要换掉包中的地址信息,还要在尾部加上FCS校验码:什么是FCS校验码?FCS:Frame Check Sequence(帧校验序列),俗称帧尾,即计算机络数据链路层的协议数据单元(帧)的尾部字段,是段4个字节的循环冗余校验码。源节点发送数据帧时,由帧的帧头和数据部分计算得出FCS,的节点接收到后,同样的式再计算遍FCS,如果与接收到的FCS不同,则认为帧在传输过程中发了错

14、误,从选择丢弃这个帧。FCS提供了种错误检测机制,来验证帧在传输过程中的完整性。FCS采了循环冗余校验CRC32校验算法,那么什么是CRC校验呢?CRC校验通俗点讲,就是将给出的进制数据与个固定的多项式进莫2除计算,得出的余数就是CRC校验码。举个栗:计算4位的CRC校验码知道CRC计算原理后,再来看下CRC-4的实现:原始的 CRC 校验算法:根据多项式除法,我们就可以得到原始的 CRC 校验算法。假设成多项式 g(x) 是 r 阶的,原始数据存放在 data 中,长度为 len 个 bit , reg 是 r+1 位的变量。 以 CRC-4 为例,成多项式 g(x)=x4+ x + 1 ,

15、对应了个 5bits 的进制数字 10011 ,那么 reg 就是 5 bits 。reg1 表明 reg 的最低位, regr+1 是 reg 的最位。通过反复的移位和进除法,那么最终该寄存器中的值去掉最位就是我们所要求的余数。所以可以将上述步骤下的流程描述:if(regr+1 = 1) / regg(x)/ 运算reg = reg XOR g(x);/ 移出最位,移新数据reg = (reg 24);crc1 = (byte)(u 16);crc2 = (byte)(u 8);crc3 = (byte)(u);/FCS校验位for (int i = 0; i crc.Length; i+)

16、return p1;到此,ARP数据包的构造就算完成了。最后要实现ARP的欺骗,只要利SharpPacp提供的发包法,在线程中疯狂发包就可以了。sMAC = MACTOBYTE(senderMAC);/欺骗包sendThread = new Thread(SendPack);sendThread.Start();_device.Open();/发送数据包while (true)_device.SendPacket(packet);time+;/ 通知事件-更新发包次数if (ResolvedEvent != null)ResolvedTimeEvent(this, time);Thread.Sleep(100); / 100ms正:如何防御ARP欺骗ARP欺骗是通过重复应答实现的,那么只需要在本机添加条静态的ARP映射,这样就不需要询问关MAC地址了,这种法只对主机欺骗有效。对于关欺骗还需要在关中也添加条到主机的静态ARP映射。1.管理份运命令提符;输netsh i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论