你的設備的 MAC 地址可以在不同的 WiFi 網絡中記錄你的活動。這些信息能被共享后出售,用于識別特定的個體。但可以用隨機生成的偽 MAC 地址來阻止這一行為。每一個諸如 WiFi 或者以太網卡這樣的網絡設備,都有一個叫做 MAC 地址的唯一標識符。這就是你能上網的原因:每當你連上 WiFi,路由器就會用這一地址來向你接受和發送數據,并且用它來區別你和這一網絡的其它設備。
這一設計的缺陷在于唯一性,不變的 MAC 地址正好可以用來追蹤你。連上了星巴克的 WiFi? 好,注意到了。在倫敦的地鐵上? 也記錄下來。
如果你曾經在某一個 WiFi 驗證頁面上輸入過你的真實姓名,你就已經把自己和這一 MAC 地址建立了聯系。沒有仔細閱讀許可服務條款、你可以認為,機場的免費 WiFi 正通過出售所謂的 ‘顧客分析數據’(你的個人信息)獲利。出售的對象包括酒店,餐飲業,和任何想要了解你的人。
我不想信息被記錄,再出售給多家公司,所以我花了幾個小時想出了一個解決方案。
MAC 地址不一定總是不變的
幸運的是,在不斷開網絡的情況下,是可以隨機生成一個偽 MAC 地址的。
我想隨機生成我的 MAC 地址,但是有三個要求:
MAC 地址在不同網絡中是不相同的。這意味著,我在星巴克和在倫敦地鐵網絡中的 MAC 地址是不相同的,這樣在不同的服務提供商中就無法將我的活動系起來。
MAC 地址需要經常更換,這樣在網絡上就沒人知道我就是去年在這兒經過了 75 次的那個人。
MAC 地址一天之內應該保持不變。當 MAC 地址更改時,大多數網絡都會與你斷開連接,然后必須得進入驗證頁面再次登陸 - 這很煩人。
操作網絡管理器
我第一次嘗試用一個叫做 macchanger的工具,但是失敗了。因為網絡管理器NetworkManager會根據它自己的設置恢復默認的 MAC 地址。
我了解到,網絡管理器 1.4.1 以上版本可以自動生成隨機的 MAC 地址。如果你在使用 Ubuntu 17.04 版本,你可以根據這一配置文件實現這一目的。但這并不能完全符合我的三個要求(你必須在隨機random和穩定stable這兩個選項之中選擇一個,但沒有一天之內保持不變這一選項)
因為我使用的是 Ubuntu 16.04,網絡管理器版本為 1.2,不能直接使用高版本這一新功能。可能網絡管理器有一些隨機化方法支持,但我沒能成功。所以我編了一個腳本來實現這一目標。
幸運的是,網絡管理器 1.2 允許模擬 MAC 地址。你在已連接的網絡中可以看見 ‘編輯連接’ 這一選項。
網絡管理器也支持鉤子處理 —— 任何位于 /etc/NetworkManager/dispatcher.d/pre-up.d/?的腳本在建立網絡連接之前都會被執行。
分配隨機生成的偽 MAC 地址
我想根據網絡 ID 和日期來生成新的隨機 MAC 地址。 我們可以使用網絡管理器的命令行工具 nmcli 來顯示所有可用網絡:
ifconfig> nmcli connectionNAME UUID TYPE DEVICEGladstone Guest 618545ca-d81a-11e7-a2a4-271245e11a45 802-11-wireless wlp1s0DoESDinky 6e47c080-d81a-11e7-9921-87bc56777256 802-11-wireless --PublicWiFi 79282c10-d81a-11e7-87cb-6341829c2a54 802-11-wireless --virgintrainswifi 7d0c57de-d81a-11e7-9bae-5be89b161d22 802-11-wireless --
因為每個網絡都有一個唯一標識符(UUID),為了實現我的計劃,我將 UUID 和日期拼接在一起,然后使用 MD5 生成 hash 值:
ifconfig# eg 618545ca-d81a-11e7-a2a4-271245e11a45-2017-12-03> echo -n "${UUID}-$(date +%F)" | md5sum53594de990e92f9b914a723208f22b3f -
生成的結果可以代替 MAC 地址的最后八個字節。
值得注意的是,最開始的字節 02?代表這個地址是自行指定的。實際上,真實 MAC 地址的前三個字節是由制造商決定的,例如 b4:b6:76?就代表 Intel。
有可能某些路由器會拒絕自己指定的 MAC 地址,但是我還沒有遇到過這種情況。
每次連接到一個網絡,這一腳本都會用nmcli ?來指定一個隨機生成的偽 MAC 地址。
最后,我查看了 ifconfig?的輸出結果,我發現 MAC 地址 HWaddr?已經變成了隨機生成的地址(模擬 Intel 的),而不是我真實的 MAC 地址。
> ifconfigwlp1s0 Link encap:Ethernet HWaddr b4:b6:76:45:64:4dinet addr:192.168.0.86 Bcast:192.168.0.255 Mask:255.255.255.0inet6 addr: fe80::648c:aff2:9a9d:764/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:12107812 errors:0 dropped:2 overruns:0 frame:0TX packets:18332141 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:11627977017 (11.6 GB) TX bytes:20700627733 (20.7 GB)
腳本
完整的腳本也可以在 Github 上查看。
更新:使用自己指定的 MAC 地址可以避免和真正的 intel 地址沖突。
?
評論