關於開發者

為什麼我要打造一款自動守護 Mac 網路邊界的應用程式

個人開發者 Tetsuharu Fujiki(Lafine Systems Design)親自調查公共 Wi-Fi 與開發伺服器暴露風險的紀錄。

起點是在速食店 Wi-Fi 上的一個偶然疑問

起點是在速食店 Wi-Fi 上的一個偶然疑問

有一天,在使用公共 Wi-Fi 工作時,突然好奇「在這個 Wi-Fi 下,鄰座的人眼中我的 Mac 是什麼樣子?」,於是開始調查。

「即使在公共 Wi-Fi 上,只要用戶端隔離(AP 隔離)生效,就無法與其他裝置通訊,所以是安全的。」我長期這樣認為,但調查後發現,這個前提比想像中脆弱得多。用戶端隔離並非在所有 Wi-Fi 上都已啟用。即使已啟用,也可能被 SANS Institute 報告的名為「AirSnitch」的手法繞過。我自己的 Mac 透過 Bonjour(mDNS)以明文廣播了許多資訊,這一點也是我親手執行 dns-sd 和 lsof 之後才真正體會到的。

結論很簡單。對策有兩個:縮小暴露面,以及以「網路每次變化時,人不會手動切換」為前提。幾乎沒有人每次到咖啡廳都會重新檢查設定(我自己也不會)。於是我做了一款 macOS 應用程式,它能自動區分可信任的網路和其他網路,並在陌生網路上自動縮小暴露面。這就是 RoamSwitch 的起點。

其實,開發伺服器也存在同樣的問題

其實,開發伺服器也存在同樣的問題

在調查公共 Wi-Fi 的過程中,我也好奇開發伺服器是什麼情況,於是深入研究了一番。我原本模糊地認為「開發伺服器只監聽 localhost,所以從外部存取是安全的」,但實際上各個框架各不相同,還有違反直覺的預設值。

next dev 在不指定 hostname 時會綁定到 0.0.0.0。python -m http.server 預設也會在所有介面上對外開放。Vite 預設是 localhost,但為了用手機實機查看而加上 --host,誰都做過。針對這一點的 CVE-2023-34092(路徑遍歷,CVSS 7.5)也已存在。至於 Docker 的 -p,甚至可能繞過主機端的防火牆設定而在 0.0.0.0 上對外開放。

這裡得出的結論也一樣。與其指望人每次都記得去關閉,不如在連接到不可信任網路的瞬間自動阻止來自外部的存取,這更為實際。實際上,這也是 RoamSwitch 最常被回報的用法之一。它以被動方式稽核開放連接埠並回報風險,在未登錄的網路上則透過核心的封包過濾器阻止來自外部 LAN 的存取。

簡介

Lafine Systems Design / 個人開發者

Lafine Systems Design / 個人開發者

RoamSwitch 的防火牆控制(pf/socketfilterfw)、ARP 欺騙偵測和特權輔助程式(XPC)均基於實務經驗。我曾在外商 IT 企業和大型電機製造商集團擔任 SE,獨立後為政府機關、大學和研究機構提供 ASP 服務。現在我以個人身分開發「RoamSwitch」,並將調查所得寫在 Zenn 上。

以可驗證的形式公開

📝 在 Zenn 閱讀技術文章 技術支援與諮詢

關於經營者名稱、所在地、付款方式等法定資訊,請參閱基於《特定商業交易法》的標示。