この節では、SWFアプリケーションを開発する際に考慮する必要がある全体に影響を及ぼすさまざまな脅威について、簡単な概要を示します。これ以外にも特定のSWFファイルの特定のコンテキスト内で定義できる個別の脅威がありますが、この概要では、SWFのほとんどのデプロイメントに共通しており全体に影響を及ぼす脅威について説明します。このドキュメントの残りの部分では、関連する脅威についての項目で、これらの脅威をFlash Playerの特定のAPIや概念に対応付けて示します。それに続いて、各節で、該当する脅威に対する緩和策について説明します。
クロスドメインのロードでは、リモートSWFが、ロードする側のドメインおよびデータへの意図しないアクセスを許可されることがあります。ロードする側のSWFがセキュリティドメインにリモートSWFをインポートする場合、ロードされたSWFは親SWFのデータにアクセスし、そのデータを攻撃者に中継して返すことができます。さらに、Webページの設定によっては、ロードされたSWFがロードされたSWFファイルのWebページにスクリプトを挿入できます。このような攻撃は、エンドユーザが親SWFファイルによってロードされたムービーを制御できる場合に発生する可能性があります。クロスドメイン権限の昇格は、SWFをスプーフィング、ブラウザへのスクリプトのインジェクション、悪意のあるデータのインジェクション、DNSリバインディング、承認の不適切な制限などにさらされる恐れがある、全体に影響を及ぼす脅威です。この脅威は、複数のリモートソースからのコンテンツが1つのセキュリティドメインにロードされて処理される場合に常に存在します。
リモートでロードされるSWFが、スプーフィング攻撃を目的として、ロードされるSWFのコントロールをロードする側のSWFの上に表示しようと試みることがあります。 悪意のあるSWFが、親SWFの上に重ねて表示されることにより、ロードする側のSWFファイルのコントロールを乗っ取ることができます。例えば、開発者がLoaderにマスクを設定してリモートSWFファイルの表示をStageの特定の領域に制限していない場合、攻撃者がスプーフィング攻撃を実行できます。
攻撃者は、ほとんどの脆弱性を、アプリケーションに悪意のあるデータを挿入することによって見つけ出します。Flashアプリケーションは、さまざまな種類のインターフェイスから悪意のあるデータのインジェクションを受けることがあります。例えば、FlashVarは通常、HTMLのObjectタグによって設定されます。しかし開発者は、これらの変数がURLから設定でき、その場合、攻撃者が変数の値を簡単に変更できるということを忘れがちです。 例えば、FlashVar値が別のSWFなどのリモートコンテンツを指すURLである場合、攻撃者はそのURLを、悪意のあるSWFを指すように変更できます。ActionScript 2.0では、初期化されていない値をFlashVarとしてURLから自動的に設定することができます。ActionScript 3.0では、各FlashVar変数の値を明示的に要求し、その値を内部変数に手動で割り当てる必要があります。
また、SWFファイルがLocalConnectionからデータを取得する場合、SWFファイルがサーバから変数をリモートでロードする場合、SWFファイルが別のSWFファイルからデータをインポートする場合など、SWFがリモートデータをロードするときも常に、悪意のあるデータのインジェクションが行われる可能性があります。リモートで取得したデータの妥当性を検証しない場合、SWFファイルがこの脅威にさらされます。
インスタンスによっては、所有者がサイト上にサードパーティのSWFファイルをホストしていることがあります。しかし、Webサイトの所有者は、サードパーティのSWFファイルにHTMLコードまたはJavaScriptコードへの読み書きアクセス権を与えないようにできます。アクセス許可の設定が不適切な場合、攻撃者はページ全体を書き換えたり、信頼できるサイトからフィッシングサイトにユーザをリダイレクトしたりできます。この脅威は、Web管理者がサードパーティのSWFをホストしている場合と、SWFファイルがFlashVar経由でURLを受け入れる場合に存在します。
考慮する必要がある最も一般的な脆弱性は、攻撃者がクロスサイトスクリプティング(XSS)攻撃を目的としてデータを挿入することです。例えば、標的となるSWFが、FlashVarからURL値を取得して、その情報をnavigateToURLまたはgetURLコマンドに送信するとします。この動作に目を付けた攻撃者は、FlashVarの元のURL値を「javascript:」URLで置き換えようと試みます。getURLまたはnavigateToURLメソッドによってブラウザに送信されたJavaScript URLは、SWFをホストしているドメインのコンテキストで実行されます。 このjavascript: URLに、ドメインからCookieを盗んでサードパーティサイトに転送するコマンドなどの一連のJavaScriptコマンドが含まれている可能性があります。クロスサイトスクリプティング攻撃は、信頼できるSWFに悪意のあるリモートSWFがインポートされ、そのリモートSWFがjavascript: URLを呼び出す場合にも発生します。
過度なクロスドメインのアクセス許可を与えると、リレー攻撃、スプーフィング、データ盗用などの攻撃を受ける恐れがあります。 例えば、悪意のあるSWFファイルが、過度なアクセス許可を与えるクロスドメインポリシーファイルを利用して、保護されたデータをリモートWebサイトから盗もうと試みる場合があります。信頼できないSWFが、LocalConnectionを使用して別のドメインに悪意のあるデータを送信する場合もあります。allowDomainメソッドまたはクロスドメインファイルでワイルドカードを誤用すると、ドメインの制限が緩くなる可能性があります。
開発者は、ドメインwww.a.comがwww.b.comに対して許可されていないアクセス権を得ることがクロスドメインの脅威であると考えがちです。 しかし開発者は、SWFファイルが共有環境でホストされるかどうかについても考慮する必要があります。これには、開発者のコンテンツがhttp://www.host.com/~user1でホストされ、http://www.host.com/~user2のコンテンツが開発者によって明示的に信頼されていない場合も含まれます。また、広告で、複数のソースからの広告が同じドメインでホストされる場合もあります。Flash Playerが承認を決定する際には、LocalConnectionの使用時のように、ディレクトリパスとファイルパスを考慮する場合があります。 また、allowDomain()設定のように、ホストするドメインだけを考慮する場合もあります。この脅威への対抗策を検討するときに、開発者は、共有ホスティングの状況を考慮する必要があります。
攻撃者が、RTMPやHTTPなどの暗号化されていないチャネルで送信されたデータに対して、読み取りや変更を試みることがあります。SWFファイルが重要な機能(ショッピングカートでのクレジットカードデータの収集など)を実行している場合、攻撃者がそのデータを閲覧する可能性があります。攻撃者がトラフィックを操作して、信頼されているSWFファイルがエンドユーザに届く前に、悪意のあるSWFに置き換えようとすることもあります。この脅威に対する脆弱性としては、HTTPSやRTMPSなどの安全な通信チャネルを使用して重要なデータを保護していない場合が挙げられます。
HTTP経由でロードされるSWFファイルがHTTPS経由でロードされるSWFファイルのデータにアクセスできる場合にも、通信の安全性が低下する恐れがあります。デフォルトでは、HTTP経由でロードされるファイルがHTTPS経由でロードされるSWFファイルのデータにアクセスすることはできません。しかし、データがHTTP SWFとHTTPS SWFの間で共有されていると、安全でないチャネル経由でデータが送信される可能性があります。これは、allowInsecureDomainメソッドが誤用された場合や、crossdomain.xmlファイルで安全フラグがfalseに設定された場合に発生します。
攻撃者が、SWFファイルとローカル共有オブジェクトから重要なローカルデータを盗もうとすることがあります。SWFファイルがデコンパイルされ、ローカル共有オブジェクトがサードパーティアプリケーションによって読み取られる可能性があります。また、攻撃者がクロススクリプティングによって情報を直接取得しようと試みることもあります。この脅威に対する脆弱性としては、開発者がSWFアプリケーションと共有オブジェクトに重要なデータを格納している場合などが挙げられます。
クロスサイトリクエストフォージェリ*(XSRF)とは、攻撃者のWebサイトを閲覧したユーザに、そのユーザが認証を受けていない別のサイトへの要求を無許可で開始させる手法を指します。標的となるWebサイトがユーザ情報の更新にアトミックな(1回の送信で実行される)アクションを使用している場合、攻撃者はブラウザにそのサイトへの要求を強制的に実行させることにより、そのサイト上でユーザのアカウントの変更を開始できます。 ブラウザによって要求にCookieが自動的に付加されるので、攻撃者が攻撃を実行する際にユーザのCookieは必要ありません。通常、攻撃者は自分が実行した更新の結果を直接見られませんが、それでも変更は行われます。Webの現在の設計上、このような攻撃に対する防御はWebサイト自体では実装されていますが、ブラウザやそのクライアントでは実装されていません。Flash Playerはブラウザを使用してWeb要求を実行するので、クロスサイトフォージェリ攻撃を実行するためのツールとしてFlash Playerが利用される可能性があります。
WebブラウザとFlash Playerでは、同一生成元ポリシーの一環として、ドメイン名を使用してデータへのアクセスが承認されます。攻撃者が、Webブラウザが特定のドメイン名に関して記録済みのIPアドレスを頻繁に更新するように仕向けることにより、同一生成元ポリシーを回避しようと試みることがあります。この攻撃を実行するためには、攻撃者が、自分の制御下にあるDNSサーバと悪意のあるWebサイトを所有している必要があります。攻撃者はさまざまな手法を用いて自分のDNSサーバ内で自分のドメイン名のIPアドレスを更新し、その更新情報を取得するようにWebブラウザに強制します。攻撃者は最初に自分のドメイン名が自分のパブリックWebサイトのIPを指すようにし、次に攻撃対象の内部ネットワーク上の信頼できるサーバのIPを指すようにし、最後に再び自分のパブリックWebサイトを指すようにします。
これらの要求ではすべて、IPアドレスだけが変更され、要求の確立に使用されるドメイン名は変更されません。すべての要求のドメイン名が同じなので、Webブラウザは、信頼できる内部サーバへの接続と攻撃者のパブリックWebサーバへの接続がセキュリティ上同一であると見なします。 これにより、攻撃者は内部Webサーバの情報を盗み、そのデータを自分のパブリックWebサイトに送り返せるようになります。Flash Playerは、多くの種類の要求で、ホスト側のWebブラウザを使用してHTTP接続を確立します。 したがって、Webブラウザに対するDNSリバイディング攻撃はFlash Playerにも影響を及ぼします。 この攻撃は、Flashのソケット接続にも適用される可能性があります。