セッションハイジャックとは
この記事は約 2 分で読めます
セッションハイジャック (Session Hijacking) とは、ユーザーのセッション ID を窃取し、そのユーザーになりすましてサービスにアクセスする攻撃です。セッション ID はログイン後にサーバーが発行する識別子で、これを奪われるとパスワードを知らなくても認証済みの状態でサービスを利用されてしまいます。 OWASP の調査では、セッション管理の不備は Web アプリケーションの主要な脆弱性の一つに挙げられています。
権限が変わる瞬間に識別子を引き継がない
要求をまたいで表示設定や入力途中の内容を保つために、ログインより前の閲覧の段階から利用者ごとの識別子を割り当てる実装は珍しくない。認証を済ませた後も同じ値を使い続ける作りでは、その値が指す状態だけが変わり、値そのものは変わらない。事前にその値を知り得た者は、正当な利用者がログインを終えた時点で、権限の付いた状態を指す値を手にしていることになる。値を事前に知り得るかどうかは攻撃側の技量の問題ではなく、外部から与えた値をそのままセッションとして受け入れる余地がアプリケーション側に残っているかどうかで決まる。これは識別子を一定時間ごとに入れ替えることとは別の問題である。時間で入れ替える方式は同じ値が露出したままになる期間を短くするが、権限が変わる地点をまたいで値が引き継がれること自体には効かない。その地点に効くのは、権限を変える操作の直後に必ず新しい値を発行し、同時に古い値を無効にすることである。確認の仕方も単純で、認証の前後で値が変わっているかを比べれば足りる。通常の機能確認では現れない種類の欠落で、どちらの作りでもログインは成功するためである。よくある取りこぼしは、新しい値を発行しながら古い値を有効なまま残すもので、二つの識別子が同じ状態を指すことになり、切り替えの意味が失われる。
セッション窃取のフロー
攻撃手法
XSS (クロスサイトスクリプティング)を利用して Cookie からセッション ID を窃取する方法、ネットワーク上の通信を傍受してセッション ID を盗む方法、セッション固定攻撃で事前に用意したセッション ID を使わせる方法などがあります。
具体的な被害シナリオ
よくある誤解は「ログアウトすれば安全」というものです。実際には、サーバー側でセッションを無効化しないログアウト処理では、窃取済みのセッション ID が引き続き有効な場合があります。たとえば、カフェの公共 Wi-Fi でオンラインバンキングにログインした際、中間者攻撃でセッション ID が傍受されると、攻撃者はそのセッションを使って残高照会や送金操作を行えます。また、ブラウザに保存された Cookie がマルウェアによって抜き取られ、攻撃者が別の端末からログイン済みの状態でアクセスする「 Cookie 窃取」も増加しています。
対策
HTTPS の使用、 Cookie の Secure 属性と HttpOnly 属性の設定、セッション ID の定期的な再生成が基本的な対策です。サービスごとに固有の強力なパスワードを設定し、二段階認証を有効にしておけば、セッションが乗っ取られた場合でも重要な操作には追加の認証が求められるため被害を軽減できます。
この記事は役に立ちましたか?