无线钓鱼是一个广受关注但难以根治的热点安全话题。本文中,我将以攻击者视角揭露无线钓鱼攻击的技术原理,包括DNS劫持、Captive Portal、JS缓存投毒等有趣的攻击利用。随后将探讨企业该如何帮助员工应对无线钓鱼攻击。企业内做钓鱼热点防护就够了吗?如何进行有效的无线安全意识培训?使用VPN就能抗住所有攻击?员工在非信任无线网络中进行远程办公是不可避免的安全挑战,零信任产品带来了更多的解决思路。
1. 无线钓鱼的背景
2019年,我在前公司时配合湖南卫视《新闻大求真》栏目组共同制作了一期关于公共无线热点安全性的节目,曾直观地呈现了公共无线热点的危险性。
从无线网络接入者的角度来看,其安全性完全取决于无线网络搭建者的身份。受到各种客观因素的限制,很多数据在无线网络上传输时都是明文的,如一般的网页、图片等;还有很多网站或邮件系统甚至在手机用户进行登录时,将账号和密码也进行了明文传输或只是简单加密传输。
因此,一旦有手机接入攻击者架设的钓鱼热点,通过该网络传输的各种信息(包括账号和密码等)就有可能被攻击者所截获。
1.1 Wi-Fi绵羊墙
很长时间中,无线网络的安全风险一直未被公众所熟知。2015年的央视3·15晚会“钓鱼热点”环节的演示,才第一次让国内较为广大的群体对此有了直观认识。
在晚会现场,观众加入主办方指定的一个 Wi-Fi 网络后,用户手机上正在使用哪些软件、用户通过微信朋友圈浏览的照片等信息就都被显示在了大屏幕上。不仅如此,现场大屏幕上还展示了很多用户的电子邮箱信息。
特别值得一提的是,主持人在采访一位邮箱密码被展示出来的现场观众时,这位观众明确表示,到现场以后并没有登录电子邮箱。造成这种情况的原因是该用户所使用的电子邮箱软件在手机接入无线网络后,自动联网进行了数据更新,而在更新过程中,邮箱的账号和密码都被进行了明文传输。这个现场实验告诉我们:攻击者通过钓鱼热点盗取用户个人信息,用户往往是完全感觉不到的。
这个演示环节的灵感其实是来源于 DEFCON 黑客大会 Wireless Village 上有名的绵羊墙(The Wall of Sheep)。绵羊墙将收集的账号和隐匿的密码投影在影幕上,告诉人们:“你很可能随时都被监视。”同时也是为了让那些参会者难堪——来参加黑客大会的人,自身也不注意安全。
1.2 真实案例
l用户在钓鱼热点中进行网购导致密码泄漏,被盗刷2000元。
l咖啡店无线网络被植入恶意代码,利用用户设备挖掘门罗币。
l腾讯内网有员工反馈在地铁站中自动连上伪造的公司热点“XXXXWiFi”,被迫浏览“反宣文案”。2. 无线钓鱼底层原理探析
本节将通过搭建一个无线钓鱼热点,展示该攻击方式的危害性、隐蔽性和低成本性。读者将学习到构造一个精密的无线钓鱼网络所涉及的所有实现原理,包括如何使用无线网卡创建热点、如何吸引更多用户连接热点、如何嗅探网络中的敏感信息、如何利用钓鱼网页获取用户敏感信息以及如何配置 Captive Portal 强制用户访问钓鱼界面。
需要注意的是,本节的实验需要无线网卡支持 AP 模式才能建立热点,如Atheros AR9271、Atheros RTL8812等。
2.1创建无线热点
hostapd是用于AP和认证服务器的守护进程,它实现了与IEEE 802.11相关的接入管理,支持IEEE 802.1X、WPA、WPA2、EAP、OPEN等认证方式。首先,创建配置文件open.conf:
#open.conf
interface=wlan0
ssid=FreeWiFi
driver=nl80211
channel=1
hw_mode=g
其中 interface 表示无线网卡接口名称,ssid 表示热点名称,channel 表示信道,hw_mode 用于指定无线模式,g代表 IEEE 802.11g。读者可根据实际情况做相应修改。
除了创建接入点本身外,还需要配置 DHCP 和 DNS 等基础服务。 dnsmasq 是一款可同时提供 DNS 和 DHCP 服务功能、较易配置的轻量工具。其默认配置文件为/etc/dnsmasq.conf,其中包含大量的注释,用以说明各项功能及配置方法。在默认情况下,它会开启 DNS 功能,同时加载系统/etc/resolv.conf 文件中的内容作为上游 DNS 信息。只需要在配置文件中设置特定的 DHCP 地址池范围和所服务的网络接口即可。代码如下:
#/etc/dnsmasq.conf
dhcp-range=172.5.5.100, 172.5.5.250, 12h
interface=wlan0
在运行 hostapd 创建热点前,还需要使用几条命令消除系统对网卡 AP 功能的限制,同时为网卡配置 IP 地址、掩码等信息,最后才能启动 hostapd 程序。命令如下:
nmcli radio wifi off
rfkill unblock wlan
ifconfig wlan0 172.5.5.1/24
systemctl restart dnsmasq
hostapd open.conf
2.2 吸引用户连接
将热点名称设置为 Free WiFi 类似的字眼就能吸引许多蹭网的用户主动连接。除此外,攻击者还有其他办法让手机等设备自动连上热点,例如构建一个用户之前连过的热点名称(如CMCC、StarBucks 等),同样为无加密的方式。当无线设备搜索到该同名、同加密类型的历史连接热点(后文称为已保存网络列表)就会尝试自动连接。那么,是否可以通过某种方式获取无线设备的已保存网络列表信息呢?
无线设备为了加快连接速度,在执行主动扫描时会对外广播曾经连接过的无线热点名称。一旦攻击者截获这个广播,自然就能知道用户连过哪些热点,随后把所有的无线热点名称伪造出来欺骗设备自动连接。
2004 年,Dino dai Zovi 和 Shane Macaulay 两位安全研究员发布了 Karma 工具。Karma 能够收集客户端主动扫描时泄露的已保存网络列表并伪造该名称的无密码热点,吸引客户端自动连接。
如上图所示,一个客户端发出了对两个不同热点名称(Home 和 Work)的 Probe Request 请求, Karma 对包含这两个热点名称的请求都进行了回复。这实际上违反了 802.11 标准协议,无论客户端请求任何 SSID,Karma 都会向其回复表示自己就是客户端所请求的热点,使客户端发起连接。
一款知名的无线安全审计设备——WiFi Pineapple(俗称“大菠萝”)便内置了 Karma 攻击的功能,由无线安全审计公司 Hak5 开发并售卖,从 2008 年起到目前已经发布到第七代产品。
Hak5 公司的创始人 Darren Kitchen 曾在一次会议上发表了有关的安全演讲。在现场,他开启Pineapple 进行演示,在屏幕上展示了一份长长的设备清单,包含黑莓、iPhone、Android 和笔记本电脑等。这些设备自认为连接到了宾馆或星巴克的 Wi-Fi 热点,实际上它们都受到了 WiFi Pineapple 的欺骗而连接到其所创建的钓鱼网络。
不过在今天,Karma 攻击已经不太好使了。因为各手机厂商了解到 Directed Probe Request 会泄露已保存网络列表信息,可能导致终端遭到钓鱼攻击,所以在较新版本的手机系统中都改变了主动扫描的实现方式:主要是使用不带 SSID 信息的 Broadcast Probe Request 取代会泄露信息的 Directed Probe Request,两者的对比如下图所示。
我们可以采取一些简单的策略吸引用户连接:
l选择一家提供免费无线网络、还提供电源和座位的咖啡馆
l热点名称改为与店里的免费热点名称一致
l同时发起deauth拒绝服务攻击使周围客户端掉线触发重连
如此就可以将周围的无线客户端吸引到我们的钓鱼热点上。
2.3 嗅探敏感信息
当我们的设备能通过无线或有线的方式接入互联网时,为了使用户设备上的软件有更多网络交互并获取更多的信息,可以将钓鱼网络的流量转发至拥有互联网权限的网卡,从而使钓鱼网络也能连上外网。可以按照下面的操作步骤进行。首先开启 IP 路由转发功能:
sysctl -w net.ipv4.ip_forward=1
随后还需设置 iptables 规则,将来自钓鱼网络的数据包进行 NAT(network address translation,网络地址转换)处理并转发到外网出口。
iptables -t nat - POSTROUTING -o eth0 -j MASQUERADE
当用户连入网络后,由于所有的网络请求都将经由我们的网卡进行转发,所以可以使用 Wireshark、 Tcpdump 等工具直接观察经过该无线网卡的所有流量。
Driftnet 是一款简单、实用的图片捕获工具,可以很方便地抓取网络流量中的图片。使用
driftnet -i wlan0
命令运行 Driftnet 程序,会在弹出的窗口中实时显示用户正在浏览的网页中的图片。
2.4 配置恶意DNS服务
很多时候,我们会面临无外网的情况,用户设备上的软件由于无法与其服务器交互,大大减少了敏感信息暴露的机会。除了被动嗅探流量中的信息外,还可以在本地部署钓鱼网站来诱导用户填入敏感信息。
无线客户端连接网络时,通过 DHCP 服务不仅能获取到本地的 IP 地址,还包括 DHCP 服务指定的 DNS 服务地址。当我们可以决定用户的 DNS 解析结果时,钓鱼攻击就可以达到比较完美的效果——界面和域名都与真实网址一致。在本节中,我们将学习如何操纵用户的 DNS 解析结果,从而将用户对任意网址的访问解析到本地。
实验目的:克隆 www.google.cn 界面到本地,并使无线客户端对指定网页的访问指向该克隆界面。
(1)打开网页 www.google.cn,通过把网页“另存为”的方式,将代码下载到本地。接着需要配置 Web 服务器,以 nginx 为例,打开配置文件/etc/nginx/sites-enable/default,输入以下内容:
server {
listen 80 default_server;
root /var/www/fakesite;
index index.html
location / {
try_files $uri $uri/ /index.html;
}
}
(2) 该配置文件指定本地 Web 服务监听 80 端口并以/var/www/fakesite 为根目录,将下载的 HTML代码放置到 Web 目录中并重启 nginx 服务,随后通过浏览器访问 172.5.5.1 查看效果。随后对 DNS 服务进行配置,同样打开 dnsmasq 的配置文件/etc/dnsmasq.conf,以 address=/url/ip的格式写入解析规则,表示将指定 URL 解析到指定 IP 地址。如果 url 处填写为#,将解析所有的地址,随后重启 dnsmasq 服务。
#/etc/dnsmasq.conf
address=/#/172.5.5.1
systemctl restart nginx
systemctl restart dnsmasq
(3)通过手机连接该热点,对任意地址进行访问测试(如 baidu.com),如果配置无误,将出现如图所示的效果。
2.5 配置Captive Portal
Captive Portal 认证通常被部署在公共无线网络中,当未认证用户连接时,会强制用户跳转到指定界面。
在 iOS、Android、Windows、Mac OS X 等系统中其实已经包含了对 Captive Portal 的检测,以 Android 系统为例,当设备连入无线网络时会尝试请求访问clients3.google. com/generate_204并根据返回结果来判断网络状况。
l当返回 HTTP 204 时,表示网络正常;
l如果返回了HTTP 302 跳转,手机就会认为该网络存在网络认证,并以弹窗等方式显示在手机中,如下图所示的提示信息。
liOS、Windows 等系统也都采取类似的检测逻辑。
单击该提示就会直接打开认证界面。显然,一个热点配置了 Captive Portal 后会更显得像是一个“正式”的热点,同时利用该特性能让用户直达钓鱼界面。
我们使用iptables来转换流量。iptables 是一种能完成封包过滤、重定向和网络地址转换(NAT)等功能的命令行工具。借助这个工具可以把用户的安全设定规则执行到底层安全框架 netfilter 中,起到防火墙的作用。
通过 iptables 对来自无线网络的流量进行配置:
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j DNAT --to-destination 172.5.5.1:80
iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j DNAT --to-destination 172.5.5.1:53
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 53 -j DNAT --to-destination 172.5.5.1:53
在上述命令中,第1行表示将来自 NAT 网络的对 80 端口的数据请求都指向 172.5.5.1 的 80 端口;第 2~3 行表示将来自 NAT 网络的对 53 端口的 TCP、UDP 请求都指向 172.5.5.1的 53 端口。