開発者について

なぜ、Macのネットワーク境界を自動で守るアプリを作ったのか

Lafine Systems Design(個人開発者・藤木徹治)が、公共Wi-Fiと開発サーバーの露出リスクを自分で調べた記録。

きっかけは、マックのWi-Fiへのふとした疑問

スタバよりもマックでアップルパイを食べながらMacを開くタイプの開発者です。ある日そこで作業していて、「このWi-Fi、隣の席の人から自分のMacってどう見えてるんだろう」とふと気になり、調べ始めました。

「公共Wi-Fiでもクライアント分離(AP分離)が効いていれば、他の端末とは通信できないから安全」——長らくそう思っていましたが、調べていくと前提が思ったより甘いことが分かりました。クライアント分離はそもそも全てのWi-Fiで有効とは限らず、有効な環境でもSANS Instituteが報告した「AirSnitch」という手法でバイパスされ得ることを知り、Bonjour(mDNS)で自分のMacが平文で色々アナウンスしていることも、自分の手元でdns-sdlsofを叩いて初めて実感しました。

調べた結論はシンプルで、対策は「露出面を減らす」ことと、「ネットワークが変わるたびに人間が自分で切り替えない」という前提に立つことの2つしかない、ということでした。カフェに着くたびにいちいち設定を見直す人はほぼいません(自分もやりません)。だから、信頼できるネットワークとそれ以外を自動で判別し、知らないネットワークでは勝手に露出面を絞ってくれる仕組みが必要だと考え、これを自動化する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 / 個人開発者

RoamSwitchのファイアウォール制御(pfsocketfilterfw)、ARPスプーフィング検知、特権ヘルパー(XPC)による安全な権限分離といった技術基盤は、外資系IT企業、大手電機メーカーグループでのシステムエンジニア経験と、独立後に官公庁・大学・研究機関向けへ自社ASPサービスを提供してきた実務の中で培った、OS・ネットワークの基盤技術、運用自動化・障害対応・セキュリティ管理の知見に裏付けられています。関心領域はLinux低レイヤー、ネットワーク防御、機械学習、高速データ基盤、システム設計など。現在は個人開発者としてAI・機械学習分野にも取り組みながら、Macのネットワークセキュリティを自動化するアプリ「RoamSwitch」を開発・提供しています。調べたことはZennで技術記事として公開しています。

📝 Zennで技術記事を読む お問い合わせフォーム

事業者名・所在地・お支払い方法等の法定表記は特定商取引法に基づく表記をご覧ください。