以下文章来源于Linux内核那些事 ,作者songsong001
平时我们都喜欢连接公共的免费 WIFI,其实公共 WIFI 是非常危险的。因为黑客可以连接到公共 WIFI,然后使用 ARP欺骗
的攻击手法来获取到你所有的上网数据。
本文主要介绍怎么使用 ARP欺骗
来入侵公共 WIFI,让大家知道使用公共 WIFI 的危险。
注意:本文只用于技术交流,请勿用于恶意用途。
上网的过程
一般来说,我们使用手机上网都需要连接无线路由器(WIFI),如下图:
从上图看出,我们上网都需要连接到路由器,而且所有的数据都需要经过路由器。
那么,手机是怎样通过路由器把数据发送出去呢?
手机要把数据发送到互联网,首先需要把要发送的数据打包成 以太网帧
,然后再把 以太网帧
发送给路由器,路由器收到 以太网帧
后,会把此 以太网帧
发送出去。以太网帧
由 以太网头部
和 数据
部分组成,如下图:
从上图可以看到,以太网协议
的头部由 源MAC地址
、目标MAC地址
和 上层协议类型
组成,MAC地址
就是指机器(手机)网络接口的物理地址,比如手机可以从无线局域网信息中查看,如下图所示:
源MAC地址
就是我们手机的 MAC 地址,而 目标MAC地址
就是路由器的 MAC 地址。如下图所示:
但通常来说,路由器的 MAC 地址我们是不知道的,需要通过 ARP协议
来获取路由器的 MAC 地址。ARP协议
的功能就是通过目标机器的 IP地址
来获取其 MAC地址
,所以我们只需要知道路由器的 IP地址
即可通过 ARP协议
来获取其 MAC地址
。
ARP协议
在之前的文章介绍过:ARP协议,所以这里就不再作介绍。
ARP欺骗原理
从上面的分析可知,手机要上网首先要连接到路由器,然后把要发送的数据包打包成 以太网帧
,再把 以太网帧
发送给路由器。
以太网帧
需要知道路由器的 MAC地址
,但通常来说我们只知道路由器的 IP地址
(通常路由器的 IP地址
为 192.168.1.1
),所以需要通过 ARP协议
把 IP地址
转换成 MAC地址
。
ARP欺骗
就是通过使用 ARP协议
把路由器的 IP地址
转换成 中间人机器
的 MAC地址
,如下图所示:
从上图可以看出,电脑A发送了一个 ARP消息
给手机A,告诉它 IP地址
为 192.168.1.1
的 MAC地址
为 AE:12:BD:8C:92
,也就是电脑A的 MAC地址
。
这样,手机A就误以为路由器的 MAC地址
是 AE:12:BD:8C:92
,从而每次发送数据到互联网时,都需要先把数据发送给电脑A,从而电脑A成为了 中间人
,所以这个攻击也叫 中间人攻击
。
数据流向如下图:
这样,电脑A就可以截获手机A发送的所有数据。电脑A截获到手机A的数据后,就可以修改手机A发送的数据,从而达到攻击的效果。
试想一下,如果当手机使用支付宝支付时,把收款的账号改为攻击人的账号,那就会把钱转到攻击人的账号。
ARP欺骗实验
本来我想自己写个程序来实现 ARP欺骗
攻击的,但是这样可能会导致这篇文章变得枯燥,所以这里直接使用开源的 ARP欺骗
工具来做试验,这个工具就是 arpspoof
,下载地址在:https://github.com/alandau/arpspoof
首先,我们把 arpspoof
下载到本机,然后确认要攻击的目标机器的 IP地址
,如:192.168.1.13
,然后使用 arpspoof
开始攻击,如下:
C:\> arpspoof.exe 192.168.1.13
Resolving victim and target...
Redirecting 192.168.1.13 (00:11:22:33:44:55) ---> 192.168.1.1 (AE:12:BD:8C:92)
and in the other direction
Press Ctrl+C to stop
看到上面的输出说明 arpspoof
已经开始工 (攻) 作 (击)。
然后,我们打开 wireshark
抓包攻击来查看手机A的上网数据包,如下图:
从抓包工具的结果可以看出,IP地址
为 192.168.1.13
的数据包都经过了我们的机器,如果这时对这些数据包稍作修改,就可能会导致很严重的问题。
所以,使用公共 WIFI 是非常危险的行为,有以下几个风险:
泄露账号密码。
数据可能被恶意修改。
收到一些奇怪的消息(如广告)。
那么,怎么杜绝这个问题呢?很简单,就是使用手机卡流量上网(笑...)。
其实,除了 中间人攻击
外,ARP欺骗
还能让连接同一个路由器的所有机器都不能上网,就是通过 ARP欺骗
将路由器的 IP地址
映射为一个不存在的 MAC地址
,这样就会导致内网的机器因为把数据发送给不存在的路由器而丢包,从而导致其不能上网。
总结
这篇文章主要通过 ARP欺骗
这种攻击手段来说明,使用公共 WIFI 是一种危险的行为,所以在使用公共 WIFI 时好不要使用移动支付,否则就可能会被盗取账号或者钱财等。
当然,看完这篇文章也不要做恶意的用途,否则后果自负(当然做恶意用途也需要点技术含量的)。