FLATzブログ

Ruby On Rails Security Guideの訳 : 2.Sessions 2.1 – 2.3

このエントリをdel.icio.usに追加このエントリをはてなブックマークに追加 |2009年06月05日(金)09:08|kimura

こんにちは。木村です。


今回はRuby On Rails Security Guideの訳 : 概要 + 1.Introductionの続きです。


前回、1セクションずつ掲載していくと書いていましたが、長いセクションがあるため、その場合は分割して掲載していくことにします。今回は2 Sessions2.3 Session Hijackingまでです。


原文の単語と全く違う言葉に置きかえている場合も多々あります。原文ページと併せて、ご覧下さい。気になる箇所や間違っている箇所があれば、どうかご指摘下さい。


では、以下訳です。


2.セッション
セッションはセキュリティを調べ始めるには良い箇所です。セッションは特定の攻撃の的になります。

2.1 セッションとは何か?
- HTTPはステートレスなプロトコルです。セッションがあることでステートフルになります。

ほとんどのアプリケーションは、特定のユーザのある状態を把握する必要があります。これは、買い物カゴや今ログインしているユーザのユーザIDであったりします。もし、セッションという概念がなければ、ユーザはリクエストの度に、本人であることを確認して、おそらく認証が必要となるでしょう。Railsは新しいユーザがアプリケーションにアクセスした時に、自動的に新しいセッションを作成します。ユーザが既にアプリケーションを使っているならば、作成されているセッションを読み込みます。

セッションは一般的に値のハッシュと、そのハッシュを識別するための通常32文字の文字列からなるセッションIDで構成されています。ブラウザに送られる全てのクッキーにはセッションIDが保存されています。反対にブラウザはリクエストの度にそれをサーバに送ります。Railsでは、セッションメソッドを使って値を保存したり取り出したりできます。

2.2 セッションID
- セッションIDは32バイト長のMD5ハッシュ値です。

セッションIDはランダムな文字列のハッシュ値で構成されています。ランダムな文字列とは、現在時刻、0から1の間のランダム値、RubyインタプリタのプロセスID(基本的にランダムな値)と文字定数のことです。現在のところ、RailsのセッションIDに対するブルートフォース攻撃は不可能です。今日までMD5は頑強なままですが、(ハッシュの)衝突があるので、理論上は同じハッシュ値を持った別のテキストデータを作成することが可能です。しかし、これは今日までセキュリティに影響を与えていません。

2.3 セッション・ハイジャック
- 攻撃者はユーザのセッションIDを盗み、被害者の名前でWebアプリケーションを使用します。

多くのWebアプリケーションは認証システムを持っています。ユーザはユーザ名とパスワードを入力して、Webアプリケーションがそれをチェックして、一致するユーザIDをセッションのハッシュに保存します。それ以降はセッションが有効になります。アプリケーションは、リクエスト毎に新たな認証を必要とせずに、セッションに保存されたユーザIDで識別されたユーザを読み込みます。クッキーに保存されているセッションIDでセッションは識別されます。

したがって、クッキーはWebアプリケーションの一時的な認証としての役目を果たします。他人のクッキーを奪った誰もが、このユーザとしてWebアプリケーションを使用することができます。場合によっては深刻な結果をもたらします。セッションハイジャックの方法と、その対応策は以下の通りです。

  • 安全ではないネットワークでクッキーを盗聴する。無線LANはそのようなネットワークの例です。暗号化されていない無線LANでは、接続されたどのクライアントのトラフィックも盗聴が非常に簡単です。これが無線LANを使って喫茶店から仕事をしないもう一つの理由です。Webアプリケーション開発者にとって、SSL通信の安全な接続を利用者に提供することが重要です。


  • ほとんどの人が公衆のパソコンで作業をした後に、クッキーを削除しません。そのため、もし最後のユーザがWebアプリケーションからログアウトしていなければ、このユーザとしてWebアプリケーションを使用できるでしょう。Webアプリケーションでは、ユーザにログアウトボタンを提供してください。そして、ログアウトボタンは目立つように作成してください。


  • 多くのクロスサイトスクリプティング(XSS)はユーザのクッキーを取得する狙いで悪用されます。クロスサイトスクリプティングについての詳細は後の章でとりあげます。


  • 攻撃者は見知らぬユーザのクッキーを盗む代わりに、ユーザに特定のセッションIDを強制的に使用させることがあります。この、いわゆるsession fixationについては、後の章で詳細を読んでください。


ほとんどの攻撃者の主な目的は金儲けで、Symantec Global Internet Security Threat Reportによれば、アンダーグラウンドでは盗難された銀行のログインアカウントは10ドル~1000ドル(利用できる資産価値による)、クレジットカード番号は0.4ドル~20ドル、オンラインオークションサイトアカウントは1ドル~8ドル、Eメールパスワードは4ドル~30ドルで売買されています。


次回は2.4 Session Guidelinesからです。

この記事に関するお問い合わせはこちら


関連記事


Trackback URL


このページの先頭へ