Arp欺骗原理及Android环境下的检测方法

  • A+
所属分类:移动安全

测试环境说明

网关:
IP:172.20.150.1  mac:24050FCE53
靶机(手机):
IP:172.20.150.20  mac:000822D806D2
攻击主机(虚拟机):
IP:172.20.150.2   mac:6C40089A1F16
Wifi接入点(360免费wifi):
BSSID: 24050FCE53(就是网关的mac),SSID:private(wifi名称)
攻击场景:
攻击主机利用Cain对网关和靶机进行双向Arp欺骗。 Arp工作原理及欺骗原理

局域网的网络流通不是根据IP地址进行,而是根据MAC地址进行传输。

当主机A要和主机B通信时,这时候假定A,B刚开机,或者ARP缓存表是空的。既然谈到通信,那么一般来说,它们应该对数据完成一个封装和解封装的过程。其他的层次我们先不谈,只看数据链路层和网络层。在A这边,做为一个数据的源,它在发送数据时,数据被封装到网络层,需要添加一个IP报头,里面有源和目标IP地址字段,源的IP和目标的IP都知道,那么是可以顺利的封装的,但是封装好的包交给数据链路层,进行再一次封装时,问题发生了,因为在数据链路层,需要封装成帧,那么在帧的头部有源MAC和目标MAC字段,源MAC是它自己,当然知道,但是目标的MAC呢?没有!也就是说,没有实际的地址。那封装还能继续下去吗?那么通信难道要终止吗?

其实在封装之前,主机A将会查看自己的ARP缓存表(我们可以通过手工查看start—run—cmd—arp-a)。如果缓存表中存在目标主机(主机B)的MAC和IP信息,那么就可以顺利的成帧。如果没有的话,那么它将经历一次ARP的解析过程。它发出一个broadcastrequest(一个广播请求,请求对方的MAC地址。)用sniffer可以看到。

这个ARP请求数据里面有一个问题:“喂,我是192.168.12.1,我的MAC地址是A。192.168.12.2,你的MAC地址是多少?”这个时候,该网段中所有的主机都能收到该广播,只有IP地址是192.168.12.2的主机会响应(response)。同时接收主机会把A的IP地址和MAC地址的对应关系记录下来,放入ARP缓存中。通过了这个过程,A和B都有了对方的IP和MAC的对应关系了,那么第二层,第三层的封装就可以顺利的完成。

大家可以想像一下,如果在A发出广播后,收到了来自B的回应请求,同时,又有一个第三者C通过某种方式监听到了A—B的对话,并截获了B回应给A的arpresponse。他可以把这个回应中的MAC地址字段该成另一个MAC地址,再把修改过的帧交给A。这个时候A是不是拿到了两种回应呢?它会以谁为准呢?它会以后来的为准。通过截获修改,A将缓存被修改后的MAC。A用错误的MAC封装数据帧,数据就被发送的C可以控制的主机上了。

下图展示arp欺骗发生后,靶机的arp表情况:

正常arp表      

攻击后arp表 

路由表

计算机网络中,路由表(routingtable)或称路由择域信息库(RIB,RoutingInformationBase),路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。简单来说,路由表是完全工作在网络层的,根据路由表信息,主机将想要发送的ip数据从指定的网卡上发出。

下图展示靶机的路由表情况:

注:

Destination,Gateway,Mask均采用逆向十六进制表示法,比如:019614AC,其实表示的是AC:14:96:01,转换为十进制就是:172.20.150.1

Destination,路由的目标网段,会和Mask进行运算求得网段,运算结果是00000000表示所有网段,上图的第一条记录表示:所有网段的数据的网关是172.20.150.1,由wlan0网卡发出。

Wifi的BSSID和SSID

SSID:ServiceSetIdentifier(服务集标识),SSID技术可以将一个无线局域网分为几个需要不同身份验证的子网络,每一个子网络都需要独立的身份验证,只有通过身份验证的用户才可以进入相应的子网络,防止未被授权的用户进入本网络。SSID就是WIFI名称

BSSID:BasicServiceSetIdentifier(基本服务单元标识符),BSSID就是Wifi接入点的Mac地址。

下图展示靶机的BSSID和SSID情况:

图中可以看出,BSSID为24:05:0f:0f:ce:53,SSID为:private

Android环境下Arp欺骗检测原理

用户在使用手机连接wifi时,通常是搜索wifi名称,输入密码,然后连接上网,很少有情况会需要自己再去配置网关,流量也仅仅是和网关在交换。因此,用户默认的网关就是wifi接入点,于是wifi的BSSID和用户的网关mac将是同一个,基于此有了如下arp检测原理:

1.    获取BSSID,也就是网关的Mac(mac1)
2.    通过route表信息获取全网段路由对应的网关IP
3.    通过arp表,查询此网关IP对应Mac(mac2)

如果mac1和mac2相同,则表示没有arp攻击,如果不相同(mac2是arp欺骗引入的),则arp攻击正在发生。

衍生:如果用户配置了网关,也就是route记录的IP和BSSID将没有任何关系,根据arp发生并不会修改网关ip,可以不断监听arp缓存表中网关IP对应的mac是否在变化,变化则表示arp正在发生或者arp攻击结束,可以结合别的手段,比如长时间统计来确定正确的网关IP和Mac,当arp表中IP发生变化,则检测arp攻击发生。

其他

本文通过逆向wifi保护令的原理分析得出,wifi保护令能准确检测arp发生,wifi保护令一些技术细节如下:

1.    5s循环监听路由表和arp的变化,通过上述的原理来检测arp欺骗
2.    Arp发生后,给予用户如下提示:

a)    震动
b)    响铃
c)    断开当前连接wifi
d)    状态栏提示
e)    开启Activity,显示攻击发生

apk截图:

 

apk下载:http://pan.baidu.com/s/1qWmceLm

参考文档

arp原理介绍:http://www.huawei.com.cn/ecommunity/bbs/10151665.html?p=1

AC地址表、ARP缓存表以及路由表:http://dengqi.blog.51cto.com/5685776/1223132

arp命令:http://www.unix.com/man-page/linux/8/arp/

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: