セッションハイジャック
基礎
クライアントとサーバの正規のセッションの間に割り込んで、そのセッションを奪い取る攻撃
不正行為例
- 正規のサーバになりすましてクライアントの機密情報を盗む
- クライアントに対しては正規のサーバに、サーバに対しては正規のクライアントになりすまし、通信データを盗聴しつつ、不正なリクエストやレスポンスを紛れ込ませるなどしてセッションをコントロール
- Man-in-the-Middle Attack(中間者攻撃)
- HSTS
- HTTP 公開鍵ピンニング
- Man-in-the-Middle Attack(中間者攻撃)
クッキーインジェクション
種類と実行方法
TCP におけるセッションハイジャック
- 初期シーケンス番号の推測、もしくはパケットの盗聴によってシーケンス番号を突き止め、それをもとに偽装したパケットを発信することで、正規の相手ホストになりすます
- IP スプーフィング(spoofing)
- DoS 攻撃やアクセス制御の迂回などを目的として、送信元 IP アドレスを偽装すること
- 外部から入るパケットの送信元 IP アドレスが自ネットワークのものであれば、そのパケットを破棄する
- ingress filtering
- rcp, rlogin などのサービスが稼働している場合に有効であるため、今日のインターネット環境で行われる可能性は極めて低い
UDP におけるセッションハイジャック
- UDP ではクライアントからのリクエストに対して、正規のサーバよりも先にレスポンスを返すことでセッションハイジャックを行う
- DNS キャッシュポイズニング
Web サーバとクライアント間のセッションハイジャック
- 次のようなセッション管理の脆弱性により、この攻撃が成立する可能性が高まる
- セッション ID が単純であるために推測・偽造される
- 詳細なセッション管理情報が丸見えになっているため悪用される
- セッション管理情報が暗号化されていないため盗聴され、悪用される
- XSS の脆弱性により、クッキーにセットされたセッション管理情報が盗まれ、悪用される
認証サーバとクライアント間のセッションハイジャック
偽造 ARP によるセッションハイジャック(ARP スプーフィング、ARP キャッシュポイズニング)
- ハイジャックの対象となるセッションが張られている LAN 上で、攻撃者自身の MAC アドレスと正規のホストの IP アドレスとを組み合わせた偽の ARP 応答パケットを送信することで ARP キャッシュの内容を書き換え、セッションをハイジャックする方法
セッションフィクセーションの実行方法
既に確立されているセッションをハイジャックするわけではなく、ターゲットユーザに対して攻撃者が指定したセッション ID をユーザに強制的に使わせ、意図的にセッションを確立させ、そのセッションをハイジャックするもの
この攻撃が成立するための条件
- 正規のセッション ID を容易に入手可能であること
- ターゲットとなる Web サーバで URL Rewriting 機能(URL でセッション ID を指定する機能) が有効になっていること
- 当該サイトへのログイン機能をもつユーザを知っており、フィッシングメールなどを送ることが可能であること
- ユーザがフィッシングメールに騙され、ログインすること
Cookie Monster Bug
- クッキーの domain 属性が正しく機能せず、指定した範囲を超えてクッキーが有効になってしまうバグ
セッションアドプション
- PHP や ASP.NET などに存在する未知のセッション ID を受け入れる機能
対策
予防・防止
- TCP, UDP
- パッチの適用
- TLS, IPsec, SSH など、パケットの偽装が困難な暗号化プロトコルなどを使用する
- Web サーバとクライアント
- TLS を使用して Web 通信を暗号化する
- セッション管理システムを自社で開発せず、アプリケーションサーバなどに実装されている機能を使用する
- リバースプロキシや WAF の導入
- 認証サーバとクライアント間
- TLS など、サーバの正当性が確認でき、かつパケットの偽装が困難なプロトコルの使用
- 偽装 ARP
- ハブを物理的に保護することで、不正な機器が物理的に接続されるのを防ぐ
- 不正 PC 接続検知システムによって不正な接続を排除する
- セッションフィクセーション
- URL Rewrigin 機能を無効にする
- TCP, UDP
検知・追跡
- ログ
- IDS/IPS
回復
- 予防調査