0001softbank、あるいはソフトバンクWi-Fiスポットに関する一考察

前回KDDIWifiスポットに続き、ソフトバンク版についても認証プロセスを考えてみたいと思います。
結論から言えば、アクセスしてくる端末のUserAgentを見て挙動を変えているという話に帰結してしまうのですが、それだけでは面白みが少ないのでもうちょっと話を広げてみましょう。

ソフトバンクWi-Fiスポット、とは

公式ページはこちら。言わずと知れたキャリアによる公衆無線LANサービスの草分けであり、スポット数は公衆無線LANサービス中でもダントツのトップを誇ります。
しかしながら、絨毯爆撃のような営業に伴って起こっている2.4GHz帯の汚染、またバックホールを1.5GHz帯の自社回線(ULTRA SPEED)としたスポットの増大による回線帯域の無駄遣いという批判*1など、いろいろと問題が提起されているサービスでもあります。

そうはいってもスポット数は圧倒的であり、3G/LTE/WiMAX回線を持たない端末を使う場合には重宝するサービスでもあります。最近ではソフトバンク側もそれを理解しているのか、初代iPadの2年縛り契約がそろそろ終了するのを見越してかソフトバンクWi-Fiスポット(EX)というサービスを始めたりもしています。

サービスの対象には、ソフトバンクモバイルが販売する

挙げられています

アクセスポイントのSSIDとしては、認証不要の「0001softbank」および偽FONと呼ばれる「FON」に加え、WPA2による認証に対応した「0002softbank*2」が設定されています。これらのAPはソフトバンクモバイルによるものですが、他にも、同じくソフトバンクグループのソフトバンクテレコムが提供する、マクドナルドなどでよく見かける mobilepoint も使うことができるうえ、認証系がソフトバンクモバイル提供のAPと共通となっている為、本稿の内容をそのまま適用することができます。

なお、現在無料体験実施中とのことらしく、パケット定額プランに加入していない端末(一説では電話番号さえあれば良いとか…)でも接続が可能となっています。

iPhone /SoftBankスマートフォン/モバイルデータ通信端末(ソフトバンクWi-Fiスポット対応機種)をご利用でソフトバンクWi-Fiスポットに未加入のお客さまは、期間限定で無料にて体験いただけます。(無料体験は、2012年11月30日迄。当社の都合により無料体験期間を変更する場合があります。)

ご利用いただけるお客さまについて | ソフトバンクモバイル

認証系について

基本的に、すべての認証は w-lan.jp 配下のドメインで行われますが、接続元の端末によって動作が変化します。このため、解析が非常に面倒くさいものとなっています。

APに接続後、任意のページを開こうとすると、0001softbank/FONでは plogin1.pub.w-lan.jp に、mobilepoint では www.login*.w-lan.jp (*は数字)にリダイレクトされ、上記で挙げた対応端末ごとに用意された認証に関するメッセージが表示されます。

なお、mobilepointは各社からのローミングを受け入れている関係上、どのクライアントから接続しても、一応は認証情報の入力画面が表示されます。SoftBank端末からローミングアカウントでのログインも考えられるため、例えばiPhoneで接続していても Yahoo!Wireless のアカウントでログインすることも可能です。以下に示す各パターンは、0001softbank/FONにアクセスした場合のものとお考えください。

iPhoneの場合

UserAgentが

 Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A405 Safari/7534.48.3

の場合。

未認証だと、初期登録を sbwifi.jp で行うよう指示するメッセージが表示されます。このサイトではプロファイルを登録するよう促されますが、認証のキモはその前のページリダイレクトにあります。
iPhone の場合、認証キーの実体は接続ID(Eメール(i)のアドレス)と、パスワードと思われる何らかのハッシュ化文字列をBase64エンコードしたものを含むCookieであり、Safariに対して2038年まで有効なCookieとして埋め込んでいるようです。

Cookieの中身は、

fon.com
MBN=(Strings encoded by BASE64), fonsb=(Hashed strings); Domain=fon.com; Expires=Mon, 18-Jan-2038 15:00:00 GMT; Path=/; Secure
lw.livedoor.com
MBN=(Strings encoded by BASE64); Domain=lw.livedoor.com; Expires=Mon, 18-Jan-2038 15:00:00 GMT; Path=/; Secure
wi2.ne.jp
MBN=(Strings encoded by BASE64); Domain=wi2.ne.jp; Expires=Mon, 18-Jan-2038 15:00:00 GMT; Path=/; Secure
w-lan.jp
MBN=(Strings encoded by BASE64); Domain=w-lan.jp; Expires=Mon, 18-Jan-2038 15:00:00 GMT; Path=/; Secure

という感じです。最後の w-lan.jp 以外はすべてローミングサービス向けのものですが、

fon.com
fonsb は FON_FREE_INTERNET の認証用でしょうが、端末に関わらず固定値になっている気がします。
lw.livedoor.com
Livedoor Wireless向けと思われますが、この提携は本年6月を以て終了している為、今後は使いようがないと思われます。
wi2.ne.jp
ローミングはwi2単独エリアのみ対応しているそうなので、最近急激に増加している au_Wi-Fi との相乗りエリアは対象外と思われます。

という落とし穴が存在します。

また、MBNというCookieBASE64エンコードされている部分は

BBMP_iPhone hogehoge@i.softbank.jp (32文字ハッシュ(MD5?))

となっており、これは sbwifi.jp に接続せずとも、UserAgentをiPhoneに偽装して、 mobilepoint に接続・認証に成功すると取得することができます。

なお、ここで挙げた認証情報は結局のところCookieでしかないため、上記のドメインを持つホストに接続した場合、自動的に送信されてしまいます。
ただ、仮に悪意のある0001softbankに偽装したAPに接続し、 w-lan.jp ドメインを持つ偽装サイトにリダイレクトされたとしても、一応、これらのCookieにはSecureフラグがついているので、HTTP接続時には送信されませんし、HTTPS接続だとiPhone側でSSL証明書の相違メッセージが表示されることが予想され、接続者のメールアドレスが攻撃者に流出する可能性は低いと思われます。しかしながら、SSL証明書の相違メッセージをどれだけの人が理解しているのか、という観点から考えると、あまり筋の良い実装とは言い難いのも事実です。

iPadの場合

UserAgentが

Mozilla/5.0 (iPad; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B176 Safari/7534.48.3

の場合。自動認証(おそらくiPhoneと同様の仕組み)に失敗した場合、ログイン用のメールアドレス(i)とパスワードを入力する画面が表示されますので、入力すれば通ります。ただ、契約種別を見ているのか、 iPhone のアカウントでは通らない模様。

Androidの場合

接続用アプリによる接続が必須となりますが、交換機用の暗証番号を入力する必要があること、また導入時に電話番号の読み取り許可が必須となっていることから、電話番号と暗証番号による認証を行っていることが推測されます。

アプリ名にもがっつり jp.co.softbank.wispr.froyo とありますので、WISPrコードを探してみたところ、接続用アプリのUserAgentが

WSP_CLNT;SoftBank/1.0

であると思われたことから、結局、Android端末においてはケータイWifi対応機の認証系を間借りしているのではないか、と推測されました。

ケータイWifi対応機の場合

ケータイWifiとは、ガラケーWifiチップを積み、3G回線以外に高速回線でネットができるということを売りにしたサービスです。一昔前には各キャリアとも力を入れていましたが、スマホの登場に伴いどんどん縮小しており、docomoに至ってはサービスを終了してしまいましたし、ソフトバンクでも2010年秋冬モデルの004SHを最後に新規機種が発表されていません

この004SHのUserAgentは、

SoftBank/2.0/004SH/SHJ001/SN(端末シリアル) Browser/NetFront/3.5 Profile/MIDP-2.0 Configuration/CLDC-1.1

となっています。

このUAに偽装して「0001softbank」にアクセスしてみると、

のようなページが表示されます。このソース中には、

というようにWISPrのコードが記載されており、このURLに Username として電話番号を、 Password として回線暗証番号をPostしてやると、正常に認証が通ります。なお、POST時にもUserAgentを見ているようで、「SoftBank/2.0」などのような文字列を判別できない場合にはログインエラーとなってしまいます。

また、APごとに認証URLが微妙に変化するようですので、決め打ちで実行するのは難しい模様。ちなみに、 mobilepoint でも同様にWISPrコードが表示されるので、同じようにログインが可能です。

これらの結果を受けて、Androidでもこの仕組みを使用しているのであろうことがほぼ確定的となりました。

*1:一応1.5GHz帯はUMTSのグローバルバンドではないので、2.1GHz帯の間引き目的という言い訳はあり得る。と思っていたら、最大手のDocomoがXiをバックホールにした、もっと言い訳の立たないスポットを設置しだしたらしくてドン引き

*2:未だにiPhoneのプロファイル上以外で存在を確認できたことがない