岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

セッションIDのみの認証はセキュリティレベルが低いのか

はてなブックマークモバイル版の脆弱性

昨日、はてなブックマークモバイル版の脆弱性に関する報告が公開されました。

キャッシュ機構の不備により、セッションID付きのURLを含むコンテンツページがキャッシュされてしまい、悪意のあるユーザが他人になりすます(セッションハイジャック)ことができたというものです。

セッションIDのみの認証なんてありえない?

報告記事に対する下記のブックマークコメントを目にしたとき、私は違和感を覚えました。

セッションIDのみの認証なんてありえない。そもそもセッションIDは認証に使うべきではない。せめて各種完了処理のときくらいはUID(NULLGWDOCOMO)もしくはFOMAカードor端末の製造番号(icc〜、ser〜)を使って認証しましょう

はてなブックマーク - into_the_blueのブックマーク / 2009年10月1日

セッションIDのみを認証に使っているサイトは多々あるはずで、なぜそれが「ありえない」とされるのか理解できなかったのです。後半を読むとdocomo携帯向けサイトに限った話に受け取れますが、「そもそもセッションIDは認証に使うべきではない」という記述は、PCや他の携帯にも適用されるように読めなくもありません。

目にしたときには、すでに数個のはてなスターが付いており、「俺が間違っているんだろうか」と狐につままれたような気持ちでブックマークするにとどめました

高木さんのコメントに戦慄

翌日、高木浩光さんが下記のコメント付きでブックマークされているのに気づきました。

こういう頓珍漢なことを言う輩が出てくるのを潰さないといけない。前にもdankogaiが類似のことを言って無知をさらしていたが。/ ↓おっと先客が居るとは。↓の人は疑問を持たないのだろうか。

やばい。「↓の人」たる私は、戦慄するほかありませんでした。

dankogaiさんの一件も、私はすっかり忘れていました。これのことです。

重要なのは、cookieを使ってsession(厳密には疑似セッション)を実装するにあたっては、cookieのみを同一セッションか否かの判断材料としてはいけないということ。さもなければsession IDをコピーするだけでセッションそのものをコピーできてしまう。そしてcookieを奪うのがどれほど簡単かというのは、CSRFの事例が後をたたないことからも伺い知ることができる。

404 Blog Not Found:Immortal Session の恐怖

出鱈目 > 「cookieのみを同一セッションか否かの判断材料としてはいけない」「UserAgentも一致しなければならない」 < UserAgentの一致確認は無意味。「IPAddressの一致も見て」 < 動かなくなるので普通しない。他も間違いだらけ。

id:into_the_blueさんのご意見

さて、id:into_the_blueさんのブックマークコメントに話を戻します。id:into_the_blueさんとは、Wassrで下記のやりとりをしました。

「ありえない」理由をお伺いしたいです

http://wassr.jp/user/iwamot/statuses/Cksb7xoghe

携帯サイトに関していうと、ご存知のとおりセッションIDをURLに付加してセッション管理を行っています。そのため、今回のケースのようにセッションIDが漏えいする可能性を考慮する必要があると思います。なので、重要な機能に関しては、セッションID以外の識別情報も用いて認証したほうがよいのでは?ということです。

http://wassr.jp/user/intotheblue/statuses/sQcJ2U5B20

ありがとうございました。高木先生が問題視されているのは、プライバシーの問題と、識別情報が詐称できない保証はない、という2点だと私は思っています。

http://wassr.jp/user/iwamot/statuses/yzazzvNMEX

たしかにその2点に関しては私も気にしています。認証が必要と言っても識別情報を乱用するのはオススメできません。また、識別情報は本当に詐称できないのか?というと、YESとは言い切れませんし。

http://wassr.jp/user/intotheblue/statuses/ik7YxIXoG3

高木さんのご意見

実はこのやりとりの前に、私は高木さんの日記、とくに携帯の識別情報を認証に使うことの問題点に触れた日記を、いくつか読み直していました。Wassrで書いたとおり「高木先生が問題視されているのは、プライバシーの問題と、識別情報が詐称できない保証はない、という2点」だとざっくり捉えましたが、私がまとめるより原文をお読みいただくのが妥当だと思うので、読んだ日記を列挙するにとどめておきます。

私が携帯サイトを作るなら

幸か不幸か、私は携帯サイトの開発に関わったことがないのですが、もし今「作れ」といわれたら、下記のようなセッション管理を考えます。

  • cookieで管理する。cookie非対応の携帯(docomoの旧モデル)は無視。
  • 無視するなといわれたら、Basic認証を使う(セッション管理しない)。
  • Basic認証もダメといわれたら、URLで管理する。ただしcookie非対応の端末のみ。基本はcookie
  • 重要な処理(決済とか退会とか)の際はパスワードを入力させる。

携帯の識別情報や、User-AgentヘッダやIPアドレスの一致確認はしません。高木さんのご意見のほうが説得的に感じられるからです。

はてなの仕様変更は妥当か

ところで、はてなの報告記事には気になる部分があります。

脆弱性は以下の二点が原因で発生したものです

  • はてなブックマークの /entrymobile でのキャッシュ制御処理の不備。URL のクエリパラメータとして付与されるセッションキーをキャッシュしてしまっていた
  • セッションキーのセキュリティレベルが低かった
    • 具体的には、他の情報を照合するなどしてそのセッションは本人にのみ有効とし、第三者にセッションキーを知られた場合でも被害が出ないような仕様を盛り込むべきだった(強調引用者)

現在、前者については改修を終えており同様の不具合による問題は発生しません。後者に関しては、セッションキーのセキュリティレベル向上のための開発を始めており、近日中にシステムの更新を行う予定です。

「はてなブックマーク モバイル版」の脆弱性を利用した不正アクセスに関するご報告 - はてなブックマーク日記 - 機能変更、お知らせなど

他の情報とは、携帯の識別情報かUser-Agentヘッダのことではないでしょうか。ブックマークコメントの変更時にパスワードを要求することは考えられません。

この仕様、本当に「盛り込むべき」ものなのでしょうか? 私にはそうは思えません。

  • 携帯の識別情報を照合するのは:プライバシー上の問題がある。また、本当に「本人にのみ有効」になるという保証がない。
  • User-Agentヘッダを照合するのは:(高木さんのご意見によれば)無意味(おそらく、推測による詐称が可能だから)。

他の照合方法があるのかもしれませんが、私には思いつきません。