情報セキュリティにおける脅威(7)
セッションハイジャック
コンピュータネットワーク通信におけるセッション(特定利用者間で行われる一連の通信群)を、通信当事者以外が乗っ取る攻撃手法
概要
ほとんどのネットワーク通信には「双方向」(HTTPなど)や「連続」(ストリーミングによる動画配信など)といった要素があり、両者を兼ね備えたものも多数存在する(TCPやtelnetなど)。どこからどこまでが一連の通信であるかを明確化するため、通信の開始・実際のデータのやり取り・通信の終了といった手順で一連の通信を管理することが多く、このような一連の通信をセッションと呼ぶ。セッションを、通信当事者以外が乗っ取る攻撃手法をセッションハイジャックという。セッションの乗っ取りを防ぐ仕組みとして「セッションID(セッションキー)」を用いて管理することが多い。攻撃者が「セッションID」を得ることができ、その「セッションID」を用いてあたかも通信当事者であるかのように通信を偽装すること。セッションIDの奪取と偽装通信をすること。
(例)
- 正規のサーバになりすましてクライアントの機密情報(クレジットカード情報、個人情報など)を盗む
- 正規のサーバ(DNSサーバなど)になりすましてクライアントに偽の応答を返し、不正なサイトに誘導する
- 正規のクライアントになりすましてサーバに侵入し、不正なリクエストの発行、管理者権限の奪取、機密情報の閲覧、情報の改ざん、消去などを行う
- クライアントに対して、正規サーバに、サーバには正規クライアントになりすまして通信データを盗聴、不正なリクエスト・レスポンスを紛れ込ませる(セッションコントロールMan-in-the-Middle Attack)
※以下のような脆弱性をついて行われる
- プロトコルの使用上の脆弱性
- プロトコルの実装上(OSれべる)の脆弱性
- アプリケーション(セッション管理)の脆弱性
種類と実行方法
TCPセッション
TCPではコネクション確立時に、シーケンス番号を交換し、コネクション確立後は発信者がデータを送る際にシーケンスを加算して通信を行うことで信頼性を高めている。この仕組みを利用して矛盾なくシーケンス番号を操作して成り済まし通信を行う行為をTCPセッションハイジャックという。送信元IPアドレスの詐称とTCPシーケンス番号予測攻撃を組み合わせることで、確立済みのTCPセッションに不正データを挿入することやセッションの強制切断を行うことが可能であり、セッションの乗っ取りが可能となる。
具体例
- IPスプーフィング
≪Pスプーフィング≫
偽のIPアドレスを送信元にセットしたパケットを送り込む攻撃手法。
不正侵入の手段として使われることが多く、その際、信頼されているコンピュータに成りすまして認証をパスするという手口が利用される。企業の情報システムでは、プライベートIPアドレスからアクセスすると利用できる機能などがあるが、IPスプーフィングによってプライベートアドレスを詐称することにより、外部から不正にこうした機能にアクセスできてしまう。DoS攻撃の際に送信元が割り出されないように別のコンピュータのIPアドレスを名乗るなどもある。
IPスプーフィング攻撃による、自ネットワークのホストへの侵入を防止するのに有効な対策は外部から入るパケットの発信元IPアドレスが自ネットワークのものであれば、そのパケットを阻止する
UDPセッション
UDPはコネクション確立手順がないため、クライアントからのリクエストに対して、正規サーバよりも先にレスポンスを返すことでセッションハイジャックを行う。
具体例
- DNSキャッシュポイズニング攻撃
HTTP(Web)セッション
HTTPは、一つ一つセッション単位で完結するため、連続的なやり取りや状態を管理することはできない。そのためWebアプリケーション側で各セッションを管理するための識別情報(セッションID)を生成し、URLやクッキーにセットしてクライアントとやりとりを行う。侵入者は、URL、クッキー、hiddenフィールドにセットされたセッション管理情報を推測や盗聴するなどして取得し正規ユーザに成り済まし、Webサーバとのセッションハイジャックを行う。 ※以下のような脆弱性をついて行われる
- セッションIDが単純なため推測・偽装される
- 詳細なセッション管理情報が丸見えなっているため悪用される
- セッション管理情報が暗号化されていないため盗聴・悪用される
- クロスサイトスクリプティング(XSS)の脆弱性により、クッキーにセットされたセッション管理情報が盗まれる
hiddenフィールド
ブラウザの画面上には表示されないHTMLフォーム上の項目(隠しフィールド)。セッションIDや計算に用いられる定数の格納などに使用される
認証サーバ−クライアント セッション
認証をおこなっているサーバ(認証サーバ)になりすましてクライアントからのアクセス要求を受け付け、セッションハイジャックを成立させる手法。
認証プロセスにおいて、クライアント側でサーバの信頼性を確認する手段がない場合に発生する可能性がある。
偽装ARPセッション
ARPスプーフィング、ARPキャッシュポイズニング。
ARPプロトコルの応答を偽装することにより、LAN上で通信機器のなりすましを行なう手法。通信経路情報を不正に書き換えること。攻撃を受けると、目的のノードにアクセスしたつもりが、実は悪意ある何者かのノードへと誘導される可能性がある。
攻撃者は、ユーザを意図した先へ誘導することが可能となる。
ARPというプロトコル自体の欠点であるため、本質的な解決法は現時点では見出されていない。
セッション ID の固定化
(Session Fixation/セッションフィクセーション)
- 攻撃者がシステムにアクセスし、セッションIDを取得する。ログインしていないがセッション ID は発行される
- 攻撃者は、正規ユーザがそのセッションIDを使ってログインするように仕向ける
- 正規ユーザがそのセッションIDでログインすると、そのセッションは「ログイン済み」となる
- 攻撃者の指定したセッションIDがログイン済みとなるので、攻撃者もアクセス制限された領域にアクセスできる
根本的対策
- 推測困難なセッションIDを利用する
- セッションIDをURLに含めない
- HTTPS 通信で利用するCookieにはsecure属性を付与する
- ログイン後にセッションを新規に開始する
- ログイン後にセッションIDとは別の秘密情報を持ち、各ページでその値をチェックする
対策
予防・防止
TCP、UDPセッションハイジャック
- OS・ソフトウェアのバージョンを最新化し、パッチを適用する
- SSL/TLS、IPsec、SSHなどパケットの偽装が困難な暗号化プロトコルを使用する
- 脆弱性検査を実施し、セッションハイジャックにつながる可能性のあるセキュリティホールの有無を確認・対処する
HTTPセッションハイジャック
- SSL/TISを使用してWeb通信を暗号化する
- セッション管理システムを自社で開発する場合は、乱数やハッシュ関数を使用して推測困難なセッションIDを生成する
- セッション管理情報の推測、漏えい、偽装などが発生しにくいように、利用形態やサーバ構成などに応じたセッション管理機能を実装する
- Webアプリケーションに対する脆弱性検査を実施し、セッション管理に関するセキュリティホールの有無を確認・対処する
- Webサーバのフロント(前面)にリバースプロキシサーバやWebアプリケーションファイアウォール(WAF)を設置し、セッション管理の脆弱性を突いた攻撃を排除する
認証サーバセッションハイジャック
- SSL/TLSなど、サーバの正当性が確認でき、かつパケットの偽装が困難なプロトコルを使用する
ARPスプーフィング
- ハブを物理的に保護することで不正な機器が物理的に接続されるのを防ぐ
- 不正PC接続検知システムによって不正な接続を排除する
- ARPスプーフィングを検知/防止する機能を持った製品(ハブ)を用いる
セッションフィクセーション
「HTTPセッションハイジャック」の対策+
- WebサーバのURL Rewriting機能を有効にする
- セッション管理システムを自社で開発する場合は、ユーザがログインに成功した後で新たにセッションIDを発行する
検知・追跡
- ターゲットホストのログから不審なセッションを探し出し、攻撃を検知する
- ネットワーク監視型IDS、ホスト監視型IDS、IPS、リバースプロキシサーバ、Webアプリケーションファイアウォールなどを用いて検知する(検知できるのは典型的な一部のパターンのみ)
- 不正なPC接続検知システムによってLAN上に接続された不正な機器を検知する
回復
- 被害状況を調査し、必要に応じてシステム・データの復旧作業を行う
- 攻撃が成立した原因となった脆弱性を特定し、必要な対策を実施する
- 再発防止のため、予防・防止に挙げた対策を実施する
 

