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

测试环境说明

网关:
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的解析过程。它发出一个broadcast request(一个广播请求,请求对方的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的arp response。他可以把这个回应中的MAC地址字段该成另一个MAC地址,再把修改过的帧交给A。这个时候A是不是拿到了两种回应呢?它会以谁为准呢?它会以后来的为准。通过截获修改,A将缓存被修改后的MAC。A用错误的MAC封装数据帧,数据就被发送的C可以控制的主机上了。

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

正常arp表

攻击后arp表

路由表

在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。简单来说,路由表是完全工作在网络层的,根据路由表信息,主机将想要发送的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: ServiceSet Identifier(服务集标识),SSID技术可以将一个无线局域网分为几个需要不同身份验证的子网络,每一个子网络都需要独立的身份验证,只有通过身份验证的用户才可以进入相应的子网络,防止未被授权的用户进入本网络。SSID就是WIFI名称

BSSID: Basic Service SetIdentifier(基本服务单元标识符),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/

[作者/difcareer,本文属FreeBuf黑客与极客(FreeBuf.COM)原创文章奖励计划,未经许可禁止转载]

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2015-01-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jojo的技术小屋

原 一、了解web及网络基础

作者:汪娇娇 时间:2017年9月7日 了解web及网络基础 这章我们会介绍一下什么是HTTP,HTTP是用来干嘛的; 然后还会介绍和HTTP关系紧密的3个协...

2896
来自专栏Python中文社区

记一次惊心的网站TCP队列问题排查经历

作者:刘晓明,互联网公司运维技术负责人,拥有10年的互联网开发和运维经验。一直致力于运维工具的开发和运维专家服务的推进,赋能开发,提高效能。

1604
来自专栏人工智能LeadAI

这几个问题答不对,就别说精通TCP

网络协议那么多,为什么面试喜欢问TCP?原因无外乎两个:1、TCP协议直接与进程打交道,写网络程序要用;2、TCP协议设计十分精巧,在一个不可靠的IP网络上实现...

4108
来自专栏北京马哥教育

皇上请阅卷!【2016运维高考-考卷汇总】

一年一度高考时,马帮小伙伴也没闲着,做了一套“运维高考题”,那么现在就由你,没错,就是你————最敬爱的大众评审来一起阅卷啦! We want you!!! 先...

3489
来自专栏黑白安全

Nmap的使用

精细扫描,可以查看更详细的信息,如包含服务版本,操作系统类型,甚至还有traceroute..

1743
来自专栏同步博客

会话劫持

  在现实生活中,比如你去市场买菜,在交完钱后你要求先去干一些别的事情,稍候再来拿菜;如果这个时候某个陌生人要求把菜拿走,卖菜的人会把菜给陌生人吗?!当然,这只...

1083
来自专栏FreeBuf

DNS Tunneling及相关实现

*本文原创作者:novsec,本文属FreeBuf原创奖励计划,未经许可禁止转载 ? DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DNS协...

6867
来自专栏信安之路

渗透测试信息收集工具篇

如果知道目标的域名,你首先要做的就是通过 Whois 数据库查询域名的注册信息,Whois 数据库是提供域名的注册人信息,包括联系方式,管理员名字,管理员邮箱等...

4270
来自专栏代码永生,思想不朽

TCP流量复制工具,另一个tcpcopy

很多年以前,网易推了一个tcp流量复制工具叫tcpcopy。2013年07月我入职新公司,大概10月份接触到tcpcopy,为tcpcopy修了两个bug,一个...

1.7K7
来自专栏小白安全

web渗透思路及总结

(一)针对网站程序,不考虑服务器。 一、查找注入,注意数据库用户权限和站库是否同服。 二、查找XSS,最近盲打很流行,不管怎样我们的目的是进入后台。...

7057

扫码关注云+社区

领取腾讯云代金券