第7章 エコーバック対策
スクリプト注入: #1 ふたつの攻撃
スクリプト注入を許してしまうWebサーバの挙動
スクリプト注入(Script injection)は、被害者のブラウザに悪意のスクリプト(大部分はJavaScriptのコード)が入り込み、ブラウザの内側からセキュリティ侵害が起こる問題である。
代表的な攻撃として、いわゆる「クロスサイトスクリプティング(XSS)」が挙げられることが多い。これは Webサーバのエコーバック(鸚鵡返し(おうむがえし))のロジックを悪用する攻撃である。もうひとつ、いわゆる「第二攻撃(Second-order XSS)」も挙げられる。 いずれの攻撃においても、スクリプト注入を許してしまう Webサーバは、HTML生成時のスクリプト除染が不備なものである。
参考:
注: ちなみに、フラウザにロードされる JavaScriptコードのロジックを悪用する攻撃として、いわゆる「DOMベースのスクリプト注入」(「クライアント側コードに起因するスクリプト注入」)もある。
クロスサイトスクリプティング(XSS)のメカニズム
いわゆる「クロスサイトスクリプティング(XSS)」には、「攻撃者」、「標的サイト」および「被害者」の 3者が関与する。サイト横断的にエコーバックのロジックを悪用する。(別名:Reflected XSS)

次のようなメカニズムによって攻撃されうる。:
- 攻撃ページ
攻撃者は、スクリプト注入攻撃のHTMLページ(「攻撃ページ」)を用意する。攻撃者はこの攻撃ページを、被害者を騙して閲覧させるか、HTMLメールにて送りつける。 - 標的プログラムの呼び出し
この攻撃ページは、被害者がユーザとして日常アクセスしているあるひとつのWebサイト(「標的サイト」)の特定のプログラム(「標的プログラム」)を呼び出すよう作られている。このとき入力パラメータとして、悪意あるJavaScriptコード(「攻撃スクリプト」)がその標的プログラムに与えられるよう仕組まれている。 - 標的として狙われるプログラム
攻撃ページから呼び出される標的プログラムとして、与えられた入力パラメータの文字列をそのままHTMLページ内にエコーバックするものが選ばれる。 - 悪意のスクリプトの実行
攻撃ページから投入されたHTTPリクエストに呼応して標的プログラム返されるレスポンスには、攻撃者が仕込んだ攻撃スクリプトが含まれており、これが被害者のブラウザの中で実行される。 - スクリプトによる侵害
被害者のブラウザの中で動作する攻撃スクリプトは、次のような侵害を行い得る。- 不正なページに誘導して被害者を騙す。例えば、正規ページのリンクを書き換えて不正なページに誘導し、意図しない商品の購入等を行わせる。
- 偽のページを表示して被害者を騙す。例えば、偽のログインフォームを表示して被害者にパスワード入力を促し、入力内容を攻撃者が用意したWebサーバに報告する(アカウント乗っ取り)
- Cookieを勝手に設定する。例えば、標的サイトに被害者がログインする前の時点で、攻撃者にとって都合の良い値をそのサイトで今後セッション管理に使われるであろうCookieに設定する(セッションフィクセーション→セッション乗っ取り)
- Cookieを盗み出す。標的サイトに被害者がログインしている状況下で、そのサイトでいま使われているCookieの値を盗み出し、攻撃者が用意したWebサーバに報告する(セッションIDの捕捉→セッション乗っ取り)
- Hiddenに設定してある値を盗み出したり、任意の値を設定する。例えば、Hiddenに個人情報やクレジットカード情報等があればそれらを攻撃者が用意したWebサーバに報告する(重要情報の窃取)
参考:
第二攻撃(Second-order XSS)のメカニズム
いわゆる「第二攻撃(Second-order XSS)」(別名:Stored XSS もしくは Persistent XSS)は、データベースに保管された悪意あるスクリプトが、時間差を経て閲覧者のブラウザ上で動作する。ただしサイト横断的な構図にはならない。
攻撃者が悪意あるプログラム(ワーム)であることもありうる。2005年に MySpace のサイト内においてインシデントをもたらした「Samyワーム」は、この攻撃を実装したものであった。

次のようなメカニズムによって攻撃されうる。:
- 正規の登録ページ
攻撃者もしくは悪意あるプログラムは、 正規の登録ページを通じて攻撃スクリプトを登録すると、攻撃スクリプトはデータベース中に格納される。言い換えると、攻撃者もしくはワームは攻撃スクリプトをデータベース中に混入させて待ち伏せるのである。 - 正規の検索ページ
被害者が正規の検索ページを通じて検索結果を閲覧する際に、攻撃スクリプトが注入されてしまう。
スクリプト注入に伴って想定される被害
「クロスサイトスクリプティング(XSS)」と「第二攻撃(Second-order XSS)」によるスクリプト注入に伴って想定される侵害は共通する。例えば次のような被害がもたらされうる。:
- 正規サイトのページにあるリンクを書き換えられて不正サイトのページを呼び出してしまう
- 偽のページが表示され、利用者のパスワード等が奪われる
- ログイン前に、セッションIDを搬送するCookieを植え付けられ、利用者のセッションが乗っ取られる(セッションIDのお膳立て)
- ログイン中に、セッションIDを搬送するCookieの値が攻撃者に知られ、セッションが乗っ取られる(セッションIDの奪取)
- DOM(DocumentObjectModel)のAPIを通じてHiddenの情報を盗み出されてしまう
- TRACEメソッドが利用可能であることを悪用されて、HTTP要求の内容を盗み出されてしまう(例: Basic認証のパスワード)