セッションハイジャックとは、コンピューター通信でりようする「セッション」を窃取し、本人に成り代わって通信を行うというサイバー攻撃です。言わば「なりすまし」で不正アクセスをする行為です。
「セッションハイジャック」と聞くと、とても難しいサイバー攻撃で、防ぐのが難しいを感じてしまう方も多いかと思いますが、それぞれの用語の意味を把握してしっかりと対策を行っておけば大丈夫です。
今回の記事ではその攻撃の原因と対策方法を解説しましたので最後までぜひご覧ください。
セッションハイジャックとは?
Webアプリケーションとブラウザはユーザーに快適なサービスを提供するために、個別のセッションIDやcookieを使って個人認証を行い、通信をやり取りしています。
セッションハイジャックとは、何らかの手段でこれらの情報を窃取し、本人に成り代わって通信を行うというサイバー攻撃です。言わば「なりすまし」行為なので、盗んだ免許証を使って悪事を働く様子を想像すると、イメージしやすいかと思います。または盗んだパスポートで海外に行って悪さをするようなものですね。
上記からも「セッションハイジャック」は、そのWebページのログインからログアウトまでの通信(セッション)を乗っ取る(ハイジャック)行為であることが言えます。
セッションIDとは、ウェブサイトなどにアクセスしたユーザーのセッションを一意に識別するために、WebサーバやWebアプリケーションによって付与される情報のことである。通常は、Cookieとしてブラウザに対して付与されるが、Cookieを無効にしているユーザーにも対応するために、URLのリクエストパラメータの一部に付与される場合もある。
引用:セッションID|weblio
上記に書いた「URLのリクエストパラメータの一部に付与される場合もある。」の部分はまさにセッションハイジャックの原因の一つとなる行為です。
そのような点も含めて、セッションハイジャックの原因を見ていきましょう。
セッションハイジャックの原因とは?
セッションハイジャックが起きてしまう原因は、主に以下の3つに分類されます。いずれも直接ログインパスワードを窃取するわけではありませんから、他のサイバー攻撃とは少し毛色が異なります。
順を追って解説するので、確認していきましょう。
セッションIDを推測
セッションIDが日付や登録名など脆弱性の高いもので構成されている場合、攻撃者は正規ルートでセッションIDを解析し、似たものを推察して不正利用することができます。
また、比較的単純なID構成であれば、推察するまでもなくツールを使った総当たり攻撃で、簡単に看破されてしまいます。
ユーザーからセッションIDを奪取
何らかの方法不正アクセスを行い、正規ユーザーとWebサービスの間に介入して、正規ユーザーからセッションIDを奪取する方法です。
例えば、クロスサイトスクリプティング(XSS)によるサイバー攻撃を行いユーザーを騙し、攻撃者用サイトにセッションIDやcookieを不正表示することができます。
ID固定化によるサイバー攻撃
セッションフィクセーション攻撃とも呼ばれる手段です。
攻撃者が取得した正規のセッションIDをユーザーに使用させ、対象のWebサイトにユーザーがログインしたのを確認して、攻撃者が背乗りする行為です。
ページ遷移やログイン状態など、Webアクセスの際に一定時間持続して使用する情報であるセッションIDに対する攻撃のひとつ。フィクセーションは「Fixation」、つまり「強制」ともいうべき攻撃手法で、攻撃者が既に知っているセッションIDの値をユーザーに使わせ、そのユーザーのセッションへのアクセスを押さえてしまう(そのユーザーになりすます)こと。
セッションハイジャック攻撃されるとどうなる?
セッションハイジャックはいわば「なりすまし行為」なので、本人に代わって攻撃者がWebサービスなどを利用することになります。従って、一般的には以下のような被害が想定され、注意が必要です。
- 正規ユーザーになりすまして、機密情報を盗む
- 正規クライアントになりすまして、サーバに侵入する
- オンラインバンクの不正出金
- 登録情報の漏洩や改ざん
- クレジッドカードの不正利用
上記を見ただけでも、大きな被害が予想されますね。
その被害事例には下記のようなものがあります。
被害事例:「Apache」サーバ不正アクセス事件(2010年)
Apache(アパッチ)のバグトラッキングソフト「JIRA」をホスティングしているサーバが、セッションハイジャックされた事件です。
同サーバの管理者がクロスサイトスクリプティング(XSS)を行う意図で添付されたURLを踏んだことにより、セッションを含むcookieが窃取され、管理者権限を攻撃者に奪われてしまったというもの。
また、周到な犯人はこれと同時に即座に「JIRA login.jsp」に対してブルートフォース攻撃(総当たり)を実施することで、JIRAアカウントのパスワードの略取を狙い、大きな騒ぎとなった事件です。
被害はかなり甚大で、「JIRA、Bugzilla、Confluenceユーザーのハッシュ化されたパスワード」の流出が懸念されました。
セッションハイジャックされないための対策
セッションハイジャックによる攻撃を回避するには、いくつかの方法がありますが、根本的な部分は「攻撃者にセッションIDを察知されないこと」です。
セッションハイジャックの対策を行うには、必然的にセッション管理を見直す必要が求められます。
URLにセッションIDを含めない
基本中の基本です。WebサイトとブラウザはセッションIDをやり取りする際にURLにセッションIDを含めていることがあります。
当然この方式ではセッションハイジャックの恰好の的なので、cookieにセッションIDを含めてしまうか、フォームデータ上のhiddenフィールドでセッションIDをやり取りする方式に切り替えることをオススメします。
セッション管理ツールに頼る
セッションの管理が難しいという方は、管理ツールに頼ってしまうのも1つの手です。
最近のWeb開発プラットフォームはセッションIDの管理機能を有したものも多いので、積極的に利用したいところ。中途半端に自作管理を行うよりもはるかに安定します。
ワンタイムセッションIDの発行
セッションIDをワンタイム化してしまい、攻撃されにくくする手段です。ワンタイム化するとアクセスするたびにセッションIDが変更されるので、特定は非常に難しいと言えます。
php環境下ならば「session_regenerate_id関数」を利用することで簡単に行えます。
まとめ
今回はセッションハイジャックについて解説しましたが、いかがでしたか。ユーザー目線では、なかなか気づきにくい乗っ取り行為なので、脅威を実感した時には既に被害が出ています。
サイト経営者としては非常に怖いサイバー攻撃ですから、セッションIDの管理には注意を払いましょう。
Webページにアクセスしたユーザーが、そのページ内で行う一連の動作を1セッションと数えている。たとえば、ユーザー名とパスワードを入力して認証を行ってログインした場合、ログアウトしてそのWebページを退出するまでが、1セッションである。
引用:セッション|コトバンク