##セッションハイジャック
セッションハイジャックとは名前の通り、なんらかの方法を用いて正規利用者ではないものが他人のセッションIDを乗っ取る攻撃手法です。
セッションハイジャックが行われた場合、アプリケーション内で正規の利用者ができることはほとんど実行が可能なので、正規利用者の個人情報閲覧、送金や物品購入、なりすましメールの送信やSNSへの犯罪予告など正規利用者への被害はとても大きくなります。
###セッションハイジャックの攻撃手法と対策
セッションハイジャックの具体的な攻撃手法
①セッションIDの推測
②セッションIDの盗み出し
③セッションIDの強制
###セッションIDの推測
Webアプリケーションに用いられるセッションIDの生成規則に問題があると、第三者にセッションIDが予測され、悪用されてしまう可能性があります。
生成規則に問題があるセッションIDは以下のようなものを元に生成されているものが多いです。
①ユーザIDやメールアドレス
②リモートIPアドレス
③日時
④乱数
上記のものをそのまま使う場合や、エンコードやハッシュ計算というものと合わせて利用される場合があります。
ユーザIDや日時は外部から参照可能なためセッションIDを推測することが可能になります。
推測可能なセッションIDの生成を回避するためには、Webアプリケーション開発ツールが持つセッション管理機構を利用します。
###エンコード
動画を視聴・編集したり、弊社で扱っているNVR(ネットワークビデオレコーダー)に保存されている動画データを取り扱うことです。
###ハッシュ計算
ハッシュアルゴリズムを使ってハッシュ値を計算します。
###セッションIDの盗み出し
セキュリティに不備のあるネットワークではセッションIDとして利用されるcookieを盗聴されてしまう可能性があります。暗号化されていない無線LANは、まさにそのようなネットワークの一例です。
SSLというネットワークを暗号化するプロトコルがあります。
###SSL
インターネット上の通信を暗号化してくれる技術です。これにより、第三者からの情報の盗聴や改ざんを防ぐことができます。
セッションIDのような重要な情報をやりとりする際はSSLを使うと機密性・完全性を保つことができます。
###セッションIDの強制
セッションIDを悪意のある第三者が外部から強制させる方法があり、これをセッションIDの固定化といいます。
セッションIDの固定化は以下の手順で行われます。
①悪意のある第三者は普通の利用者としてセッションID(abc123)を取得
②被害者に対して1.で取得したセッションIDを強制
③被害者は標的アプリケーションにログイン
④悪意のある第三者は、被害者に強制したセッションID(abc123)を使って標的アプリケーションにアクセスする
被害者は悪意のある第三者が強制したセッションIDで認証が完了しています。そのため、そのセッションIDを用いてアクセスした悪意のある第三者はすでに認証済みのページにアクセスすることができます。
セッションIDを固定する方法は多種多様です。Webアプリケーション側でセッションIDの固定化攻撃に対策する方法として、認証が完了した時点でセッションIDを変更するという方法があります。
そうすることにより、認証前にセッションIDが固定されたとしても、認証後にセッションIDが変わるため固定されたセッションIDでアクセスしようと試みる悪意のある第三者は認証されておらず攻撃は成功しません。
##Railsでのセッションハイジャック対策方法
【例】セッションの盗聴について
config.force_ssl = true #コメントアウト
記述のコメントアウトを外します。これにより、本番環境で環境アプリケーションを公開する際に先ほど紹介したSSLを使い通信経路を暗号化してくれるため、セッションIDの盗聴を防ぐことが可能になります。
※Rails側のHTTPSの設定は完了しますが、Nginx等の設定を、HTTPへのアクセスからHTTPSへリダイレクトする設定へ変更する必要があります。サービスをローンチする機会がある場合はNginx等の設定を変更し対策をします。
###セッション固定化攻撃
対策として、ログイン成功後に古いセッションを無効にし新しいセッションIDを発行します。
reset_session
上記の1行をセッションを再発行したいアクション内に指定することにより、セッションは再発行されセッション固定化攻撃を防ぐことができるようになります。