セッションハイジャック
利用者とサーバの間の通信(セッション)を識別する情報(セッションIDなど)を盗んだり推測したりして、攻撃者が正規の利用者になりすまし、そのセッションを乗っ取る攻撃。
イマシルちゃんの解説
セッションハイジャックは、利用者とサーバの間で続いているやり取りを乗っ取る攻撃だよ。
例えばWebサイトでは、ログイン後の利用者を見分けるためにセッションIDという識別情報を使うことがあるんだ。
ブラウザがアクセスのたびにその情報を送ると、サーバは対応するログイン済みの利用者として扱うよ。
攻撃者がその情報を盗んで使えば、パスワードを知らなくても本人のふりで操作できる場合があるの。
だから、パスワードだけでなくログイン後に使う識別情報も守る必要があるんだ。
この解説はわかりやすかったですか?
より深い解説
定義
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の通信でも、シーケンス番号を推測して偽のパケットを差し込み、通信を乗っ取る攻撃がある。これも、セッションハイジャックと呼ばれる。