酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

セッションに関するセキュリティリスクについて勉強してみた!

Webサービスに関するセキュリティについて基礎をちゃんと理解したくて勉強をはじめました。 基本的には、『Rails セキュリティガイド — Rails ガイド』 を一から読みながら、大事なところを写経しています。無料なのにめっちゃわかりやすくてはかどります!


セッションとは

「リクエストとそのリクエスト元を結びつけるための仕組み」です。 コンピュータがネットワーク通信において、『接続(ログイン)してから切断(ログオフ)』 するまでの一連の動作や時間をさして、 セッション と呼びます。 このセッションによって、特定のユーザーがどのような状態にあるかを追跡する事ができます。

セッションハイジャック

ユーザのセッションidを盗むと、攻撃者がそのユーザーと偽ってWebアプリケーションを利用 できてしまいます。これを セッションハイジャック と呼びます。

セッションの取り扱いに関するガイドライン

セッションには巨大なオブジェクトを格納しない。idだけをセッションで保存して、データは サーバ側に保存すること。また、セッションには重要なデータを保存しない。ユーザーによって データの改竄や削除が容易なため。

CookieStoreセッションに対する再生攻撃

Cookie側に重要なデータを保存して暗号化するのもNG。過去のCookieを再現すること自体は 容易なため、悪意のあるユーザーに古いCookieを再現されてしまい、重要なデータが改竄される 可能性がある。

有効な対策としては、ログイン成功時に古いセッションを破棄して、新しいセッションを生成する。

Railsのセッション管理

# Cookieでの保存(CookieStore、デフォルト)
セッションの中身を_application_sessionというCookieに保存する。Rails4以降は暗号化している。
クライアント側で操作できてしまうので、過去の状態に戻す等の不正が考えられる。

# DBへの保存
ActiveRecordSessionStoreなどのGemを使うとDBにセッションの中身を保存できる。
サーバ側に保存することでCookieStoreの問題を解消できるがDBへの負荷が上がってしまう。

# メモリへの保存
DalliなどのGemを使うとMemcachedやRedisなどにセッションを保存できる。
DBよりも高速に処理できるが、複数サーバの環境では一箇所のMemcachedやRedisを共有する必要がある。

セッション固定攻撃

セッションが有効期限切れになるタイミングで、攻撃者が標的のセッションを自分のものと置き換えます。 具体的には、XSSを使ってJavaScriptのコードインジェクションによって置き換えます。 もし、サーバー側がそのセッションを破棄せずに使い続けるような仕様になっている場合は そのセッションが攻撃者のものと一致した状態でログイン処理を行う。 結果として、攻撃者は標的ユーザーになりすますことができます。

これを防ぐためにログイン時にセッションを破棄して新しいセッションを生成することです。 Railsであれば以下のコマンドを実行すればセッションを破棄することができます。

1
reset_session

セッションに有効期限をつける

セッションを無期限にした場合、CSRFやセッションハイジャック、セッション固定などの攻撃の機会を増やしてしまいます。 これを防ぐためには、セッションに有効期限を持つようにすることです。ただし、Cookieでセッションを管理する 場合は、ブラウザ内で簡単に有効期限を変更できてしまいます。そのため、セッションの有効期限はサーバーサイド で管理することが望ましいと言われています。

CSRF (Cross Site Request Forgeries)

攻撃の主な流れ。

1) 攻撃者が、攻撃用のWebページを作成して WWW上に公開する
2) 第三者が、攻撃用のWebページにアクセスする
3) 第三者が、HTTPリクエストによって、攻撃者のの意図した操作が行われる

Webサイト側のCSRFへの対策

Webサイト(開発者)側のCSRFへの対策。

1) 暗号論的擬似乱数をCookie値とformのhidden値に発行する
2) 一方の値は、偽造を防ぐために暗号学的ハッシュ関数に通す
3) HTTP POST時にその両方の値が一致するかを検証する

[ThinkIT] 第2回:セッション管理 (1/4)

Railsのセッション管理方法について - Programming log - Shindo200

Rails セキュリティガイド — Rails ガイド

セッション固定攻撃 | 鳩丸ぐろっさり (用語集)

おすすめの書籍