セッションハイジャック (セッションハイジャック) とは | 意味や読み方など丁寧でわかりやすい用語解説

作成日: 更新日:

セッションハイジャック (セッションハイジャック) の読み方

日本語表記

セッションハイジャック (セッションハイジャック)

英語表記

Session hijacking (セッションハイジャッキング)

セッションハイジャック (セッションハイジャック) の意味や用語解説

セッションハイジャックとは、Webアプリケーションにおいて、正規のユーザーが認証済みのセッションを、攻撃者が不正に乗っ取る行為である。ユーザーが一度Webサービスへログインに成功し、サービスとの間に「セッション」が確立された後、攻撃者がそのセッションを識別するための情報(セッションID)を不正に入手し、それを利用して正規ユーザーになりすましてサービスへアクセスする。これにより、攻撃者はパスワードを知ることなく、あたかも正規ユーザーであるかのようにWebサイトを操作し、個人情報の閲覧、不正な取引、データ改ざんなど、さまざまな被害を引き起こす可能性がある。これはWebアプリケーションのセキュリティにおいて特に注意すべき深刻な問題の一つである。 まず、「セッション」とは、Webアプリケーションとクライアント(Webブラウザ)の間で、複数回のリクエストにわたって状態を維持するための仕組みを指す。HTTPプロトコルは本来ステートレスであり、個々のリクエストは独立しているため、ユーザーがログインした状態やカートに入れた商品情報などを記憶できない。このため、WebアプリケーションはセッションIDという一意の識別子を生成し、通常はHTTP Cookieとしてクライアントのブラウザに送信する。以降、ブラウザはこのセッションIDをリクエストごとにサーバーに送り、サーバーはそれを受け取ることで、どのユーザーからのリクエストであるかを判断し、そのユーザーの状態を維持する。 セッションハイジャックの攻撃は、このセッションIDが攻撃者の手に渡ることで成立する。攻撃者が有効なセッションIDを入手すると、そのIDを使ってサーバーにリクエストを送信することで、正規ユーザーとして振る舞えるようになる。つまり、攻撃者はログイン認証を改めて突破する必要なく、すでに認証された状態を「乗っ取る」のである。 セッションIDを窃取する主な手法は複数存在する。一つは「セッション固定(Session Fixation)」である。これは攻撃者が、自身が生成した、あるいは特定のパターンを持つセッションIDを正規ユーザーに利用させる方法である。攻撃者は事前にWebサイトにアクセスし、自身に割り当てられたセッションIDを控える。次に、このセッションIDを正規ユーザーに何らかの方法(例えば、悪意のあるリンクを含むフィッシングメールなど)で利用させ、そのIDでログインさせる。ユーザーがログインすると、そのセッションIDは認証済みとなるため、攻撃者はそのIDを使って認証済みのセッションに乗っ取ることができる。 二つ目は「クロスサイトスクリプティング(XSS)」を利用した窃取である。WebサイトにXSSの脆弱性がある場合、攻撃者は悪意のあるスクリプトをWebページに埋め込むことができる。ユーザーがそのページにアクセスすると、埋め込まれたスクリプトが実行され、ユーザーのブラウザに保存されているセッションID(特にCookieに保存されたもの)を読み取り、攻撃者のサーバーへ送信させるといったことが可能となる。 三つ目は、暗号化されていない通信経路からの「ネットワーク盗聴」である。無線LANや公衆Wi-Fiなど、HTTPS(SSL/TLS)による暗号化が施されていない通信環境では、HTTPリクエストに含まれるセッションIDが平文でネットワーク上を流れるため、攻撃者がパケットを傍受することで容易にセッションIDを盗聴できてしまう。 さらに、セッションIDが推測可能な規則性を持っていたり、生成される乱数の品質が低かったりする場合、「ブルートフォース攻撃」や「推測」によってセッションIDを特定される可能性もある。短い、あるいは単純なセッションIDは、総当たり攻撃によって短時間で発見されるリスクがある。また、クライアント側のブラウザの脆弱性や、ユーザーのPCに感染したマルウェアによってセッションIDが窃取される可能性も存在する。 セッションハイジャックの被害は深刻である。攻撃者は正規ユーザーの情報を閲覧したり、パスワードを変更したり、登録情報を改ざんしたり、あるいは不正な決済を行うなど、多岐にわたる行為が可能となる。これにより、金銭的被害、個人情報の漏洩、企業の信用失墜など、取り返しのつかない事態に発展する可能性がある。 この攻撃への対策は多層的に講じる必要がある。まず最も基本的な対策は、「HTTPS(SSL/TLS)」の利用である。HTTPSを導入することで、クライアントとサーバー間の通信は暗号化され、ネットワーク上でのセッションIDの盗聴を防ぐことができる。 次に、「セッションIDのランダム性強化」が重要である。セッションIDは予測困難な十分な長さの文字列とし、質の高い乱数を用いて生成する必要がある。これにより、推測や総当たり攻撃による特定を極めて困難にする。 「セッションIDの有効期限設定」も有効な対策である。セッションのライフタイムを短く設定したり、一定時間操作がない場合にセッションを自動的に終了させるアイドルタイムアウトを設定したりすることで、セッションIDが漏洩した場合の悪用期間を限定できる。 セッション固定攻撃への対策としては、「ログイン時のセッションID再生成」が有効である。ユーザーが認証に成功した際に、サーバー側で新しいセッションIDを生成して以前のセッションIDを破棄することで、攻撃者が事前に仕込んだセッションIDが認証済みとなることを防ぐ。 CookieにセッションIDを保存する場合、「HTTP Only属性」と「Secure属性」を付与することが推奨される。「HTTP Only属性」を設定すると、JavaScriptからCookieへのアクセスが禁止されるため、XSSによってセッションIDが窃取されるリスクを大幅に低減できる。「Secure属性」を設定すると、CookieはHTTPS接続時のみ送信されるようになり、暗号化されていない通信経路上での送信を防ぐ。 さらに、「User-AgentやIPアドレスによるセッション管理」も検討される。セッションIDだけでなく、ユーザーのブラウザ情報(User-Agent)や接続元のIPアドレスなどもセッションと紐付けて管理し、これらがセッション中に不自然に変化した場合には、そのセッションを無効化する。ただし、IPアドレスは動的に変わる場合があるため、誤検知のリスクも考慮する必要がある。 最後に、セッションハイジャックの多くの原因となるXSS脆弱性自体を排除する、「XSS対策」も不可欠である。Webアプリケーションの入力値は適切に検証し、出力時には適切なエスケープ処理を行うことで、悪意のあるスクリプトの埋め込みを防ぐ。これらの対策を組み合わせることで、セッションハイジャックのリスクを最小限に抑え、Webアプリケーションの安全性を高めることができる。

セッションハイジャック (セッションハイジャック) とは | 意味や読み方など丁寧でわかりやすい用語解説