クッキーをセキュアにする〜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