こんにちは。木村です。
今回はRuby On Rails Security Guideの訳 : 2.Sessions 2.4 – 2.5の続きです。随分間が空いてしまってすみません・・・。
今回は2.6 Replay Attacks for CookieStore Sessionsです。
原文の単語と全く違う言葉に置きかえている場合が多々あります。原文ページと併せて、ご覧下さい。気になる箇所や間違っている箇所があれば、どうかご指摘下さい。
では、以下訳です。
2.6 CookieStoreセッションへのリプレイアタック
- CookieStoreを使用する上で知っておかなければならない攻撃の1つの種類にリプレイアッタクがあります。
リプレイアタックは以下のように動作します。
- ユーザは合計額がセッションに保存されたクレジットを受けとる。(これは悪い方法ですが、デモンストレーションの目的で例にしています)
- ユーザが何か買う。
- 低くなったクレジットをセッションに保存する。
- ユーザのダークサイドが最初の段階のクッキーを取り出させ(ユーザがコピーしていたもの)、ブラウザの現在のクッキーと置き換えさせる。
- ユーザにクレジットが戻ってくる。
セッションにnonce値(ランダムな数字)を含めることで、リプレイアッタクを解決できます。nonce値は1回だけ有効で、サーバは全ての有効なnonce値を把握しなければなりません。ましてや、もし、いくつもアプリケーションサーバ(mongrels ※1)があるならば、なおさら複雑になります。nonce値をデータベースのテーブルに保存することは、CookieStoreの目的(データベースへのアクセスを避けること)を完全に無意味なものにするでしょう。
リプレイアタックに対抗する一番よい解決方法は、この種類のデータをセッションに保存せず、データベースに保存することです。ここで挙げた例では、クレジットをデータベースに保存し、ログインユーザIDをセッションに保存します。
※1 Mongrelという名前のWebサーバアプリケーションです。
次回は2.7 Session Fixationです。