浅谈跨网段ARP欺骗的原理及防治策略

时间:2023-06-30

  网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。 网络安全从其本质上来讲就是网络上的信息安全。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全的研究领域。网络安全是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性学科。

网络安全是当今网络技术的一个重要研究课题,有很强的现实应用背景。在网络安全防范中,地址解析协议ARP(Address Resolution Protocol)是一个相当重要的内容,也是网络攻击者偏向于利用的网络底层协议。ARP协议的设计是建立在局域网内计算机互信的基础上的,这种设计的初衷使得今天局域网内出现了大量的与ARP相关的木马和病毒,严重影响了局域网内通信的安全和通信效率,给用户利益带来了巨大的风险。本文针对跨网段的ARP攻击进行了研究。

1 ARP协议

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

1.1 ARP的作用

ARP工作在数据链路层,在本层与硬件接口联系,同时对上层(网络层)提供服务。在以太网中,由于以太网设备并不识别32 bit的IP地址,所以数据包的传送不是通过IP地址完成的,而是通过48 bit MAC地址(网卡的物理地址)来完成的,一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而ARP协议用于将网络中的IP地址解析为MAC地址,以保证通信的顺利进行。主机每隔一段时间(或者当收到ARP应答)都会用新的地址映射记录对ARP缓存进行更新,以保证自己拥有的地址解析缓存。


1.2 ARP协议的安全问题

ARP协议是建立在信任局域网内所有结点的基础上的,它高效,但却不安全。ARP高速缓存根据所接收到的ARP协议包随时进行动态更新,它是无状态的协议,不会检查自己是否发过请求包,只要收到目标MAC是自己的ARP响应数据包或ARP广播包(包括ARP请求数据包和ARP响应数据包),都会接受并缓存。

2 跨网段的ARP需重新定向的原因

如果是同一网段,ARP欺骗攻击就可以直接通过洪水攻击或伪造IP-MAC地址映射表来实现。但是如果伪造包是经过路由分段将无法获得成功,因为即使使用洪水攻击或者伪造包使得目标主机无法提供服务,失去连接,局域网中的主机也只是在局域网中找目标主机而根本不会与攻击主机通信,因为主机路由表到目标主机的路由是直接交付而不是经过网关交付,这时需要再伪造一个网际控制报文协议ICMP(Internet Control Message Protocol)重定向报文广播包,通知目标主机所在的局域网中的所有主机:到达目标主机的短路径不是直接交付,而是路由,需要重定向。

3 ARP与ICMP跨网段重定向

3.1 ICMP重定向报文格式

ICMP是为了更有效地转发IP数据报和提高交付成功的机会。它在主机和路由器之间差错情况和提供异常情况的,目的是为了当网络出现问题的时候返回控制信息。


重定向报文的类型为5,代码有效值为0~3。其中0代表网络重定向,1代表主机重定向,2代表服务类型和网络重定向,3代表服务类型和主机重定向。主机本身不是路由器,所以这种ICMP重定向会导致网络流量的增大。

3.2 ICMP重定向报文程序

ICMP重新定向所使用的报文程序如下:

//ICMP header

typedef struct _tagX_icmphdr{

unsigned char i_type; //类型

unsigned char i_code; //代码

unsigned short i_cksum; //检验和

unsigned short i_id; //标识符

unsigned short i_seq; //序列号

unsigned long i_timestamp;

//当前时间itmestump=(unsigned long):GetTickCount();

XIcmpHeader;

case ICMP-REDIRECT:

if (code>3)

goto badcode;

if(icmplen< ICMP-ADVLENMIN||icmplen

||icp->icmp-ip·ip-hl<(sizeof(struct ip)》2))

{

icmpstat.icps-badlen++;

break;

}

icmpgw·sin-addr=ip->ip-src;

icmpdst·sin-addr=icp->icmp-gwaddr,

icmpsrc·sin-addr=icp->icmp-ip·ip-dst;

rtredirect ((struct sockaddr*) &icmpsrc,

(struct sockaddr*) &icmpdst,

(struct sockaddr*) 0, RTF-GATEWAY|

RTF-HOST,(struct sockaddr*)&icmpgw,

(struct rtentry**) 0);

ptctlinput (PRC-REDIRECT-HOST,(struct sockaddr*) &icmpsrc);

Break;

3.3 ICMP重定向的工作原理

在Internet网的主机发送数据报时,先查找自己的路由表,判断发送接口。出于效率的考虑,主机并不和连接在网络上的路由器定期交换路由信息,一般在主机中设置一个默认路由器的IP地址,数据报先传送给这个默认路由器,此默认路由器通过与其他路由器交换路由信息得知到达每一个网络的路由,当默认路由器发现主机发往某个目的地址的数据报的路由不是本默认路由器而是另一个路由器时,就用改变路由报文把这种情况告诉主机,主机即更改路由表增加一个新路由项目。


3.4 跨网段的ARP欺骗攻击的实现过程

跨网段的ARP欺骗比同一网段的ARP欺骗要复杂得多,它需要把ARP欺骗与ICMP重定向攻击结合在一起。假设A和B在同一网段,C在另一网段。


首先攻击方C修改IP包的生存时间,将其延长,以便做充足的广播。然后和上面提到的一样,寻找主机B的漏洞,攻击此漏洞,使主机B暂时无法工作。此后,攻击方C发送IP地址为B的IP地址192.168.0.2,MAC地址为C的MAC地址CC-CC-CC-CC的ARP应答给A。A接收到应答后,更新其ARP缓存。这样,在主机A上,B的IP地址就对应C的MAC地址。但是,A在发数据包给B时,仍然会在局域网内寻找192.168.0.2的MAC地址,不会把包发给路由器,这时就需要进行ICMP重定向,告诉主机A到192.168.0.2的短路径不是局域网,而是路由,请主机重定向路由路径,把所有到192.168.0.2的包发给路由器。主机A在接收到这个合理的ICMP重定向后,修改自己的路由路径,把对192.168.0.2的数据包都发给路由器。这样攻击方C就能得到来自内部网段的数据包。

4 ARP病毒的检测和防范策略

4.1 ARP的检测方法

(1)主动定位方式。因为所有的ARP病毒攻击源都会有其特征——网卡会处于混杂模式,可以通过ARPKiller工具扫描网内有哪台机器的网卡是处于混杂模式的,从而判断这台机器有可能就是攻击机。定位好机器后,再做病毒信息收集,提交给相关单位做分析处理。

(2)在任意客户机上进入命令提示符(或MS-DOS方式),用arp-a命令查看。如果看到有两个机器的MAC地址相同,那么就可以判断网络内有ARP欺骗攻击。

(3)运行tracert–d网址。如果个跳显示的不是网关而是其他的IP地址,则跳中显示的IP即为中了ARP病毒计算机的IP地址。

4.2 ARP欺骗的安全防范策略

(1)编写一个批处理文件arp.bat,实现开机运行,将交换机网关的MAC地址和网关的IP地址绑定,内容如下:

@echo off

arp-d

arp-s IP MAC

其中IP和MAC为网关IP地址和MAC地址。

(2)网管交换机端绑定。在交换机上绑定用户主机的IP地址和网卡的MAC地址,同时在边缘交换机上将用户计算机网卡的MAC地址和交换机端口绑定的双重安全绑定方式。

以思科2950交换机为例,输入命令:

Switch#config terminal #进入配置模式

Switch(config)# Interface f 0/1

#进入具体端口配置模式

Switch(config-if)switchport

port-security mac-address  MAC(主机的MAC地址)

(3)算法的实现。首先,察看是否在发送ARP请求报文,如果正在发送,就将该IP加入到数组ReqAddBuf[i]中。C语言描述如下:

if (SendingReqPack= =1)

{ for (i=1; i<=n ; i++)

{ if (ReqAddBuf[i] = = 0)

{ReqAddBuf[i] = ReqEntryIp;

break;}

else if (i= =n)

{n = n+1;

i = n;

ReqAddBuf[i] = ReqEntryIp; }

}

}

当接收到一个ARP响应报文时,察看它的源IP地址是否记录在案,如果有,则更新ARP高速缓存;如果没有,丢弃该响应报文。C语言描述如下:

if (ReceivingResPack= =1)

{ for (i=1; i<=n ; i++)

{if (ReqAddBuf[i]= = ResEntryIP)

{ ReqAddBuf[i]=0;

UpdateArp( );

break;}

else if (i= =n) DelResPack();

}

}

该方案可以通过修改TCP/IP内核源代码(主要是修改广播ARP请求函数arprequest和处理接收到的ARP报文的函数in_arpinput)得以实现;也可以做一个软件,在每次发送和接收ARP报文时进行相应处理。

(4)使用ARP服务器。ARP服务器保存有局域网内各主机的IP地址和MAC地址的映射信息,并且禁用局域网内除服务器之外各主机的ARP应答,仅保留服务器对接收到的ARP请求进行应答。但是必须要保证ARP服务器的正常运行,不被黑客攻击。

(5)使用防火墙等安全产品。现在大多网络公司在防火墙等安全产品中加入了对ARP欺骗的防范,它们通常是从底层驱动对所有ARP欺骗数据包进行识别和屏蔽,使ARP欺骗攻击无功而返。

依据ICMP的重新定向,ARP欺骗攻击可以跨网段进行,这样就扩大了ARP进行攻击的范围,这对于ARP欺骗的防御又增添了难度。由于ARP本身的设计问题,使得要彻底避免ARP欺骗攻击几乎不可能。因此,除了做好防范以外,经常查看当前的网络状态,对网络活动进行分析、监控,采取积极、主动的防御行动是保证网络的安全和畅通的重要和有效的方法。

上一篇:解析GSM干扰问题
下一篇:关于如何应用openVPN

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料