UglyBull

Crypto Anarchist, Linux/BSD nerd/geek, FOSS advocate Liberalist, Feminist, ex-NGOer

隐私与数据安全系列:MAC地址随机化,并未如你所想那么随机

编译:Mdrights

首刊于:https://mdrights.github.io/os-observe/posts/2017/06/MAC-%E5%9C%B0%E5%9D%80%E9%9A%8F%E6%9C%BA%E5%8C%96%E6%96%B0%E7%A0%94%E7%A9%B6.html

Posted on June 25, 2017

什么是 MAC 地址, 为什么要随机化它?

网络设备的接口(俗称网卡)上都有一个出厂时即设定进硬件的(即硬编码的)一组编码,全称“介质访问控制”(Media Access Control)地址(48位),位于链接层中。它是全球唯一的,由 IEEE组织向各厂商有偿分配,其设计用意是因为网络连接过程中需要对网络设备进行唯一性识别。

所以同时也带来了隐私问题,尤其是在那个欧洲次大陆,这是个严重的问题。解决办法就是给设备分配个随机的 MAC地址,让网关(网络的枢纽设备)及偷窥者无法对不同的 MAC地址产生关联,也就无法跟踪某一设备去过哪些网络。

随机化MAC地址的工具

  • 在 Linux/UNIX上 1.1 命令行手动:
$ openssl rand -hex 6 | sed 's/\(..\)/\1:/g; s/./0/2; s/.$//' (( 生成随机MAC格式的字串(注意有效的MAC字串的首两位数必须是偶数)
# ip link set dev interface down                              (( 先把网卡关闭
# ip link set dev interface address XX:XX:XX:XX:XX:XX         (( X就是你刚才上面生成的随机字串
# ip link set dev interface up

1.2 如果你用 NetworkManager (>1.4), 那你可以舒服地肆意设置你的MAC地址了, 见 他们开发者的博文: 1, 2

1.3 你还可以用 macchanger, macchiato 等等. 见 Archlinux 相关wiki。(用 Linux多好:)

$ sudo /System/Library/PrivateFrameworks/Apple80211.framework/Resources/airport -z

$ sudo ifconfig en0 ether $(openssl rand -hex 6 | sed ‘s/(..)/\1:/g; s/./0/2; s/.$//’)

$ networksetup -detectnewhardware

或,

$ openssl rand -hex 6 | sed ‘s/(..)/\1:/g; s/./0/2; s/.$//’ # 生成随机MAC格式的字串

$ sudo ifconfig eth0 down hw ether XX:XX:XX:XX:XX:XX && ifconfig eth0 up ```

2 macchiato (暂未在MacOS试过): https://github.com/EtiennePerot/macchiato
  • 移动设备呢? (过,下一题)

然后就一劳永逸了么?

当然不是, 特别是在移动设备上. 最近的 这个研究 显示, 移动设备(主要是它的操作系统) 并没有很好实施MAC的随机化, 其中或是操作系统开发者的主观设置(比如为了照顾用户体验), 要么是设备的芯片和固件对分配MAC地址的兼容性问题, 还有就是 802.11( WiFi) 无线网络协议本身的复杂性.

Whonix的博客 对这个论文做了简单的解读 (原文实在有点艰深晦涩—译者看了几天还瑟瑟发抖), 现经过译者对这两篇文字的综合理解, 再次解读如下. (有能力的童鞋欢迎继续解读~)

—-翻译开始—-

问题还是存在的. 智能手机的行为和一般计算机网卡(包括有线和无线的) 是不一样的, 因为分配给你电脑的MAC地址不会通过本地路由器被动发给本地网络之外的电脑. 这个意思就是电脑的MAC地址不会被追踪,除非被同一局域网里的电脑记录到.

智能手机的行为有很大的隐私隐患. 任何网络观察者都可以通过窥探周围的 WiFi 网络流量,来定位该流量的特定唯一的设备. 除了广播自己的MAC地址ID之外, 智能手机还发送 “探测请求”, 一种半持续的信号:

… 无线设备在足够近的范围内识别接入点(AP). 传统的是, 设备通过广播自己的探测请求来实施主动扫描, 请附近的AP识别他们, 并通过回以 802.11 参数信息来设置连接. 这种探测请求框架就要求必须要有源设备的MAC地址. 但如果一个 802.11 设备用自己的全球唯一MAC地址来广播, 那么它也是在每一刻都向周围所有的无线设备广播自己的真实身份. 因此可以很轻松地追踪到无线设备用户 在时间和空间上的痕迹. —-引自那篇论文

为了解决该问题, 大多数主流智能手机制造商和操作系统 (安卓/iOS等) 都采取了措施: 在无线网卡还没有与AP关联的时候 (即在广播请求状态), 实行临时随机化的MAC地址, 区别于真实的地址. 这种随机的伪地址会随一定时间而变动一次. (这里译者有些怀疑国产厂商是否有意愿和能力来做这个, 除了少数几个国际化的厂商(Huawei?), 而且那几个国际化厂商针对国内的产品是否真正用了该技术也尚待验证)

那么至少在理论上, 网络流量的观察者(如ISP) 就不能够从大量设备流量中找出某特定设备的流量, 或者通过周边设备来识别出某设备的物理位置. 因为随机化的MAC地址 (且在变动–译者加注) 之间无法关联.

然鹅, 故事还没有完.

有瑕疵的MAC地址随机化实践

对隐私倡导者来说, 不带静态ID的网络流量传输 是保障隐私的一个共识方法. 但不幸的是, 美国海军研究院的这个研究表明 智能手机执行这项技术时有严重的瑕疵(漏洞), 不管是哪个系统, 设备制造商和型号.

这项2017年的研究采用真实世界的数据, 有以下发现:

  • 随机化技术和策略很容易在大量无线流量中被识别出来.
  • MAC随机化的采用率很低,特别是安卓设备.
  • 被动和主动的探知真实唯一地址标识的技术是一项常人就可以做的(trivial) 的任务, 因为MAC随机化的实施的漏洞还比较大,特别是安卓设备.
  • 通过一种叫 “控制框架攻击”的方法可以获知设备的真实MAC地址, 即使它已经做了随机化处理了. 且这个方法对所有 操作系统, 厂商, 设备类型和随机化策略都有效.

(译者再来补充几点: )

  • 首先要知道的是, 移动设备上的所谓随机化处理(包括iOS), 都只是在搜寻AP的时候(即 probe request) 才进行随机化. 一旦连接上某AP后, 立马用回网卡的真实全球唯一MAC地址.
  • 关于随机化的具体策略, 大多是部分随机化而已, 即保留前半部分的 OUI(组织唯一标识码, 需厂商向 IEEE购买), 后三组数字(3-byte) 才是厂商的 “本地分配地址” (不唯一, 即可能重复使用); 而对于有些厂商, 前半部分的OUI, 也会以 CID(公司标识码, 也需购买, 并承诺不用于全球唯一标识的设备上) 来取代(比如用 谷歌的CID). 只有苹果家的iOS 才采用全部随机化的方式.
  • 在无线网卡搜寻AP的过程中,还有一个东东, 就是 WPS (WiFi 保护设定), 它是一种协议, 让未认证的设备可以跟AP协商建立安全的连接. 辣么 WPS里就有一些设备信息在网卡发送探测请求时被加了进去, 这些信息包括了设备制造商啦设备型号啦, 还有非常重要的 UUID-E.
  • UUID-E 又是什么鬼?? 全称 “通用唯一标识符-被卷入者”. 这段信息码被用来帮助建立WPS连接, 它呢又是从网卡真实MAC地址中提炼出来的, 经过hash处理. 那么经过建立hash表就能轻松回推 真实的MAC地址来.

(是不是有点不说人话了?让我们直接看看那篇论文的一些结论):

  • (本段原文直译)6.1 采纳率:“绝大多数的安卓没有实行可用的随机化功能——这项本来内置于安卓操作系统里的功能,主要因为 802.11芯片和固件的不兼容性。
  • 6.2 (用真实MAC地址)做探测请求的情况还是会发生,主要发生在:
  1. (安卓)只要一点亮屏幕时。 2.(安卓)有来电时(不管是否接听)。
  2. 不做广泛的探测请求,而是定向地向已知SSID的AP发送请求时(此时称为“直接探测请求”);研究发现有的设备出厂时就预设了几个固定SSID名的AP(通常是 ISP 自己布设的WIFI热点;或是合作商家的热点)。
  3. 所谓“offloading”时,即设备从蜂窝信号网络(cellular)转到 WiFi热点时。
  • 6.3 UUID-E 回溯(reversal,即通过UUID-E可反查真实MAC地址)
  • 71% 的被测安卓还是对此项免疫的;
  • 100% 的 iOS 对此免疫(因为人家根本没开 WPS )
  • 6.6 Karma 攻击

这项攻击实验其实就是通过钓鱼热点(该热点的 SSID 名和现场某热点名字完全一样),然后就能看到那些设置了(上面提到的)直连的(或连接了隐藏AP)设备的真实 MAC地址。那么它还告诉你这设置是可以改的,就在 wpa_supplicant.conf 里(iOS没有这个)。然鹅大部分用户是不知怎么更改的,除非你是命令行控且意识到这个隐私问题。

  • 最后,该研究还提到,安卓设备即使在关闭了 WiFi开关,和/或开启飞行模式,其无线网卡都还在进行探测请求。

就酱,我不是来黑安卓的

Happy hacking

發布評論

看不過癮?

一鍵登入,即可加入全球最優質中文創作社區