クッキーをセキュアにする〜Session FixationとかSession Hijackとか〜

こんにちは。
クッキーをセキュアにする必要が出てきたため、色々探したんですがなかなか情報が発見できませんでした。結局、人の助けを借りて見つけたので記載します。(Railsのリファレンスには記載あったと思います。。。)

まず、用語の説明。

  • Session Fixation
 アプリケーションが生成したセッションIDを盗むことができないなら攻撃者自身が生成したセッションIDをクライアントに使わせてしまおう、という攻撃。
  • セッション・ハイジャック(session hijack)
 他人が確立したTCPの通信路を横取りする行為。

 ほかのユーザーのセッションIDやセッション・クッキー(セッション管理に使用しているクッキー)を盗むことで、別のコンピュータからそのユーザーになりすました
アクセスが行える危険性がある。例えば、セッション・クッキーが類推可能な簡単なものであったり、セキュアでない通信経路で送られた過程で盗まれたりすると、
セッション自体が盗まれる可能性がある。セッションが盗まれると、そのセッションを利用していたユーザーになりすましたアクセスが行える。これにより、個人情報が
盗まれたり、コンピュータに侵入されたりする危険性がある。

 セッション・ハイジャックを防ぐには、類推が難しいセッションIDやクッキーを生成し、セッションIDやクッキーの有効期間を短くすることが重要だ。また、重要な
通信ではIPSecやSSLを利用するなどの配慮も行いたい。

ではRailsでクッキーをセキュアにする方法を以下に示す。

  • プロジェクト以下、app/controller/application.rbに以下を追記。
    session :session_key => 'hogehogehogeho', :session_secure => true

FireFoxのオプションからCookieの表示を見て、送信制限欄が他のものと違う表示になってればOK

HTTPSのみセッションを有効にするので、アプリケーションによって、ログイン周りでSSLを設定しておかないとうまく動いてくれないので、SSLの設定をしていないサーバでは上記の記述は入れないようにした方がいい。

また、自動ログインにも影響でるので、日坊主日記さんを参考にさせて頂いて、試してみようかと思ってます。。。

自分の場合はこうしてます。

  • app/controller/application.rb
  if SESSION_SECURE
    session :session_key => 'hogehogehogeho', :session_secure => true
  else
    session :session_key => 'hogehogehogeho'
  end
  • config/environments/development.rb
SESSION_SECURE=true
  • config/environments/production.rb
SESSION_SECURE=fale

上記のように設定して、Secureな設定が必要な環境はproductionで起動し、それ以外はdevelopmentで動かすようにしました。必要なパターンに合わせて上記フラグを調整して下さい。

※セキュリティー対策の一部です。

  • 参照URL

Webアプリケーションに潜むセキュリティホール
セキュリティ用語−セッション・ハイジャック(session hijack)
Session Hijack