【セキュリティ】セッションハイジャックとは

セキュリティ

みなさんこんにちは。ちょいまけです。
今回は「セッションハイジャック」について説明します。

セッションハイジャック。名前から「セッションを乗っ取る」という意味が見えますが、セッションを乗っ取るということは何を意味するのでしょうか。

まずセッションとはそもそも何なのか。セッションハイジャックとはどういう攻撃か。どんな被害を生み出すのか。そして対処法は。これらについて説明します。

セッションとは

セッションとはWebサービスにおいてユーザーが操作した状態をサービス側で覚えておくための機能です。認証(ログイン)管理で使用されることがほとんどです。

例えば、ユーザーがパスワード等でログインするとWebサービス側でそのログイン情報を記録するためにセッション情報を発行、そしてセッションのIDをユーザーに渡し、一定時間の間ログイン状態を維持します。

セッションハイジャックとは

セッションハイジャックとは、ユーザーのセッションIDを外から何らかの方法で悪用する攻撃のことです。セッションIDを悪用されると成りすましなどの被害が発生します。

セッションハイジャックの攻撃パターンは、以下の3つに分類できます。

  • セッションIDを推測
  • セッションIDを盗む
  • セッションIDを強制

順番に説明します。

セッションIDを推測

Webサービス側でセッションIDを発行する際にIDの生成方法の推測が簡単な方法を使用していると、外部からセッションIDを偽造されてしまいます。

セッションIDを盗む

Webサービスの脆弱性を利用して、セッションIDを盗み出すという方法があります。ネットワークの盗聴、XSS(クロスサイト・スクリプティング)、サーバーやブラウザなどの脆弱性などから盗まれる可能性があります。

XSSがどういうものか分からないという方は、以下の記事をご確認ください。

セッションIDを強制

セッションIDを外から強制するという攻撃もあります。ユーザーのセッションIDを攻撃者が設定したセッションIDに強制することができれば、攻撃者はセッションIDを知っている状態になるので、後はやりたい放題です。

セッションハイジャックによる被害例

GitLab

GitLabに関しては脆弱性が発見されただけで、具体的な被害が出たわけではないのですが紹介します。

GitLabは米国時間2017年8月30日にセッションハイジャックが可能な脆弱性を確認しました。その後、この問題に関しては修正対応を行っています。

マイナビニュース: GitLab、セッションハイジャックの脆弱性を修正より

今回の脆弱性はセッションIDがアドレスバーに表示されているという脆弱性で、Refererを利用してセッションIDが盗まれる可能性がありました。

対策

ユーザー側

ユーザー側でできるセッションハイジャックの対策は、怪しいリンクを踏まないこと、HTTPS対応しているサービスを利用することです。

セッションハイジャックの全てに対処することは難しいのですが、危険性を緩和することはできます。

セッションIDを盗まれて、成りすましの被害に合わないよう心がけましょう。

開発側

セッションIDを推測

推測しやすいセッションIDを使用しているのが原因です。

例えばタイムスタンプ(日付)やIPアドレスを利用し、自作でセッションIDを生成しているなどといったパターンがあります。

今どきのWebアプリケーションには、一定の安全度が確保されたセッションID生成機能があるので、変に自作などせずセッションIDを生成する際にはWebアプリケーションの機能を利用するようにしましょう

セッションIDを盗む

ネットワーク盗聴

ネットワーク盗聴対策は、セッションIDをURLに載せないようなサーバーの設定に変更することです。

URLにセッションIDが載っていると、そのURLがネットワークから傍受されることでセッションIDが流出します。GitLabの事例と同じです。

XSS

XSSは外部からの入力値をエスケープすることで対策できます。PHPならhtmlspecialcharsを使えば大丈夫です。

セッションIDを強制

使用している言語によっては、強制されたセッションIDを受け入れてしまう可能性があります。なので対策は、認証処理が完了した後にセッションIDを再生成することです。

例え強制されたセッションIDで認証が完了したとしても、新たにセッションIDを発行すれば、攻撃者に強制された使用不可になります。

さいごに: 「セッションハイジャック」イコール「成りすまし」

セッションIDを盗まれると、攻撃者に自分のアカウントを使った成りすましに合い、攻撃者の自由に自分のアカウントを操作されてしまいます。

サービスによっては多額のお金を失うなど、かなり厳しい被害に合うかも知れません。

セキュリティをしっかり学んで、こう言った攻撃の被害に合わないよう、または生み出さないようにすべきです。

今回は以上です。
最後まで読んでいただきまして、ありがとうございました。

コメント

タイトルとURLをコピーしました