セッションハイジャック

読み:せっしょんはいじゃっく / 英語表記:session hijacking

利用者とサーバの間の通信(セッション)を識別する情報(セッションIDなど)を盗んだり推測したりして、攻撃者が正規の利用者になりすまし、そのセッションを乗っ取る攻撃。

イマシルちゃんの解説

遊園地で、入口でもらった手首のバンドを見せれば、何度でも乗り物に乗れるとするよ。

もし、だれかにそのバンドを取られちゃったら、その人は、きみのふりをして、自由に乗り物に乗れちゃうよね。
Webサイトも、ログインしたあとは「バンド」みたいな番号で本人を見分けているんだ。
その番号を盗まれると、パスワードを知られていなくても、入られちゃうんだよ。

より深い解説

定義

Webアプリケーションは、ログインした利用者を、Cookieなどに保存したセッションIDで識別する。セッションハイジャックは、このセッションIDを攻撃者が手に入れ、利用者になりすましてアクセスする攻撃である。パスワードを知らなくても、ログイン後の権限を使える。

セッションIDを手に入れる主な方法

方法内容
盗聴暗号化していない通信から、Cookieを盗み見る
推測連番や時刻など、規則的に作られたセッションIDを推測する
XSSスクリプトで、ブラウザのCookieを読み取って送らせる
セッション固定(セッションフィクセーション)攻撃者が用意したセッションIDを利用者に使わせ、ログインさせた後に、そのIDでアクセスする
URLからの漏えいURLに含まれたセッションIDが、Refererや履歴などから漏れる

対策

対策内容
推測できないIDにする十分な長さの、暗号論的に安全な乱数で作る
通信の暗号化HTTPSを使い、Cookieに Secure 属性を付けて、暗号化された通信でだけ送る
スクリプトから読ませないCookieに HttpOnly 属性を付ける
ログイン時にIDを変えるログインに成功したら、新しいセッションIDを発行する(セッション固定の対策)
有効期限一定時間操作がなければ、セッションを無効にする
URLに含めないセッションIDは、URLではなくCookieで扱う

TCPのセッションハイジャック

Webに限らず、TCPの通信でも、シーケンス番号を推測して偽のパケットを差し込み、通信を乗っ取る攻撃がある。これも、セッションハイジャックと呼ばれる。

実際の試験ではここに出る!

この用語が出てくる記事

↑