昨年示していた、
日本の携帯電話事業者の一部は、「フルブラウザ」にさえ契約者固有ID送信機能を持たせて、蛸壺の維持を謀ろうとしているが、iPhoneのような国際的デファクト標準には通用しないのであって、今後も、他のスマートフォンの普及とともに、蛸壺的手法は通用しなくなっていくであろう。
そのときに、蛸壺の中の開発者らが、このニコニコ動画の事例と同様のミスをする可能性が高い。「IPアドレス帯域」による制限が通用しない機器では、アプリケーションの内容によっては特に危険な脆弱性となるので、関係者はこのことに注意が必要である。
の懸念が、今や、さらに拡大し、ケータイ業者のみならず、一般のシステムインテグレータの思考まで蝕みつつあるらしいことが、一昨日の以下のプレスリリースと、メディア各社の報道で明らかになった。
〜 今流行のiPhoneで「YAMADAモバイル」が利用可能に 〜
(略)iPhoneを使ったポイント会員システムは国内家電量販専門店業界初となります。(略)
2. 本システムの特徴
(1)iPhoneアプリケーションとWebアプリケーションが連携したポイント会員システムです。
(2)iPhone個体の識別子とアプリケーション固有のIDによる認証によりセキュリティの高い認証が可能です。
(3)今後拡大が予想されるスマートフォン(高機能携帯電話)への対応も容易となります。
このシステムは、iPhoneアプリとWebアプリが連携したポイント会員システムで、iPhone個体の識別子とアプリ固有のIDによる認証により、セキュリティの高い認証を可能としている。
また同システムにより、今後拡大が予想されるスマートフォンへの対応も容易になるという。
これは危ないのじゃないのか。そういう声が、Twitterで昨日から数十件ささやかれていた。
本来ならこれが実際に脆弱であることを確認してから書くところであるが、それをしているとまた何か月も経ってしまう。今まさに、おそらく各社がこぞって、iPhoneやAndroidをはじめとしたスマートフォン対応の開発に真っ盛りであるはずで、今、このようなやり方の広がりを食い止めるべく書いておく必要がある。
この実装方法がまずいのは、「アプリケーション固有のID」の機密性に頼っているらしい点である。そのiPhoneアプリのプログラムが解析されて、そのIDと演算アルゴリズムがバレてしまえば、誰でも任意のiPhoneのUDID*1を用いて(同じ演算をした値を送信することにより)、他人になりすまして利用できてしまうだろう。*2
家電量販店のポイントシステムという用途なら、そのくらいの危険性は想定内でかまわないという考え方もあるだろうが、問題なのは、開発元のSI会社がプレスリリースで「セキュリティの高い認証が可能」と高らかに謳っている点である。
「今後拡大が予想されるスマートフォンへの対応も容易となります」とあるように、このSI会社は今後おそらく、認証がより重大な意味を持つ他のアプリの開発に携わるであろうし、このニュースを見た他のSI会社やその他の中小の開発者らが、「ほうほうそうやって作ればいいのか」と思ってしまうことが危険である。
こんなやり方をしてしまうのは、ケータイ用のシステムが既にあったためだろう。ケータイで使っている契約者固有IDに代わる何かがないとWebアプリケーションが作れないと思ってしまった開発担当者が、iPhone OSのUDIDに目を付け、これを使えば(何かに比べて?)「セキュリティの高い認証」ができると思い込んでしまったのだろう。
そもそも、端末に固有のIDなど使う必要がない。PC用のアプリでそんなことをやっているソフトがあったかね? 一般のPCにだって固有IDは元々いろいろある。ネットワークインターフェイスのMACアドレスでもいいし、ハードディスクにだってシリアル番号がある。それらを不正コピー防止の目的で用いてきた歴史はあるけれども、それはユーザのサーバログインなしで使うソフト(Windows本体やMicrosoft Wordなど)ではそうするしかなかったから(それでさえ反発があった)であって、Webアプリのユーザログインに使うなんて馬鹿はいなかった。1999年の、Intel Pentium IIIのProcessor Serial Numberのボイコット運動は、そういう輩が現れるのを抑止するための運動でもあった。
こういう専用アプリでパスワードなしに使用させたければ、端末をサービスに登録するときに、Webアプリケーション側で専用のID(予測が困難な十分な長さの乱数によるID)を発行して、それをiPhoneアプリに覚えさせておけばよい。独自アプリなんだからそれの記憶ができる。ケータイでそれができなかったのは(cookieのない)Webブラウザであったからにすぎない。
そのIDが消えてしまったらどうするの?という不安があるのかもしれないが、どのみち機種変更時の乗り換え機能が必要なのであって、用意されている「機種変更」の手順で再登録するだけの話だろう。実際、ヤマダ電機の「ケイタイdeポイントに関するお問い合わせ」窓口に電話で尋ねたところ、機種変更の際には、会員番号と暗証番号、電話番号を入力するようになっていて*3、会員番号は会員登録のときに発行されるもので、電話番号は会員登録のときに登録させているもの、暗証番号は最初に「ケータイdeポイント」に登録するときに設定させているものだという。
だったら、端末ID(UDID)を用いる必要性はまるで無い。*4
今回のアプリは、ケータイWatchの記事によると、「3G回線専用サービスとなるため、無線LANでは利用できない」のだそうで、これの意図も不明だ。開発担当者は「ケータイの契約者固有IDの使用ではIPアドレス制限をするのが定石だから」と、意味もわからず同じようにする必要があると思ったのだろうか。iPhoneからのアクセスのIPアドレスは何ら保証されていないし、そもそもiPhone OSというのは、PC同様に、自由に任意のプログラムを載せて動かすことができるもの*5なのだから、そんなやり方をしても何も防げやしない。
検索して調べてみると、iPhoneからのアクセスをIPアドレスで判別しようとする輩がうようよしていることがわかる。iPhoneはガラパゴスケータイではないのだからPC同様に作ればいいだけだというのがわからないのか。
今後も「IPアドレス帯域」が公表されることはないと聞いているし、こういう輩が湧いてくるので絶対にすべきでない。
日本のWeb開発者の劣化が止まらない。こんなことになってしまったのは、ケータイ業界が契約者固有IDなどという世界に通用しない安直方式を長年に渡って使用を拡大してきたためであり、その遠因はcookieをサポートしてこなかったNTTドコモにある。
早く立ち直ろう。SI屋は、今やどこもセキュリティ部隊を抱えているはずなので、専用アプリの開発においても、セキュリティ部隊に相談、ないし脆弱性検査を受けたらいい。少なくとも、セキュリティを宣伝するプレスリリースを出すときは、セキュリティ部隊に相談するべきだろう。
*1 UDIDは他人に提供する場合がある。2009年8月2日の日記にも書いていたように、AppleはDeveloper Connectionの文書「iPhone Reference Library」において、UDIDについて「but cannot publically be tied to a user account」と、ユーザ認証に使うなと示唆している。
*2 かつて存在していたNAVITIMEのiPhoneアプリも同様の方法だったと推定している。
*3 複数台を登録して使うこともでき、実際に2台以上を「同時に使っていらっしゃるお客様もございます」とのことだった。
*4 もしかすると、プレスリリースの「アプリケーション固有のID」が指すものが、上記の端末登録時に個々に発行する専用IDのことを述べているとも解釈できなくもないが、そうだとすれば、ますますUDIDは全くの無用の長物であり、組み合わせて使う意図が不明であるし、それをことさらにプレスリリースで「セキュリティの高い認証が可能」と謳う意味も不明だということになる。
*5 Appストアに登録できないだけで、開発者は任意のアプリを自分のiPhoneでテストできるし、ベータテストのための「ad hoc配布」もできる。
高木浩光氏のブログに面白い(と言っていいのだろうか?)記事がありました。 「ケータイ脳が大手SI屋にまで侵蝕、SI屋のセキュリティ部隊は自社の統率を」 私自身は携帯端末IDを使ったアプリは作ったことがありませんが、結構あちこちで使われているのは知っていました。..
高木浩光@自宅の日記 - ケータイ脳が大手SI屋にまで侵蝕、SI屋のセキュリティ部隊は自社の統率を