Captive Portal of MacOS 仕様備忘録

Apple
Illustration by johny_deff on Pixabay / CC0 Public Domain

はじめに

MacOS の Captive Portal 動作についてハマったので,その備忘録です.そもそも Captive Portal って何なのかが分からない人も多いと思うので,まずそこから.

Captive Portal って何?

Captive Portal というのは,ホテルが提供する無線LANとか公衆無線LANなんかを利用するための認証に使われる技術で,該当する無線LAN(Wifi)につなげると,利用者を特定するため,ID とパスワードを打つページとか,利用規約と同意ボタンが配置されたページなんかに自動的に誘導するために使われるものです.

観光地とかだと,旅行者向けに FreeWifi が使えるところも多くなってきたので,スマホ利用者だと使ったことのある人も多いんじゃないかなと思います(以下は大阪 Free Wifi とスタバの Free Wifi です).

Osaka Free Wi-Fi - 大阪府で無料で使えるインターネットサービス
大阪約3,900か所でインターネットが無料で使えるOsaka Free Wi-Fiと、お得な情報サイトOsaka Enjoy Rallyを使って、大阪を楽しもう!
Free Wi-Fi at_STARBUCKS_Wi2 - アット_スターバックス_ワイツー
スターバックス店舗内でご利用できるFree Wi-Fi(SSID:at_STARBUCKS_Wi2)をご紹介するサイトです。本Wi-Fiサービスは、株式会社ワイヤ・アンド・ワイヤレスが運営しています。

これはユーザーの通信を全部横取りし,どこにつなごうとしても特定のページを表示させる仕組みです.悪用されると詐欺サイトに強制誘導することも可能な問題点の多い技術でもあります.

Captive Portal Problem Statementについて - ASnoKaze blog
Captive Portalについて議論を行うcapport wgが出来、IETF95で初めてのミーティングが行なわれます。 Captive Portalとは、よくWi-Fi接続後にブラウザでWebベースの認証が別途要求されるアレです。この...

でも,不特定多数の人が使うネットワークだと,いちいち端末を管理側で事前に把握できないなどの理由で使わざるを得ない技術でもある訳です.

Captive Portal と MacOS

この Captive Portal,MacOS の実装はどうなっているのかと言うと,どうも,次のようになっているっぽい(Ei Capitan の場合です).

  1. Wifi につながったことを検知する.
  2. http://captive.apple.com/hotspot-detect.html の接続チェックを行う.
    1. つながる(Success という結果が返ってくる) → 何もしない.
    2. つながらない → 何もしない.
    3. 転送先アドレスが返ってくる → 転送先ページを表示する.

つまり,Captive Portal が存在するときは自動的に転送先の(認証等を行う)ページが表示されるのですが,

このページを表示するアプリの起動中は他の通信はすべてブロック

されてしまいます.これは DNS への問い合わせを含めての話です.もちろんこのページの表示をキャンセルするか,認証等を通してしまえば通信は復帰します.

この仕様だと何で困るのか?

Captive Portal の画面表示を行うアプリの起動中は DNS への問い合わせもブロックされてしまいます.だから,転送先アドレスとして FQDN(www.aaa.bbb のようなアドレス)が帰っても IP アドレスに変換できず,結果,アプリは真っ白な画面のまま表示されてしまう.

何かの拍子に認証画面が表示されることもあるのですが,DNS のキャッシュが効いているからなのか,それとも名前解決が非常に短い時間で帰ってきているからなのかは全くの不明です.

つまり,MacOS の Captive Portal アプリで確実に認証等を行わせたければ,

転送先アドレスとしてIPアドレスが返るようにしないといけない

ということになります.でも,IPアドレスを返す場合,転送先ページは正規の SSL 対応には当然できません.と言うことは,Captive Portal ページと端末間は平文ですべての通信が行われます(当然 ID とパスワードも暗号化なしで送られる)し,ページの詐称も容易だということになります.

単に FreeWifi の規約に同意するというボタンを押すだけなら良いのですが,そうでない場合は当然問題ありです.不特定多数の人が使う場合に使われる技術だということからして深刻な問題なんじゃないかと思います.

対策は?

MacOS の場合は Captive Portal アプリを無効にすることができますが,これを無効にしたままだと,今度は公衆無線LANなんかにつなごうとする場合,ページのアドレスがどこにあるのか分かってないと認証ページにたどり着けなくなってとっても不便です.しかし,利用者側から行える対策はコレしか無い.

やり方は MacOS のターミナルから,

sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -boolean false

とすれば良い.逆に元に戻すには

sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -boolean true

ですね.

おわりに

この Captive Portal アプリの画面,中央に大きく表示されます.邪魔なので,真っ白の画面になったとき,キャンセル(終了)して原因究明しようとしました.でも,この場合は通信は復帰するので,DNS も引けてしまい,何で FQDN 先につながらないのか訳わからず,久々にどハマりしました.だから blog に記録を残そうという気になったのですが,何となくですがこの問題,Apple も想定外なんじゃないかなぁと感じています.

と言うのも,Captive Portal アプリが表示する画面は SSL 対応のページだときちんと「鍵」マークが右上に出てるからです.Captive Portal ページの SSL 化が想定されてないとこんな表示は必要無いはずです.

じゃぁ iOS の場合はどうなのかと言うと,これはよく分かりません.iOS にも Captive Portal 画面の自動表示機能はあるのは確かです.数少ない手持ちの古い iOS9 の端末と iOS10 端末で試した限りは iOS9 だとほぼ確実に転送される,iOS10 だとされたりされなかったりとよく分からない.iOS って PC のように簡単にネットワーク詳細を調べられないですしね.

AppleNetworks
スポンサーリンク
Following hyt!
hyt adversaria
タイトルとURLをコピーしました