测试环境说明
网关: 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发生后,给予用户如下提示:
apk截图: