クロスドメインモデルの 理解 Peleus Uhley PacSec 2008 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 概要 導入 クロスドメイン通信の歴史 HTMLにおけるクロスドメイン プラグインにおけるクロスドメイン 比較表 クロスドメイン実装のベストプラクティス 結論 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 同一元ポリシー ウェブサイトのコンテンツが、他のウェブサイトのコンテンツから読み出しや変 更できるのは望ましくない ブラウザセキュリティの基本構成要素 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. GETとPOST ドメイン間の情報送信は常に許可されてきた レスポンスの読み取りは同一元ポリシーによって制限されていた クロスサイトリクエストフォージェリ ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 他のトリック JSON-P 別ドメインへ情報を渡すために、scriptタグとJSONデータ+コールバック関数を利用 Not inline with the intention of the JSON format(※未訳) Document.domainの書き換え www.example.org を example.org に短縮するために利用できる インポート読み込み scriptタグはリクエストに応じて動的なJavaScriptを返すCGIを指定することができる プラグインは他のドメインからSWFをインポートすることができる HTTPの代替物 ソケット、ローカルコネクション、他のプロトコルなど ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. これらのソリューションによって何ができるのか? 開発者は、クロスサイトリクエストフォージェリの危険がない、クロスドメイン通 信の手法を必要としている 2つのドメインが同じ開発グループによってコントロールされているか、承認さ れたAPIがあるならば、クロスドメインに危険性はない www.example.org と data.example.org できるだけ多くの人に利用してもらうために、明示的にウェブに情報を公開す る場合がある 毎日の株価情報 選挙の結果 天気予報 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. HTML での規格 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Microsoft XDR IE 8 Beta 1にて導入 マイクロソフトのインタネットゾーンに基づいたセキュリティ プロトコルが一致していなければならない(file:// <-> file://) クッキー: クッキーは送らない HTTPメソッド: GETとPOSTのみを許可 改良点: URI毎 Beta2 では W3 Access-ControlのAccess-Control-Allow-Originヘッダを サポートするよう改訂された ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. XDR サンプルコード if (window.XDomainRequest) { xdr = new XDomainRequest(); if (xdr) { //Assign handlers to xdr {not shown} xdr.open(“POST", “http://www.example.org/xdr.cgi”); xdr.send(“HTTP_VAR=hello%20World”); } function readdata() { var dRes = document.getElementById('dResponse'); dRes.innerText = xdr.responseText; alert("Content-type: " + xdr.contentType); alert("Length: " + xdr.responseText.length); } ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. W3C Access Control クロスドメインXML HTTP リクエスト(XHR)を許可 最近MicorosoftとMozillaが承認 まだ開発中段階 クロスドメインの認可情報をヘッダで送信 レスポンスはフルURI単位 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Pre-Flight リクエスト Pre-flightリクエストは、以下のようなカスタマイズされたリクエストが行われる 場合に実行される: GET, POST, HEAD 以外のメソッドを利用 カスタムヘッダを利用 Content-typeヘッダがapplication/x-www-form-urlencoded, multipart/form-data, text/plain以外 Pre-flightリクエストでは、OPTIONSメソッドが使われる ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Pre-Flight リクエストヘッダ Origin リクエストヘッダ Access-Control-Request-Method リクエストヘッダ リクエスト元を指定 GETやPOST以外の利用したいHTTPメソッドを指定 Access-Control-Request-Headers リクエストヘッダ XHRが含む予定の追加ヘッダを指定 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. W3C Access Control レスポンスヘッダ Access-Control-Allow-Origin レスポンスヘッダ クロスドメイン通信が許可されているリクエスト送信元 “*”はどこからでもアクセスを許可 Access-Control-Max-Age レスポンスヘッダ Access-Control-Allow-Credentials レスポンスヘッダ クッキー、HTTP 認証ヘッダや他の認証情報が必要かどうかを示す Access-Control-Allow-Methods レスポンスヘッダ pre-flightリクエストの結果をキャッシュする期間 リクエストを許可するHTTPメソッド一覧 Access-Control-Allow-Headers レスポンスヘッダ リクエストに含むことを許可するヘッダ一覧 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. XHR Requestの例 new client = new XMLHttpRequest(); client.open(“CUSTOM", "http://www.example.com/hello") client.onreadystatechange = function() { /* do something */ } client.send() ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Pre-Flight リクエスト(hello-word -> www) リクエスト OPTIONS /hello HTTP /1.1 Origin: http://hello-world.example.org Access-Control-Request-Method: CUSTOM レスポンス Access-Control-Allow-Origin: http://hello-world.example.org Access-Control-Max-Age: 3628800 Access-Control-Allow-Methods: CUSTOM ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 実際のリクエスト (hello-world -> www) リクエスト CUSTOM /hello HTTP /1.1 HOST: www.example.org ORIGIN: hello-world.example.org …. レスポンス Access-Control-Allow-Origin: http://hello-world.example.org Hello World! ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 他の利点 ORIGINヘッダの導入 暫定的な提案では、クロスサイトリクエストフォージェリからの保護のため、 XML HTTP Request以外でOriginヘッダを利用 プライバシーの問題もなく、REFERERよりも一貫している 現在策定中 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. postMessage / クロスドキュメントメッセージング HTML5 Spec内で定義 Used to send strings of data between frames as GET VARs(※未訳) Firefox 3, IE8, WebKit ナイトリー, Opera 9.5 で対応 メッセージに”To”アドレスを含めることによってセキュリティコントロール “To”はワイルドカードの場合もある 改良点: ドメイン単位 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. data.example.comでのサンプルコード <iframe src="http://www.example.org/message/" id="iframe"></iframe> <form id="form"> <input type="text" id="msg" value="Message to send"/> <input type="submit"/> </form> <script> window.onload = function(){ var win = document.getElementById("iframe").contentWindow; document.getElementById("form").onsubmit = function(e){ win.postMessage( document.getElementById("msg").value, "http://www.example.org" ); e.preventDefault(); }; }; </script> ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 受信 <b>This iframe is located on www.example.org</b> <div id="test">Send me a message!</div> <script> window.addEventListener("message", function(e){ if ( e.origin !== "http://data.example.com" ) return; document.getElementById("test").textContent = e.origin + " said: " + e.data; }, false); </script> ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Post processing IE 8 Beta 2 ではリターンされた文字列を後処理するeval()以外のメソッドが 導入される toStaticHTML -- HTMLからJavaScriptを取り除く JSON.stringify -- スクリプトオブジェクトをJSONストリングに変換 JSON.parse -- JSONストリングをJavaScriptオブジェクトに変換 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Plugin での規格 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Adobe クロスドメインの歴史 2005年にAdobeによって開発 最初の公式なクロスドメインモデル 現在Adobe Flash PlayerとAdobe Readerで使われている JavaFX, Reader, SilverLightでのさまざまなサポート メタポリシーとヘッダのための最近のいくつかのアップデート ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Adobe クロスドメイン 2005年にAdobeによって開発 HTTPレスポンスボディの読み込み許可 ヘッダデータへのアクセスは許可しない GETリクエストとファイルアップロードを制御 認証情報を送信 HTTPSからHTTPSへの通信は許可 HTTPからHTTPSへの通信はデフォルトで許可しない ソケット用の異なるポリシーメカニズムが存在 ディレクトリ毎のパーミッション ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 3タイプのコントロール データを共有したいドメイン ウェブサイトから受け取りたいカスタムヘッダ サーバ上に他のクロスドメインポリシーファイルが存在するかどうか ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. クロスドメインポリシーファイルの例 <cross-domain-policy> <site-control permitted-cross-domain-policies="master-only"/> <allow-access-from domain=“example.com“ secure=“true”/> <allow-access-from domain=“*.example.com“ secure=“true”/> <allow-http-request-headers-from domain="www.example.com" headers="SOAPAction" secure=“true"/> </cross-domain-policy> ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. JavaFX Adobeのcross-domain.xmlファイルのシンプルバージョンをサポート 基本的には”*”のみサポート Java Web StartとJava Plug-In技術のために、Java SE 6 update 10で導入 Java SE 6 update 10は現在リリース候補 クッキー: 利用 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Microsoft SilverLight Adobeの cross-domain ファイルフォーマットのシンプルバージョンをサポー ト(headersとallow-domain) 独自のファイルフォーマットをサポート(clientaccesspolicy.xml) クッキー: 利用 改良点: ドメイン単位 & ディレクトリ単位 HTTPSからHTTPSのクロスドメイン通信は禁止 HTTPからHTTPSへも禁止 ソケットパーミッションも同様に定義 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. ClientAccessPolicy ファイルのサンプル <?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from> <domain uri=“http://www.adobe.com:80"/> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy> ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 他のクロスドメインコントロール Flash Player AllowScriptAccess OBJECT タグパラメータ SWFからHTML DOMへの通信を許可 クロスドメイン通信を許可しない”sameDomain”がデフォルト HTMLからSWFへの通信のためには、SWF内の関数が明示的に登録される必要がある SilverLight EnabaleHtmlAccessパラメータはSilverLightからHTMLへのクロスドメイン通信を許可 ExternalCallersFromCrossDomainはHTMLからSilverLightへのクロスドメイン通信を許可 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 比較 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. ブレークダウン(※もっといい訳を考える) クッキー/認証 ヘッダの送信 許可されるメソ ッド Adobe Crossdomain Access Control XDR PostMessage /XDM ClientAccessPolicy はい オプショ ン いいえ はい * はい オプション オプショ ン いいえ N/A オプション Any GET/ POST N/A GET/POST はい None GET/POST ワイルドカード ドメイン はい はい ワイルドカ ードのみ クロスプロトコ ル オプション はい いいえ はい None スコープ ディレクトリ単 位 ファイル 単位 ファイル単 位 ファイル単位 ディレクトリ単位 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 脅威 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. ヘッダへのアクセス すべてのモデルはHTTPヘッダへのアクセスを制限しようとしている これはサーバの以下のような危険な振舞いを防ぐことができる可能性があ る: TRACEメソッドの許可 レスポンスボディ中のセッションIDをURLの一部として返す ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. クロスサイトスクリプティング クロスサイトスクリプティングフィルタは新しいJavaScriptでは準備されないか もしれない JSONのように、開発者はクロスドキュメントメッセージングのデータがどのよ うに扱われるのか、注意する必要があるだろう 伝統的なクロスサイトスクリプティング攻撃は依然として存在し続けるだろう ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. クロスサイトリクエストフォージェリ クロスサイトリクエストフォージェリ攻撃はレスポンスデータにアクセスできる かもしれない 過度に寛容なクロスドメイン実装はこのような攻撃を許してしまう可能性があ る ORIGINヘッダがこのような攻撃を減らす役に立つかもしれない ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. センシティブな情報のリーク 攻撃者はセンシティブな情報を含むレスポンスボディにアクセスできる これは最少特権の原理に従わない場合に起こりえる: ドメインの大本のクロスドメインポリシーでワイルドカードが指定されている クロスドメインポリシーが特定のサブドメインやファイルに制限されていない あるモデルでは、サーバが権限を決めるために必要なすべての情報を持っ ていることを確かめるために、クッキーを送信する(※自信なし) またあるモデルでは、サーバによる間違いというリスクを避けるために、クッ キーを送らない(※自信なし) ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. ベストプラクティス ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. “*” は本質的にevilか? 適切に適用されない場合、危険となり得る センシティブではないウェブサイト上の、本当にパブリックな情報であればOK 天気予報 選挙結果 株式市場情報 ローカルファイルシステムのコンテンツには必要かもしれない 露出を最小限にするため、ウェブサイトのサブディレクトリに対して適用する べき ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. ドメインのスコープを理解する コントロールはプロトコルに基づいて制限される? コントロールはポートに基づいて制限される? コントロールはフルURIに基づいて制限される? リモートドメインはユーザによってアップロードされたコンテンツを許可してい る? ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. “信頼されたコンテンツ”を慎重に定義する 開発者は、クロスドメインデータを処理するコードを、自分で作成しているの で、信頼する傾向にある しかし、コードは信頼できるとしても、信頼できないデータをパースしている 開発者はクロスドメインコードを信頼できるドメインにホストするか、コードを 別のドメインに移動することによるsame-origin protectionを活用することを 考慮すべき ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. クロスドメインリクエストされる側 ユーザは、あなたが彼らの情報を外部に公開することはないと信頼している、 ということを肝に銘じる ワイルドカードは避ける 可能であればパスやURIの制限を活用する 必要なヘッダ以外は許可しない 必要であればW3C Access Controlによる認証リクエストを行う センシティブなページではXDMを許可しない XDMリクエストではtoStaticHTMLやJSON parsingといった安全なデータハ ンドリングを活用する ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. クロスドメインリクエストする側 ユーザはあなたが彼らの情報を外部に送ることはないと信頼している リモートサイトは彼らが持つ情報を、あなたを信頼して預けている 誰かがネットワーク上でリクエスト元ドメインをスプーフィングするかもしれな い センシティブなデータを含むページに対するXDMを許可しない データバリデーションを行う ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. クロスドメインを許可しないことを考慮する HTTP/HTTPSが混在したクロスドメイン通信 プロキシによってリレーするのがより適切 センシティブな情報をホストするサイトには、クロスドメインは適さないかもし れない インターナルなウェブサーバでは、ワイルドカードパーミッションが必要 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 結論 ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Good or Evil? Evil? 開発者はセキュリティに関する決定でミスをするかも 情報共有に関する決定にユーザは関わらない より大きな機能は新しいリスクを生み出す Good? 形式化されたモデルは危険なソリューションに対してより安全な代替案を提供する コントロール方法が形式化されていると、クロスドメインによる情報漏えいの発見や監視が 容易になる 古くて危険なソリューションは、時間をかけて強化されていく、または捨てられる ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. 結論 Appropriate for sharing between sites owned by common entities(※未 訳) 開発者は、彼らが利用しているものをコントロールすることについて教育され る必要がある 設計されたクロスドメイン通信は、アドホックなソリューションよりベターだ さまざまなソリューションは開発者に選択権を与える ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. クロスドメイン通信関連記事 Cross-domain 101 Updates for AJAX in IE8 Beta 2 http://www.adobe.com/devnet/flashplayer/articles/cross_domain_policy.html http://blogs.msdn.com/ie/archive/2008/10/06/updates-for-ajax-in-ie8-beta-2.aspx PostMessage API Changes http://ejohn.org/blog/postmessage-api-changes/ ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. テクニカルリファレンス Adobe Cross-domain Overview: http://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html Schema: http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html Access Control Spec SilverLight Information http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx Java http://dev.w3.org/2006/waf/access-control/ https://jdk6.dev.java.net/plugin2/#CROSSDOMAINXML Cross-document messaging/PostMessage Mozilla: https://developer.mozilla.org/En/DOM:window.postMessage Microsoft: http://msdn.microsoft.com/en-us/library/cc197057(VS.85).aspx ® Copyright 2008 Adobe Systems Incorporated. All rights reserved. Questions? ® Copyright 2008 Adobe Systems Incorporated. All rights reserved.
© Copyright 2025 ExpyDoc