「突破AirDrop匿名溯源技术难题」

| 通信

达姆施塔特工业大学SEEMOO实验室研究发现,AirDrop存在泄露用户电话号码、电子邮箱地址的漏洞,并于2019年5月将这一漏洞通报苹果公司。研究人员在2021年表示,苹果收到其通报后并未对漏洞作出修补。2024年了,我们依然可以亲自在最新系统上看看这是多么呵呵的设计。


图中第一部分DISCOVERY中的short hashed identifiers通过低功耗蓝牙广播发送,任何第三方人员都可以环境中直接监听并分析。我们需要一部被攻击的苹果设备,和一台BLE抓包工具(例如macOS上的Additional Tools for Xcode工具集中的PacketLogger.app)。

  1. 开始蓝牙抓包。

  2. 在要被攻击的苹果设备随便点开一个分享面板,点击AirDrop。

  3. 结束抓包。

用Wireshark打开抓包结果,以btcommon.eir_ad.entry.data[0]==5为条件过滤:

可以看到左下方Data字段有20字节的二进制数据未被解析,furiousMAC编写了Wireshark的解析器,可惜没有并入主线,需要自己编译。这20字节并不长,为了省事,我们直接配合数据结构图人工解析一下。

重要的是协议版本01字节后的8个字节,这是四组二字节(16比特)短哈希,分别对应三个电子邮箱地址和一个电话号。16比特的计算方法是SHA-256(SHA2-256,SHA3也有256比特版本,这里是SHA2)的高位16比特。假如Apple ID注册的电话号是18888888888,因为是国际范的苹果,所以要冠以86国际长途代码,看看ee29是不是这四个哈希之一。

$ echo -n "8618888888888" | sha256sum
ee29b05ca5f75d358ef62c49e82fb861e41c624e47dc48810df33829c1159147  -

邮箱字段同理,如果是airdrop@apple.com,看看d4c5是否在其中。

$ echo -n "airdrop@apple.com" | sha256sum
d4c5d1e66e13d3e9de90d5dbd781b60c9d5f44d5bf6b0b0800c6edae4c8968f2  -

不过我的实测发现电话、邮箱的字段位置和图片标注并不完全一致,同时还有一个哈希找遍通讯录也找不到匹配,不过已足够说明问题。

单论一个电话哈希,16比特,直接将可能的电话号码数量除以65536,全国大约能有一亿个Apple ID?这么一除就只有一千多候选项了。如果你和运营商关系比较好,可以直接找他们给到特定时间地点范围基于基站记录的手机号信息,可能的全集大大减小。如果配合手机号和邮箱耦合查询,那就更精确了。所以这AirDrop上来一通BLE advertisement直接安全性清零。

更可怕的是如果觉得16比特不够精确,那不是问题。信令交互图中第二部分AUTHENTICATION交互validation record是完整256比特版本哈希,不再使用BLE,改用基于Wi-Fi的AWDL,虽然在HTTPS里,不是明文了,但如果能控制AirDrop双方中的一方,那这几个完整值就是随便信手拈来。提取HTTPS用的TLS证书有点麻烦,但即使没有证书,用Console.app就能看到一部分哈希。这里用其命令行工具:

$ log stream --predicate "eventMessage BEGINSWITH 'Hashes in validation record'"
Filtering the log data using "composedMessage BEGINSWITH "Hashes in validation record""
Thread     Type        Activity             PID    TTL  
0x155b     Default     0x0                  719    0    sharingd: [com.apple.sharing:AirDrop] Hashes in validation record: Email=[hhhhh...hhhhh, hhhhh...hhhhh, hhhhh...hhhhh], Phone=[hhhhh...hhhhh]

好了,虽说不知为什么有省略号,但这已经有40比特了……比方还是刚才的18888888888手机号,这里就是Phone=[ee29b...59147],冲突的概率已经从65536分之1,降到一万亿分之一,全世界没有这么多电话,也大概没有这么多邮箱,精准查询已经是板上钉钉了。

哈希能隐藏信息,但前提是输入空间非常大,电话、邮箱都是基于有限长度的文本甚至纯数字信息,根本无法通过哈希达到隐藏信息的目的。比电话号码长得多的身份证号轻松求逆,「现场开盒」,网友群嘲,结果……苹果也这样。

这当然并不能在任何程度上说明其他厂家的同类产品就一定安全。相反,正反两方面的经验都无数次表明,只有彻底理解一套系统在做什么,知晓其运行机制的每一个细节,才能对安全性下结论。很多安全感都是缺乏认知而产生的错觉。

但AirDrop这实在是太愚蠢了,无法理解为什么传文件要发送甚至广播双方的电话号码和电子邮箱信息。

暂时的解决方案是不要在公共场合使用AirDrop。特别是在公交、地铁上,不要打开屏幕是最好的,杜绝一切问题。其实本来交通工具上就不适合看电子产品啊。可以听听广播,闭目养神。


链接

AirDrop security - Apple Support

AirDrop Message

PoC: AirDrop Phone Number Leak

Breaking and Fixing Apple AirDrop

网神洞鉴司法鉴定所突破AirDrop匿名溯源技术难题