Unofficial translation: Persistent Login Cookie Best Practice
- Date
- 2005-10-13 (Thu)
ちょっと考える所があって、調べものをしていて、面白い記事を見つけたのでついでに公開します。Persistent Login Cookie Best Practice 、邦題は 『ログイン保持クッキー(Persistent Login Cookie)の上手な使い方』 とでもしておきましょうか。原著: Charles Miller, 2004 翻訳: Takashi Mizohata, 2005.
ただ、この方法だと被害は少ないですが、実際に盗まれちゃった時に、盗まれたことがわかるだけ、ま、わかるだけいいのかな…
ログイン保持クッキー(Persistent Login Cookie)の上手な使い方
Persistent login cookie とは、“次回からログインを省略”や“ユーザ情報を記録する”などのチェックを入れてログインした時、あなたのブラウザに保存される Cookie です。申し上げられることは、そういった Cookie は時代遅れで、我々はユーザログインを取り扱うよりよい方法があるにも関わらず、未だに Cookie は使われているし、我々は新しい方法に移行もしていません。
以下の処方は、暗号を使用しませんが、より強力である優良な乱数生成を必要とします。
前提事項
- Cookie は脆弱です。よく使われているブラウザの Cookie 盗難に関する脆弱性と、 クロスサイトスクリプティング(Cross Site Scripting)攻撃を念頭において、Cookie の取り扱いは安全でないことを理解しなくてはいけません。
- Persistent login cookie は、それらが使用されている Web-site で、十分な認証機構となっています。正しい username と password と等価で、ひとつに纏まっています。
- ユーザは同じパスワードを各所で使います。したがって、ユーザパスワードが回収できるログイン Cookie は、そうでないものと比べて、悪影響をもたらす可能性が著しくあります。
- Persistent login cookie と一定の IP アドレスを関連付けることは、ごく一般的な使用例においても、その Cookie によるログインを妨げるでしょう。
- ユーザは、数種類のコンピュータ上で数種類のブラウザを使って、いくつかのPersistent login cookie を保持することを期待しているかもしれません。
Charles の処方
Cookie は、ユーザの username、それに続く区切り記号、さらにある大きな乱数(128 bits もあれば、気の遠くなる程大きく、十分だと思います)の3つで構成されるべきです。サーバ側は、その乱数と username の関連をデータベースに保持し、クッキーの有効性を確認できます。もし cookie が、データベース上で一致する 乱数と username を持っていれば、ログインは成功したことにします。
いかなる時にも、username はいくつかのそのような乱数に関連付けられているかもしれません。そして、起こりえないと思われますが、もし2つの username が、1つの同じ乱数に関連付けられていたとしても、あまり問題にはなりません。
Persistent cookie はログインを一回で済ますにはとてもいい方法です。認証が確認されたら、ログインに使用された乱数は、無効化され、新しい Cookie が割り当てられます。標準的な session 管理は、セッションの間ぶん、ログイン情報を保持します。つまり、新しく割り当てられた乱数を含む cookie は、次のセッションまで確認されることはありません(もちろんこの Cookie も次回アクセスのあったときに無効化されます)。
サーバ側は、既に一度でも使われたような乱数を割り当てないよう、意図的に何かをする必要はありません。それが起こるような確率は非常に低いですし、もし起こったとしても、悪用するために(乱数の再利用が起こったことを)知ることはできません。
あるユーザが意図してログアウトした場合、そのユーザの持つ乱数は無効化されるべきでしょう。加えてもしもの時のため、各ユーザのオプションとして、システム側で記録しているそのユーザすべてのログイン(乱数)情報を消去できる機能はあるといいかもしれません。
周期的にデータベースは、ある一定の期間使われていないユーザ情報−乱数の関連を消去したほうがよいでしょう(例えば3ヶ月とか:128 bit の乱数空間におけるキーの衝突というよりも、テーブルサイズの方がずっと大きな問題となりえそうです)。
以下にあげるような機能は、cookie によるログイン保持では絶対に使用できないようにすべきで、必ず正しいパスワードの入力を必要としましょう。
- ユーザパスワードの変更
- ユーザの email アドレスの変更(特に email によるパスワード復旧機能がある場合)
- ユーザの住所、支払い詳細、財務情報にアクセスする場合
- 購入に関するあらゆる機能
結果
もしログイン cookie が奪われたら、攻撃者はユーザとして web-site の機能を使うことができます。これは cookie が何を含んでいようとも、避けることはできません。しかし、攻撃者は以下のことができません。
- ユーザの機密情報にアクセスする
- ユーザのお金を使う
- ユーザのパスワードを手に入れて他のサイトで使う
- ユーザがその人の名に於いて行ったことの通知を受け取るのを横取りする
- 盗んだログイン情報を他者と共有する
Cookie は本質的に変わり続けるものなので、そのことも攻撃者が cookie を盗んで何か悪いことをする機会を減らしていると言えます。そしてそれはつまり、使い物にならない鍵を手に入れるだけにならないためには、攻撃者が手間をかけねばならないということなのです。
Comment:0
Trackback:0
- TrackBack URL for this entry
- http://blogs.grf-design.com/mt/mt-tb.cgi/122
- Listed below are links to weblogs that reference
- Unofficial translation: Persistent Login Cookie Best Practice from The Croton