首頁 > 軟體

在 Ubuntu 16.04 下隨機化你的 WiFi MAC 地址

2020-06-16 16:59:24

你的裝置的 MAC 地址可以在不同的 WiFi 網路中記錄你的活動。這些資訊能被共用後出售,用於識別特定的個體。但可以用隨機生成的偽 MAC 地址來阻止這一行為。

每一個諸如 WiFi 或者乙太網卡這樣的網路裝置,都有一個叫做 MAC 地址的唯一識別符號,如:b4:b6:76:31:8c:ff。這就是你能上網的原因:每當你連上 WiFi,路由器就會用這一地址來向你接受和傳送資料,並且用它來區別你和這一網路的其它裝置。

這一設計的缺陷在於唯一性,不變的 MAC 地址正好可以用來追蹤你。連上了星巴克的 WiFi? 好,注意到了。在倫敦的地鐵上? 也記錄下來。

如果你曾經在某一個 WiFi 驗證頁面上輸入過你的真實姓名,你就已經把自己和這一 MAC 地址建立了聯絡。沒有仔細閱讀許可服務條款、你可以認為,機場的免費 WiFi 正通過出售所謂的 ‘顧客分析資料’(你的個人資訊)獲利。出售的物件包括酒店,餐飲業,和任何想要了解你的人。

我不想資訊被記錄,再出售給多家公司,所以我花了幾個小時想出了一個解決方案。

 

MAC 地址不一定總是不變的

幸運的是,在不斷開網路的情況下,是可以隨機生成一個偽 MAC 地址的。

我想隨機生成我的 MAC 地址,但是有三個要求:

  1. MAC 地址在不同網路中是不相同的。這意味著,我在星巴克和在倫敦地鐵網路中的 MAC 地址是不相同的,這樣在不同的服務提供商中就無法將我的活動系起來。
  2. MAC 地址需要經常更換,這樣在網路上就沒人知道我就是去年在這兒經過了 75 次的那個人。
  3. MAC 地址一天之內應該保持不變。當 MAC 地址更改時,大多數網路都會與你斷開連線,然後必須得進入驗證頁面再次登陸 - 這很煩人。

 

操作網路管理器NetworkManager

我第一次嘗試用一個叫做 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 來顯示所有可用網路:

  1. > nmcli connection
  2. NAME UUID TYPE DEVICE
  3. GladstoneGuest618545ca-d81a-11e7-a2a4-271245e11a45802-11-wireless wlp1s0
  4. DoESDinky6e47c080-d81a-11e7-9921-87bc56777256802-11-wireless --
  5. PublicWiFi79282c10-d81a-11e7-87cb-6341829c2a54802-11-wireless --
  6. virgintrainswifi 7d0c57de-d81a-11e7-9bae-5be89b161d22802-11-wireless --

因為每個網路都有一個唯一識別符號(UUID),為了實現我的計劃,我將 UUID 和日期拼接在一起,然後使用 MD5 生成 hash 值:

  1. # eg 618545ca-d81a-11e7-a2a4-271245e11a45-2017-12-03
  2. >echo-n "${UUID}-$(date +%F)"|md5sum
  3. 53594de990e92f9b914a723208f22b3f-

生成的結果可以代替 MAC 地址的最後八個位元組。

值得注意的是,最開始的位元組 02 代表這個地址是自行指定的。實際上,真實 MAC 地址的前三個位元組是由製造商決定的,例如 b4:b6:76 就代表 Intel。

有可能某些路由器會拒絕自己指定的 MAC 地址,但是我還沒有遇到過這種情況。

每次連線到一個網路,這一指令碼都會用 nmcli 來指定一個隨機生成的偽 MAC 地址。

最後,我檢視了 ifconfig 的輸出結果,我發現 MAC 地址 HWaddr 已經變成了隨機生成的地址(模擬 Intel 的),而不是我真實的 MAC 地址。

  1. >ifconfig
  2. wlp1s0 Link encap:EthernetHWaddr b4:b6:76:45:64:4d
  3. inet addr:192.168.0.86Bcast:192.168.0.255Mask:255.255.255.0
  4. inet6 addr: fe80::648c:aff2:9a9d:764/64Scope:Link
  5. UP BROADCAST RUNNING MULTICAST MTU:1500Metric:1
  6. RX packets:12107812 errors:0 dropped:2 overruns:0 frame:0
  7. TX packets:18332141 errors:0 dropped:0 overruns:0 carrier:0
  8. collisions:0 txqueuelen:1000
  9. RX bytes:11627977017(11.6 GB) TX bytes:20700627733(20.7 GB)

 

指令碼

完整的指令碼也可以在 Github 上檢視

  1. #!/bin/sh
  2. # /etc/NetworkManager/dispatcher.d/pre-up.d/randomize-mac-addresses
  3. #Configure every saved WiFi connection inNetworkManagerwith a spoofed MAC
  4. # address, seeded from the UUID of the connection and the date eg:
  5. #'c31bbcc4-d6ad-11e7-9a5a-e7e1491a7e20-2017-11-20'
  6. #This makes your MAC impossible(?) to track across WiFi providers,and
  7. #for one provider to track across days.
  8. #For craptive portals that authenticate based on MAC, you might want to
  9. # automate logging in:)
  10. #Note that NetworkManager>=1.4.1(Ubuntu17.04+) can do something similar
  11. # automatically.
  12. export PATH=$PATH:/usr/bin:/bin
  13. LOG_FILE=/var/log/randomize-mac-addresses
  14. echo"$(date): $*"> ${LOG_FILE}
  15. WIFI_UUIDS=$(nmcli --fields type,uuid connection show |grep802-11-wireless |cut'-d '-f3)
  16. for UUID in ${WIFI_UUIDS}
  17. do
  18. UUID_DAILY_HASH=$(echo"${UUID}-$(date +F)"|md5sum)
  19. RANDOM_MAC="02:$(echo -n ${UUID_DAILY_HASH} | sed 's/^(..)(..)(..)(..)(..).*$/1:2:3:4:5/')"
  20. CMD="nmcli connection modify ${UUID} wifi.cloned-mac-address ${RANDOM_MAC}"
  21. echo"$CMD">> ${LOG_FILE}
  22. $CMD &
  23. done
  24. wait

更新:使用自己指定的 MAC 地址可以避免和真正的 intel 地址衝突。感謝 @_fink


via: https://www.paulfurley.com/randomize-your-wifi-mac-address-on-ubuntu-1604-xenial/

作者:Paul M Furley 譯者:wenwensnow 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-12/149379.htm


IT145.com E-mail:sddin#qq.com