Big Bug Ban

兴趣 践行 创新

Archive for the ‘java’ tag

ARP攻击和防御

 

去实习前还是得找点事情做.于是决定写下这篇文章.

一.ARP概述

1) IP数据包常通过以太网发送。但是以太网设备并不识别32位IP地址:它们是以48位以太网地址(就是所谓的MAC)传输

以太网数据包的。因此,必须把IP目的地址转换成以太网网目的地址。在这两种地址之间存在着某种静态的或算法的映

射,常常需要查看一张表。地址解析协议(Address Resolution Protocol,ARP)就是用来确定这些映象的协议

2) ARP工作时,会向整个子网广播信息,ARP发送分两步。第一步request,第二步reply。第一步的时候,需要查询的主

机会询问整个子网,谁有我需要的ip?如果有主机拥有这个ip,目的主机就发送一个回应消息,并包含自己的MAC地址。

查询主机收到后便会更新自己的ARP表

下面用抓包工具给大家说明下,抓包工具我使用的是Wireshark,过滤只显示arp包

image

根据上图 可以很明显的看到  首先QuantaCo_e3:77:0a (00:1e:68:e3:77:0a)这台电脑广播信息谁有192.168.0.3。请求包的最后含有请求主机的ip和mac,还有询问的ip

image

接着主机AsustekC_94:5e:76 (00:26:18:94:5e:76)  回应给我们的QuantaCo_e3:77:0a (00:1e:68:e3:77:0a) 并带上了自己的mac地址00:26:18:94:5e:76告诉我们它有192.168.0.3

image

然后看看我们电脑的ARP表,已经出现他了

image

之后如果我想和192.168.0.3通信就会使用00-26-18-94-5e-76这个MAC地址和目标主机进行通信

二.ARP欺骗

刚才说到了请求主机是向整个内网发送的请求,然后目标主机回应。这样就出现一个问题。如果我其实并不是目标主机

呢?于是我发送发布虚假的ARP报文,然后我就可以扮演某些机器,或者顺便对数据流进行简单的修改。

1) 典型的路由欺骗

一个正常的局域网内应该像这样  ABC如果想和外网通信 都需通过路由器出去

image

但是如果A不停向BC发送ARP报文 包里面封装上路由的IP和自己的MAC.把自己伪装成路由

这样BC都会认为A是路由器,于是傻傻得把数据都交给A了..与此同时路由也会发送自己正确的ARP..

如果A不把包再转发出去..结果就是BC端端徐徐不能上网,或者很难才能联上外网

image

就变成这样了  A拦截到所有的通信包,并可以进行分析

1.1) 代码实现

我用java实现了一个很简单的ARP攻击例子,java不能操作底层网络包.所以我们需要一个

其他的辅助工具jpcap [download id=”32″] 这个东西因为是使用jni调用的,以下的以win为例子..linux需要改下包

安装的时候注意2点:

1. 请先安装winpcap或者ubuntu

2.使用32位的jdk或者jre   否则它都不会工作

核心是这些

arp.sender_hardaddr=device.mac_address;

arp.sender_protoaddr=gateway.getAddress();

改变报文ip为路由的ip  改变mac为我自己的mac

伪装路由器向整个局域网发送谁有192.168.0.5请告诉192.168.0.1

目标主机收到后.便会改变他自己电脑上的arp表.把192.168.0.1的mac对应成我的电脑的

结果就是之后的请求他都认为我是路由器从而我可以得到他发送的报文

示例代码里面拦截所有80端口,,可以看到被攻击主机发送的http请求..cookie信息当然也在啦..

然后我们可以..

源码:  [download id=”33″]

2) 针对服务器的ARP攻击

这类攻击常见于服务器群, vps群..内网上的主机被同网段的攻击主机攻陷..结果是您的网站不

定期被跳转到其他网站或者出现其他很奇怪的页面

原理和刚才一样.但是这类软件同时还有构造伪装的http包的功能.会把服务器正常的包给拦截下

转而发送自己的包给客户端.于是造成刚才说的现象..这类攻击比较隐蔽..而且在国内主机里面都比较普片

image

三.ARP防御

1) 手动绑定网关

ARP表分为两种    动态的和静态的   用ARP协议进行更新的都是动态的

但是我们通过可以手动绑定ARP表的方式  静态的arp不会受影响

2) 使用软件

其实原理和上面的差不多  最好的解决办法就是绑定静态arp..

3) 有带保护功能的路由

但是如果是路由arp欺骗也基本无效..因为被欺骗的是其他内网用户 不是路由

综上  最简单方便的办法就是用arp –s 绑定静态路由

文中资料下载:

库:  [download id=”32″]
源码:  [download id=”33″]

Written by princehaku

10月 13th, 2011 at 11:04 上午