關於開發者

為什麼我要打造一款自動守護 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 中最常被回報的使用情境之一:被動稽核開放連接埠以回報風險,同時在未註冊的網路下透過核心封包過濾器阻止來自外部區域網路的存取。

簡介

Lafine Systems Design / 個人開發者

Lafine Systems Design / 個人開發者

RoamSwitch 的防火牆控制(pf/socketfilterfw)、ARP 欺騙偵測、透過特權輔助程式(XPC)實現的安全權限分離等技術基礎,源自在外資 IT 企業、大型電子製造商集團擔任系統工程師的經驗,以及獨立後為政府機關、大學、研究機構提供自有 ASP 服務過程中累積的作業系統與網路基礎技術、維運自動化、故障處理、安全管理方面的知識。關注領域包括 Linux 底層、網路防禦、機器學習、高速資料基礎設施、系統設計等。目前作為個人開發者,一邊投入 AI/機器學習領域,一邊開發並提供用於自動化 Mac 網路安全的應用程式「RoamSwitch」。調查所得內容以技術文章的形式發布於 Zenn。

以可驗證的形式公開

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

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