具有局域网扫描功能的ARP攻击模型的实现
2011-10-25李华峰
李华峰,陈 虹
(1.唐山师范学院 计算机系,河北 唐山 063000;2.河北广电网络集团 唐山子公司,河北 唐山 063000)
随着我国经济的不断发展,网络的普及化程度也越来越快。但是由于网络通信协议本身的不完善性,ARP攻击频繁的出现在各个单位的局域网中。ARP攻击原理是通过伪造IP地址和MAC地址的对应关系来实现的,本身利用了ARP协议的漏洞。由于导致了IP和MAC的错误对应,会破坏计算机和交换路由器的ARP路由表。从而导致计算机不能正常联网,严重时可以窃取内网用户的信息,从而给用户造成了巨大的损失。
1 地址解析协议(ARP)
网络通信协议中,为了能够在局域网中实现快速的通信,在网络中的每一台计算机和交换路由器中都会有一段缓存专门用来保存局域网内的 ARP信息。以此来实现 MAC地址和ARP地址的相互对应。ARP协议规定一个ARP数据包的格式应当包含以下信息:目的地址,源地址,帧类型,硬件类型,协议类型,硬件地址长度,协议地址长度,包类型,发送端MAC,发送端IP,目的MAC,目的IP。[1]
当局域网中任意一个节点(计算机或交换路由设备)需要进行通信时,往往需要向外发送一个ARP包,而其他的通信节点接受到了这个包时,就会把MAC和IP地址的对应关系存入到ARP的缓存表中。以后再需要使用时,直接在缓存表中查询即可。ARP缓存表由于容量的限制,采用了一种“老化机制”。这样可以减少ARP缓存表的长度,同时加快查询的速度。
2 ARP攻击的原理
由于通信协议中,ARP地址协议本身存在着缺陷,ARP表中采用的是动态的更新的方式,同时通信的节点对网络中的ARP数据包并没有验证的机制。当局域网中一个节点修改了本来应该发送的ARP数据包,将其中的源地址,发送端MAC,发送端IP,目的MAC,目的IP数据加以修改,成为了一个欺骗性的数据包,而这个数据包到达其他节点时,往往也更新了这些节点的ARP缓存表。
一个完整的ARP攻击过程包括:
步骤1:首先攻击发起节点,需要伪造一个ARP REPLY数据包,将这个数据包中目的地址修改为目标节点,而源地址通常修改为攻击发起节点的MAC地址,而源IP修改为网关的IP。
步骤2:修改完成以后,在局域网中发送这个数据包。
步骤3:当目标节点接受到这个修改以后的ARP REPLY包,由于采用动态更新的机制,于是会刷新本机的ARP数据表,将(网关IP,网关MAC)刷新成(网关IP,攻击发起节点的MAC)。
步骤4:当目标节点再次需要访问外部时,由于所有的数据需要先通过网关,而这时因为目标节点的ARP缓存表中的数据已经被修改,本来的数据就全部发送到了攻击发起机。
步骤5:攻击发起机伪造一个ARP REPLY包,在源MAC地址填入攻击发起机的MAC地址,而源IP部分填入目标节点的IP,目的地址填入网关MAC、IP,然后将这个包发给网关,网关接收到这个伪造的ARP REPLY包后,由于源IP为目标节点的IP,于是在它的ARP缓存表里刷新了一项,将(目标节点的IP,目标节点的MAC)刷新成(目标节点的IP,攻击发起机的MAC)。
步骤6:这时候外部传给目标节点的数据包经过网关时,就通通转发给攻击发起机。这样就实现了阻止目标节点上网的目的。将接收到的包,将目的地址部分修改,其它数据不动的再转发出去,这样就达到了监听的目标节点所有的对外数据包[2]。
3 ARP欺骗技术的具体实现
3.1 ARP欺骗中局域网内扫描功能的实现
由于ARP欺骗通常要在局域网内实现,而且必须知道被欺骗的主机的IP地址和MAC地址,所以为了更好的模拟ARP的欺骗,特地设计了扫描模块,来取得局域网内可以攻击的目标。扫描模块效果如图1。
图1 IP-Mac扫描结果
采用了线程技术的扫描模块的AddIPData模块,主要的实现代码如下
hostAddress=InetAddress.getByName(host);
hostIP=hostAddress.getHostAddress();
hostName=hostAddress.getHostName();
Process pr=rt.exec("nbtstat -a "+host);
bufReader=new BufferedReader_
(new InputStreamReader(pr.getInputStream()));
physicalAddress="未知";
for(int i=1;i<=30;i++){
line=bufReader.readLine();
if(line!=null && line.indexOf("MAC Address")!= -1 ){
physicalAddress = line.substring(18,35);
System.out.print(physicalAddress);
}
}
3.2 局域网内欺骗功能的实现
基于 ARP欺骗的原理,设计了 ARP欺骗模型并通过Java语言实现,主要包含了下列的4个模块。
第一个模块是用来与物理设备的通信的模块。这个模块的主要功能是用来取得和网卡等网络设备的连接。通过编程接口来实现对物理设备的操作。主要代码如下
private NetworkInterface[] devices;
private NetworkInterface device;
devices=jpcap.getDeviceList();
device=devices[1];
第二个模块是修改ARP数据包数据的模块。在这个模块可以对ARP数据包里的目的地址,源地址,帧类型,硬件类型,协议类型,硬件地址长度,协议地址长度,包类型,发送端MAC,发送端IP,目的MAC,目的IP信息进行各种操作。
EthernetPacket ethPacket=new EthernetPacket();
ethPacket.frametype=EthernetPacket.ETHERTYPE_ARP;
ethPacket.dst_mac=targetMAC;
ethPacket.src_mac=netDevice.mac_address;
arpP.datalink=ethPacket;
第三个模块是发送ARP包。这个模块的主要功能修改好了以后的数据包需要发送到目标地址。
第四个模块用来转发接收到的ARP包。这个模块的主要功能将目标计算机的数据包再转发到网关,以及将从网关得到的数据转回到目标计算机。执行结果如图2。
图2 ARP攻击实现
4 ARP攻击防范措施
针对ARP攻击的实现机制,本文提出了应对ARP攻击的可以使用的防范措施:
(1)采用静态绑定的方式
鉴于ARP攻击的动态实时的规律,可以采用静态绑定的方式对ARP攻击进行防范。将内网IP和MAC静态绑定,在网内把主机和网关都做IP和MAC绑定,同时在网关也进行静态绑定。静态绑定方式的缺点是需要对所有的主机都进行绑定因而需要大量的工作量[3]。
(2)使用专门的防护软件
最常见的防护软件就是ARP防火墙,通常采用系统内核层拦截技术和主动防御技术,可解决大部分欺骗、ARP攻击带来的问题,从而保证通讯安全(保障通讯数据不被网管软件/恶意软件监听和控制)、保证网络畅通。
(3)使用具有ARP防护功能的硬件网络设备。
5 结论
分析了ARP的病毒攻击机理以及这些攻击会给局域网内的用户带来的危害,详细介绍了如何开发一个具有局域网扫描功能的ARP欺骗模型,并针对性地提出防范ARP攻击的措施。