关于开发者

为什么我要打造一款自动守护 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 阅读技术文章 技术支持与咨询

关于经营者名称、所在地、付款方式等法定信息,请参阅基于《特定商业交易法》的标示。