「Brokenアクセスコントロール」とは、不完全なアクセス制御メカニズムによって発生する脆弱性のことだ。ユーザーIDとパスワードによる認証の後、あるコンテンツや機能を、特定のユーザーのみに提供し、ほかのユーザーには見えないようにすることをアクセス制御というが、この制御メカニズムに欠陥があったときに発生する。
以下はある情報提供サイトの構造のサンプルである。認証が通った会員には、会員のみが閲覧可能な特別な情報を提供している。
会員限定の情報にアクセスするには認証プログラムを経なければならないという想定だが、会員限定オブジェクトのアクセス権限設定を行っていない、もしくは適切ではないため直接入力によりたやすくアクセスできてしまう。
Brokenアクセスコントロールは、以下の方法で防御できる。
攻撃者が送り込んだコードを、そのページを閲覧したほかのユーザーにスクリプトとして実行させるのが「クロスサイトスクリプティング(XSSと略すこともある)」だ。ユーザーからの入力データを表示する仕組みになっている掲示板のようなWebアプリケーションにおいて、この脆弱性は発生しやすい。
Webアプリケーションにおいて、入力データの十分な検証がなされないとき、攻撃者は悪意のあるコードをほかのユーザーが閲覧する場所に配置することができる。そのページを閲覧したほかのユーザーは、そのスクリプトが信頼できるものであるか否かを判断するすべがなく、実行してしまう。その結果、簡単にそのユーザーがサイト内で使用していたCookieやセッション情報を盗み出すことができる。
この攻撃は性質上、広範囲に広がりやすい。掲示板サイトなど、自分が書き込んだHTMLをほかの人が閲覧できるようなサイトを利用してクロスサイトスクリプティングを仕掛けることができる。以下のフォームは閲覧者にダイアログボックスを表示させるためのスクリプトである。
【編集部より】
当記事公開時に、クロスサイトスクリプティングと「Nimda」を関連付けた記述がありましたが、誤認識であることが分かりましたので該当部分を削除しました。お詫びして訂正させていただきます(2005年11月25日)
この書き込みが行われた後にサイトにスクリプトの実行を許可しているブラウザからアクセスすると、以下のダイアログが表示される。
この例では単純なダイアログボックス表示のスクリプトであるが、この仕組みを応用して攻撃者が用意したWebサイトにアクセスさせてCookieの送信などを行わせることができる。
アプリケーション側でクロスサイトスクリプティングを防御するには、送信されたリクエストのサニタイジングが有効である。サニタイジングとはある環境で制御文字となるものを制御文字ではなく単なる文字として扱わせることである。上記の場合であれば、送信された内容をサーバに書き込む前、もしくはレスポンスデータを返す際に「<」を「<」、「>」を「>」に変換してしまえばスクリプトは実行されない。また、記号など使える文字の種類を制限してしまうのも有効な対処となり得る。
Copyright © ITmedia, Inc. All Rights Reserved.