クロスサイト スクリプティング : よく寄せられる質問

Q. これは何についての問題ですか?

A. マイクロソフトは多くの Web サイトと Web ユーザーに影響を及ぼす可能性があるセキュリティ上の脆弱性を確認しました。**この脆弱性は、いかなるマイクロソフトの製品、ベンダ製品の問題から発生するものではありません。**この脆弱性は Web アプリケーションのコーディング ミスによって発生します。

マイクロソフトは CERT Coordination Centerleave-ms と他のベンダと協力してこの問題に対処し、この問題に関する説明をするためにこの情報をリリースし、Web サイト アプリケーションに必要な変更を明らかにしました。また Web サイトに迅速に必要な変更がなされるように促し、Web サイトと Web 開発者に情報を提供し、暫定的な自衛手段をお知らせしています

Q. この脆弱性はどれくらいの範囲に影響を与えますか?

A. この脆弱性を利用すると、悪意のあるユーザーは、他のユーザーの Web セッション中に任意のコードを実行することができます。そのコードはユーザーのコンピュータ上で、その Web サイトで実行が許可されているあらゆる操作が可能になります。実行可能な操作には Web セッションの監視から、第三者への情報の転送、ユーザーのコンピュータで他のコードを実行したり、クッキーを読み取ったり上書きしたりすることが含まれます。そのコードは、一時的なものではなく、ユーザーが再びその Web サイトに戻って来たときに、再び実行されるような永続的なコードであることもあります。

この脆弱性を Web セッションに "混入" することはできず、悪意のあるユーザーが作成したリンクをクリックしてしまった場合にのみ発生します。この問題の長期的な解決方法は、Web サイト上のコードでこの問題を防ぐための適切なチェックを実行することです。しかし、その一方でユーザーができる一時的な対策がいくつかあります。

Q. マイクロソフト製品の脆弱性でないならば、ここで説明をするのはなぜですか?

A. この脆弱性は、Web サイトとユーザーの広い範囲に影響を与える可能性があります。弊社と、CERT、コンピュータ ソフト業界のメンバーの意図するところは、この問題に関する情報を提供し、この脆弱性を排除するためのお手伝いをすることです

Q. この脆弱性の原因は何ですか?

A. この脆弱性はある状況下において、Web サーバーに送信中のデータに悪意のあるユーザーがスクリプトを挿入することが可能になるために発生します。サーバー上のアプリケーションが応答の Web ページを生成すると、スクリプトがそのページ内に組み込まれ、ユーザーのブラウザに処理された際に実行されてしまう可能性があります。

この脆弱性にWeb サイトが影響を受けるかどうかは、Web サーバー上で稼働しているアプリケーションによってまったく異なります。推奨方法に従い、全ての入力データを使用する前に確認すれば、そのサイトは影響を受けません。しかし、ある非公式な調査によると、多くの Web サイトはそうしておらず、この脆弱性による影響を受ける可能性があります。

Q. "スクリプト"とは何ですか?

A. スクリプトは Web プログラムによく使用されるコンピュータのプログラムの一種です。 (スクリプト言語には、Javascript、Perl、Tcl などがあります) スクリプトはテキスト コマンドで構成されます。スクリプトのインスタンスが作成されると、コマンドが解釈され、実行されます。これは テキスト コマンドが一度実行可能コードに変換され、その後実行可能コードが実行される C++ のようなコンパイル言語とは対照的です。この事実はこの問題を理解する上で重要となります。スクリプト言語がこの問題に関係する理由の 1 つは、スクリプト言語はテキストを受け付ける Web ページ上のどのフィールドにも入力できるからです。

Q. "全ての入力を確認する"というのはどんな意味ですか?

A. プログラムがユーザーからの入力データを受け付けた時は常に、プログラム側でその入力データが有効か、つまり入力データの長さや内容が適切かどうかの検証を行ってください。この脆弱性の場合、アプリケーションが受け取った情報を最初に入念にチェックしないでそのまま使用した場合にのみ影響を及ぼします。

Q. プログラムがユーザーの入力データを使用前に確認する必要があるということは当たり前のことですが、なぜここで新たな問題として扱っているのですか?

A. 通常のコーディングの方法として、プログラムは入力データを使用する前に常に確認する必要があるのは周知の事実です。しかし、これに関してユーザーにアドバイスを行う理由として、この問題の 2 つの要素があります。1 つめは、現在の Web に対して行われたサイトの調査から判断すると、ほとんどこの方法に従っていないようです。2 つめはこの方法にきちんと従わないことによる潜在的な影響がこれまでに理解されていたよりもずっと広範囲であるということです。

Q. 影響を受けるのはどのような Web ページですか?

A. ユーザーの入力データに基づいて生成される動的な Web ページで、かつ上で説明したコーディング方法に従っていない場合のみです。静的なページはいかなる状況下でもこの脆弱性の影響は受けません。

Q. 動的な Web ページとは何ですか?

A. Web ページには、静的、動的の 2 種類のページがあります。静的ページは、固定したコンテンツが含まれ、ブラウザはサーバーの生成したページをそのまま表示します。静的ページはこの脆弱性による影響を受けません。動的ページは、固定したコンテンツと実行可能なコンテンツを含むページです。ブラウザが動的なページを受け取ると、ブラウザは固定したコンテンツをどのように表示するか決めるために、実行可能なコンテンツを処理します。

動的ページは、よりリッチなユーザー体験を提供します。動的ページでは、Web ページのアニメーションや、コンテンツの表示をユーザーの好きなように調整することなどが可能です。しかし、クロスサイト スクリプティングを利用すると、悪意のあるユーザーが動的ページに別の実行可能なコンテンツをスクリプト形式で送り込む可能性があります。そのようなページがブラウザに送信された場合、ユーザーのコンピュータ上でその Web サイトに許可した権限でスクリプトが実行される恐れがあります。

Q. サーバーが生成した Web ページにコンテンツを挿入することは、そのサーバー以外で可能だとは思いませんでした。これはどのようにして起こるのですか?

A. 実際には、常に発生します。ある Web サイトの検索ページを訪れたとします。検索したい言葉を入力し、サーバーにそのページを送信すると、サーバーはその検索結果を含むページを生成します。例えば "バナナ"を検索した場合、サーバーは " 'バナナ' を検索できませんでした。" というページを生成します。サーバーの生成したページにコンテンツ、つまり "バナナ" という言葉を追加したことになります。

次に、"バナナ"を入力するかわりに、検索するテキストとして有効なスクリプトを入力したとします。例えば、"banana <SCRIPT> <Alert ("Hello") ;> </SCRIPT>" と入力したとします。サーバーがこの入力データをそのままテキストとして処理した場合、サーバーはサイトを検索し、文字列全てを含む検索結果のページを生成します。ブラウザがそのページを処理する際に、ブラウザはそのスクリプトをコマンドと見なし、画面のダイアログ ボックスに "Hello" と表示します。

しかし、このシナリオは検索アプリケーションが、その入力データが適切であるかチェックしないまま使用した場合にのみ該当することに注意してください。例えば、プログラムの作成者が英数字以外のデータを入力データから取り除いた場合、かぎかっこが外され、そのスクリプトは実行されません。

Q. 悪意のあるユーザーはスクリプトをどのように埋め込みますか?

A. 悪意のあるユーザーが選んだ Web ページへユーザーを誘導するハイパーリンクを作成し、スクリプトを含む任意の入力で 1 つ以上のフィールドを埋めるのはかなり簡単であることが分かりました。この攻撃の難関は、ソーシャル エンジニアリングにあります。つまりユーザーにリンクをクリックさせるよう誘導し、ユーザーがリンクをクリックした際、飛びたいところに飛ぶが、フィールドが既に埋められているのに気づかないように設定するということです。

Q. ユーザーは悪意のあるユーザーのリンクを常にクリックする必要がありますか?

A. いいえ。大抵の場合、ユーザーはリンクをクリックする必要があります。しかし、そうでない場合もあります。例えば、ユーザーの電子メール ソフトが、あるタイプの電子メールを自動的に表示するように設定されており、リンクをクリックする必要がない場合などです。そのような種類の攻撃はメール ソフトを適切に設定することによって防ぐことができます。またクイック スタート ガイドでその方法を提供しています。

Q. 結局これはユーザーが信用できないコードを実行するケースではないのですか?

A. はい。最終的に、悪意のあるユーザーは、他のユーザーをだまして、作成したコードを実行させるので、多くの意味でこれはトロイの木馬型攻撃と似ています。しかし、悪意のあるユーザーの攻撃の実行を開始する方法では、注意深いユーザーでもコードが実行されることを気づかないようにカモフラージュされています。

Q. 悪質なコードは何が実行できますか?

A. 悪質なコードは、その Web サイトに許可している動作を実行することができます。Web サイトが信頼されておらず、ユーザーが Web 上でできることを制限するように設定している場合、スクリプトはほとんど何もできません。しかし、そのサイトが信頼されている場合多くの動作を実行することができます。例えば、Web ページに含まれているデータの変更、セッションの監視、個人情報の第三者のサイトへのコピー、特定のローカル プログラムの実行、そのサイトのクッキーへのアクセスなど、全てユーザーに知らせることなく実行される可能性があります。

Q. クッキーにアクセスするスクリプトにはどのような危険性がありますか?

A. 悪質なスクリプトによって、コンピュータ上にある、そのサイトのクッキーを読み取られ、第三者にデータを送信される可能性があります。これにより あなたのネットサーフィンの習慣についての情報が人目にさらされる恐れがあります。しかし、Web サイトは、他のサイトのクッキーにアクセスすることは不可能であり、Web サイト A を利用したクロスサイト スクリプティング攻撃は Web サイト A のクッキーにしかアクセスできないため大きな影響はありません。コンピュータ上の Web サイト Bのクッキーからの情報が人目にさらされることはありません。

Q. 長期に渡ってこの攻撃をされる可能性がありますか?

A. はい、あります。その Web サイトを訪問するたびに悪質なスクリプトが実行される可能性があります。例えば、Web サイト A を訪問して、悪意のあるユーザーが、作成したスクリプトをセッションに送り込んだ場合、ユーザーが Web サイト A を訪問するたびにそのスクリプトが実行される可能性があります。

Q. この攻撃は他のサイトに広がりますか?

A. いいえ、広がりません。ユーザーが Web サイト A を訪問して、悪意のあるユーザーが作成したスクリプトをそのセッションに組み込んだとしても、その悪質なスクリプトが Web サイト B に広がることはできません。悪意のあるユーザーは新しい攻撃を仕組み、作成したスクリプトを Web サイト B とのセッションに組み込む必要があります。

Q. この攻撃は同じ Web サイトへの訪問者間に広がりますか?

A. いいえ、広がりません。ユーザーが Web サイト A を訪問してこの脆弱性の影響を受けても、Web サイト A を訪問した他のユーザーへの影響はありません。

Q. この脆弱性が偶然利用されてしまうことはありますか?

A. いいえ、ありません。この脆弱性を利用するには、非常に特別で、意図的な一連の操作が必要となります。偶然に利用されてしまう可能性はほとんどありません。

Q. この問題は インターネット メール サービスに関して説明されている "スクリプト混入" 問題と関係がありますか?

A. はい、あります。これらの問題は、より大きな脆弱性の一例です。インターネット ベースの電子メールサービスでは、メール内のスクリプトがメール サービスのコンテキストで実行されるため、電子メール内のスクリプトはセキュリティ上の危険を引き起こすことが、広く認識されています。その結果、ほとんどのインターネット ベースのメール サービスは電子メールからのすべてのスクリプトをフィルタしています。

Q. Web ユーザーは、自衛のために何をすることができますか?

A. この問題の長期的な解決策としては、Web サイト側でコードを見直し、スクリプトを適切にフィルタしているか確認することです。しかし、クイック スタート ガイドでは、長期的対策を講じている間にもできる一時的な対策をいくつか紹介しています。

Q. Web サイトと Web 開発者は何をする必要がありますか?

A. Web サイトでは、ユーザーの入力データを元に動的な Web ページを生成するコードが、入力にスクリプトが含まれていないことを確実にするために、常に入力データをフィルタする必要があります。マイクロソフトはこの方法に関する資料を提供します。

Q. ベンダはなぜサーバーがスクリプトを入力として受け取らないようにする修正プログラムを開発できないのですか?

A. ここで主に問題になっているのは、サーバーが常にスクリプトを構成するものとしないものを区別できるわけではないということです。スクリプトはブラウザで実行でき、ブラウザ上で使用できる他のスクリプト言語、使用されている異なる文字セットなどがあります。ブラウザ側でスクリプトとして見なすものを識別できないので、サーバーはスクリプトを取り除くことができません。

Q. ベンダはなぜブラウザが悪質なスクリプトを実行されるのを防ぐ修正プログラムを開発できないのですか?

A. ブラウザがサーバーからスクリプトを含むページを受け取っても、どのスクリプトが悪意のあるユーザーによって組み込まれたのかを判断することができません。スクリプトはすべてサーバーから送られたように見えます。

Q. サーバーもブラウザもこの問題を防ぐことができないならば、Web 開発者はどのように防御策をとったらよいでしょうか?

A. Web 開発者は重要な情報、つまり、アプリケーションが要求するデータの文脈という情報を知っています。たとえば、開発者が検索ページを作成する場合、入力を英数字のみに制限することができます。それぞれのフィールドに使用可能な文字セットは異なり、使用方法によって変わってきます。しかしこれは開発者のみが知り得ることです。

Q. 推奨するセキュリティ設定の詳細情報はどこで入手できますか?

A. マイクロソフトのセキュリティ情報については、TechNet セキュリティ センターから入手してください。

Q. この問題についてテクニカル サポートを受けるにはどこに問い合わせればよいですか?

A. マイクロソフトの製品に関するテクニカルサポートは、電話番号とサポートオプションのサイトを参照してください