🕶️

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

2024/08/11に公開

はじめに

この記事では、サイバー攻撃手法の一つであるセッションハイジャックについて、概要レベルで解説させていただきます。

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

セッションハイジャックとは、クライントとサーバー間の一連のやりとりであるセッションを乗っ取ることで、攻撃者が本来のユーザーになりすまし、不正な操作を行うサイバー攻撃である。

セッションハイジャックは、フィッシング攻撃のようにユーザーIDやパスワードは必要とせず、セッションIDを奪うことで実現するものである。

なお、セッションハイジャックは、セッション管理の不備を狙ったサイバー攻撃の1つであるため、セッションハイジャックの前にセッション管理について確認する必要があるが、これについては、以下の記事を参照いただきたい。
https://zenn.dev/noi2024/articles/710178b5d270ec

セッションIDの強奪方法

セッションハイジャックは、何かしらの方法により、正規のユーザーからセッションIDを奪う必要があるが、具体的な方法としては以下の3つがある。

①セッションIDの盗聴
②セッションIDの推測
③セッションIDの固定化

それぞれの具体的な方法とその対策は、以下のようなものである。

セッションIDの盗聴(イメージ)

セッションIDの盗聴は、クライアントとサーバー間の通信が、暗号化されたHTTPSではなく、暗号化されていないHTTPの場合に、パケットキャプチャツールなどを用いてセッションIDを強奪する方法であり、具体的なイメージは以下のようなものである。

①正規のユーザーがサイトへログインする。
②サーバーが生成したセッションIDがクライアントに送信される。
③攻撃者がパケットキャプチャツールなどを用いて通信経路を盗聴する。
④クライアントとサーバー間の通信が、暗号化されたHTTPSではなく、暗号化されていないHTTPのため、セッションIDを強奪する。
⑤強奪したセッションIDを用いて、正規のユーザーになりすましてサイトへアクセスし、正規のユーザーの情報などを盗み取る。

以上がセッションIDの盗聴のイメージである。

セッションIDの盗聴(対策)

盗聴への対策は、プロトコルをHTTPではなく、通信経路が暗号化されたHTTPSを使用し、cookieにsecure属性をセットすることである。secure属性が設定されたcookieはHTTPSのみで使用されるため、これにより、攻撃者からの盗聴を防ぐことが可能となる。

また、セッションIDをcookieやPostメソッドではなくURLパラメータとしてやり取りする場合も、
URLの一部としてセッションIDが見えてしまうため、取得することが可能となる。そのため、セッションIDのやり取りには、URLパラメータを使用せずに、cookieやPostメソッドを使用する。

セッションIDの推測(イメージ)

セッションIDの推測は、セッションIDをフレームワークなどを用いて生成した複雑なものとせず、
連番など自分で考えた簡単なルールにより生成したものとしている場合に可能となる。

例えば、Aさんがログインした際に生成されたセッションIDがSID1だったとする。
次に、攻撃者が正規のユーザーとして何度がログインを試したところ、セッションIDがSID2、SID3だったとする。
すると、このサイトのセッションIDの生成ルールは、SIDというアルファベット3文字と、単純な連番から構成されたものだと容易に推測できる。

これにより、攻撃者はAさんのセッションIDの値であるSID1でサイトにアクセスし、AさんになりすましてAさんの情報などを強奪することが可能となる。

セッションIDの推測(対策)

推測への対策は、セッションIDを自分で考えたものとせず、フレームワークなどから生成された、暗号化アルゴリズムによる予測困難な値とすることである。

セッションIDの固定化(イメージ)

セッションIDの固定化は、ログイン時にサーバー側でセッションIDを生成せず、ログアウト時にもセッションIDを破棄せず、セッションIDの継続利用を認めているサイトで可能となる。

まず、攻撃者は正規のユーザーとしてサイトにログインし、セッションIDを取得する。
次に、このセッションIDをURLパラメータとしたURLを罠メールなどにより利用者に送り付け、このセッションIDを使ってログインさせる。

これにより、この利用者とセッションIDが紐づけられ、攻撃者はこの利用者の情報を盗み取ることが可能となる。

セッションIDの固定化(対策)

固定化への対策は、サーバー側でログインの際にセッションIDを生成し、これを利用させる。また、ログアウトの際はセッションIDを破棄し、継続利用を認めないようにすることである。

以上、セッションハイジャックを概要レベルで解説させていただきました。
なお、上記を動画にて解説したものは以下となります。
こちらもご参考にしていただけると幸いです。

https://youtu.be/aKu9Zbi6jK4

Discussion