セッションハイジャック
利用者とサーバの間の通信(セッション)を識別する情報(セッション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の通信でも、シーケンス番号を推測して偽のパケットを差し込み、通信を乗っ取る攻撃がある。これも、セッションハイジャックと呼ばれる。