编译:Mdrights
网络设备的接口(俗称网卡)上都有一个出厂时即设定进硬件的(即硬编码的)一组编码,全称“介质访问控制”(Media Access Control)地址(48位),位于链接层中。它是全球唯一的,由 IEEE组织向各厂商有偿分配,其设计用意是因为网络连接过程中需要对网络设备进行唯一性识别。
所以同时也带来了隐私问题,尤其是在那个欧洲次大陆,这是个严重的问题。解决办法就是给设备分配个随机的 MAC地址,让网关(网络的枢纽设备)及偷窥者无法对不同的 MAC地址产生关联,也就无法跟踪某一设备去过哪些网络。
$ 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多好:)
在 Windows上 直接用 tmac: https://technitium.com/tmac
在 MacOS上 1 via Terminal(手动): ``` $ 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地址 (且在变动–译者加注) 之间无法关联.
然鹅, 故事还没有完.
对隐私倡导者来说, 不带静态ID的网络流量传输 是保障隐私的一个共识方法. 但不幸的是, 美国海军研究院的这个研究表明 智能手机执行这项技术时有严重的瑕疵(漏洞), 不管是哪个系统, 设备制造商和型号.
这项2017年的研究采用真实世界的数据, 有以下发现:
(译者再来补充几点: )
首先要知道的是, 移动设备上的所谓随机化处理(包括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芯片和固件的不兼容性。
这项攻击实验其实就是通过钓鱼热点(该热点的 SSID 名和现场某热点名字完全一样),然后就能看到那些设置了(上面提到的)直连的(或连接了隐藏AP)设备的真实 MAC地址。那么它还告诉你这设置是可以改的,就在 wpa_supplicant.conf
里(iOS没有这个)。然鹅大部分用户是不知怎么更改的,除非你是命令行控且意识到这个隐私问题。
就酱,我不是来黑安卓的
Happy hacking