(57)【要約】正しくない振る舞いをするプラグイン（意図的にまたは非意図的に）を隔離し、特定してシステムの中断および障害を防止するサンドボックスアーキテクチャが提供される。プラグインのエラーに基づき、このアーキテクチャはペナルティポイントシステムを通して不良プラグイン(bad plug-in)の登録を自動的に使用禁止にし、阻止する。不良プラグインのパブリッシャはその不良プラグインを使用禁止にし、そのパブリッシャをアンセーフ(unsafe)リストに登録することによって制御される。隔離(isolation)は、マシン隔離、プロセス隔離、アクセス権が制限されたセキュアアカウント、およびローカルセキュリティメカニズムを使用したプロセス内のアプリケーションドメイン隔離のように、複数のレベルで提供することができる。複数レベルの隔離を組み合わせると、ハイレベルのセキュリティが達成される。隔離を行なうと、他のプラグインの実行から分離され、ファイルシステムおよびネットワークＩＰのようなシステムリソースが制限される。さらに、このアーキテクチャは、プラグインの実行のための高度にスケーラブルで、ステートレスの低水準管理アーキテクチャであり、このアーキテクチャは、事前の構成なしで追加のサンドボックスサーバをオンザフライ(on-the-fly)で追加または削除することによってスケーリングすることができる。
2012510679.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実装プログラム管理システム（１００）であって、
アプリケーションと共に実行される補助コードを受信するためのインタフェースコンポーネント（１０２）と、
隔離された環境において１以上の隔離レベルを使用して前記補助コードを受信し、セキュアに隔離するための隔離コンポーネント（１０８）と、
部分的に異常な実行の振る舞いに基づいて、前記隔離された環境において前記補助コードの実行をモニタリングし、管理するための管理コンポーネント（１１２）と
を備えることを特徴とするシステム。
【請求項２】
前記補助コードは前記アプリケーションと共に実行されるために受信したサードパーティプラグインであり、前記アプリケーションはサーバアプリケーションであり、前記隔離コンポーネントは前記補助コードが隔離された実行のために送信される先のサンドボックスサーバの一部であることを特徴とする請求項１に記載のシステム。
【請求項３】
前記１以上の隔離レベルは、マシン隔離レベル、プロセス隔離レベル、またはアプリケーションドメインコードアクセス隔離レベルの少なくとも１つを含むことを特徴とする請求項１に記載のシステム。
【請求項４】
前記インタフェースコンポーネントは、前記補助コードからのコールが前記アプリケーションに送られることを保証することを特徴とする請求項１に記載のシステム。
【請求項５】
前記管理コンポーネントは、前記異常な実行の振る舞いに応答して適用されたペナルティポイントの累積総計に基づいて前記補助コードを使用禁止にすることによって前記補助コードの実行を停止することを特徴とする請求項１に記載のシステム。
【請求項６】
前記異常な実行の振る舞いに基づいて前記補助コードによって累積されたペナルティポイントをトラッキングするためのペナルティコンポーネントをさらに備えることを特徴とする請求項１に記載のシステム。
【請求項７】
増加した実行負荷に基づいて１以上の既存隔離コンポーネントを選択するための負荷管理コンポーネントをさらに備えることを特徴とする請求項１に記載のシステム。
【請求項８】
プログラムを管理するコンピュータ実装方法であって、
実行のために補助コードを受信するステップ（５００）と、
実行のために隔離された環境に前記補助コードを送信するステップ（５０２）と、
前記隔離された環境において前記補助コードを実行するステップ（５０４）と、
異常な実行の振る舞いについて前記補助コードの実行をモニタリングするステップ（５０６）と、
前記異常な実行の振る舞いに基づいて前記補助コードの前記実行を管理するステップ（５０８）と
を備えることを特徴とする方法。
【請求項９】
前記異常な実行の振る舞いに基づいてペナルティポイントを適用し、累積するステップと、
あらかじめ決めたペナルティポイントのしきい値に対して前記補助コードの実行を中止するステップと
をさらに備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記ペナルティポイントは、前記補助コードの実行中のエラーに関係する異常な実行の振る舞いに基づくことを特徴とする請求項９に記載の方法。
【請求項１１】
あらかじめ決めたペナルティポイントのしきい値に対して前記補助コードの登録を防止するステップをさらに備えることを特徴とする請求項８に記載の方法。
【請求項１２】
前記補助コードが使用禁止にされた回数に基づいて前記補助コードを管理するステップをさらに備えることを特徴とする請求項８に記載の方法。
【請求項１３】
すでに実行されたまたは実行中の組織からの既存コードにわたって累積されたペナルティポイントに基づいて前記組織からの新しい補助コードの登録を防止するステップをさらに備えることを特徴とする請求項８に記載の方法。
【請求項１４】
正しくない振る舞いをする補助コードを提供するパブリッシャのヒストリに基づいて、前記パブリッシャからの補助コードが実行されるのを阻止するステップをされに備えることを特徴とする請求項８に記載の方法。
【請求項１５】
負荷分散データに基づいて複数のサンドボックスサーバからサンドボックスサーバを選択するステップをさらに備えることを特徴とする請求項８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、コンピュータ実装プログラム管理に関する。
【背景技術】
【０００２】
現在デプロイ(deploy)されている既存数のアプリケーションを使用して、ソフトウェアベンダは、新プロダクトの購入によるのではなく、カストマに価値を提供する他の方法を追及している。このことは、カスタムコードが通常のアプリケーション動作の一部として実行されるのを可能にする機能を提供することで応えることができる。カスタムコードはプラグイン(plug-in)、つまり、アプリケーション動作内の特定の個所で実行されるように構成可能である補助アプリケーション(auxiliary application)の形で追加されている。オンライン環境では、これは、コードがホストサーバ上で実行されるのに伴ってやりがいのある仕事になるため、コーディングエラーまたは悪意のコードが企業コンピュータシステムまたは企業ネットワークに障害を引き起こす原因になっている。
【発明の概要】
【０００３】
以下は、本明細書に記載されているいくつかの新規な実施形態の基本的な理解が得られるように簡略化した概要である。この概要は幅広い概観ではなく、またキーとなる要素または重要な要素を特定し、またはその範囲を限定するものでもない。その唯一の目的は、以後に提示されるより詳細な説明の序文としていくつかの概念（コンセプト）を簡略化して提示することである。
【０００４】
開示したアーキテクチャは、ソフトウェアプラグインを隔離して、コードが企業のホスト環境内で安全に実行され、しかも、その環境のために有用な機能を実行できるようにする機能を独自に組み合わせたものである。このアーキテクチャは、意図的であるか、非意図的であるかに関係なく、正しくない振る舞いをするプラグインを特定し、それから自身を保護し、エラーから回復し、ペナルティポイントシステム(penalty point system)を通して不良プラグイン(bad plug-in)の登録を自動的に防止し、阻止することを目的としたサンドボックス(sandbox)システムを含んでいる。このサンドボックスシステムは、同じ隔離されたシステム上で実行される他のプラグインからの保護も提供し、マシンネーム、ＩＰアドレス、ファイルシステムなどのセンシティブ情報およびリソースへのアクセスを制限している。
【０００５】
隔離(isolation)は、マシン隔離、プロセス隔離、アクセス権が制限されたセキュアアカウント、およびアプリケーションドメイン隔離のように、ローカルセキュリティメカニズムを使用してプロセス内で、複数レベルで得ることができる。複数レベルの隔離を組み合わせると、ハイレベルのセキュリティが得られる。
【０００６】
さらに、このアーキテクチャは、プラグインの実行のための高度にスケーラブルで、ステートレスの低水準管理アーキテクチャであり、これは、追加のサンドボックスサーバを追加することによって、事前の構成なしでオンザフライ(on-the-fly)でスケーリングすることができる。
【０００７】
上述した目的および関連目的を達成するために、本明細書には、以下の説明と添付図面と関連付けていくつかの例示した側面が説明されている。これらの側面は、本明細書に開示した原理が実施されるのを可能にする種々の方法を示しており、これらの側面およびその同等側面のすべては、請求項に記載の主題の範囲に属するものである。その他の利点および新規な特徴は、以下の詳細説明を添付図面と関連付けて考慮することにより明らかにされる。
【図面の簡単な説明】
【０００８】
【図１】開示したアーキテクチャによるプログラム管理システムを示す図である。
【図２】正しくない振る舞いをする補助コードにペナルティを科すためのペナルティコンポーネントを含むより詳細なプログラム管理システムを示す図である。
【図３】例示のプログラム管理システムを示す図である。
【図４】サンドボックスサーバを使用したプログラム管理のための一般化したシステムを示す図である。
【図５】プログラムを管理する方法を示す図である。
【図６】ペナルティポイントに基づいて補助コードを管理する方法を示す図である。
【図７】ペナルティポイントに基づいて登録を管理する方法を示す図である。
【図８】正しくない振る舞いをする補助コードのパブリッシャを管理する方法を示す図である。
【図９】正しくない振る舞いをする補助コードに基づいて組織を管理する方法を示す図である。
【図１０】負荷分散に基づいてサンドバックサーバを選択する方法を示す図である。
【図１１】隔離されたプラグイン実行を開示したアーキテクチャに従って実行するように操作可能であるコンピューティングシステムを示すブロック図である。
【図１２】プラグイン隔離のプログラム管理のためのコンピューティング環境を示す概略ブロック図である。
【発明を実施するための形態】
【０００９】
サンドボックスアーキテクチャは正しくない振る舞いをするプラグインを隔離し、特定して（意図的にまたは非意図的に）システムの中断および障害を防止する。プラグインがエラーを引き起こすと、このアーキテクチャは、ペナルティポイントシステムを通してその不良プラグインの登録を自動的に使用禁止にし、阻止する。隔離は、マシン隔離、プロセス隔離、アクセス権が制限されたセキュアアカウント、およびアプリケーションドメイン隔離（例：ＡｐｐＤｏｍａｉｎ）のように、ローカルセキュリティメカニズム（例：Ｎｅｔ  Ｃｏｄｅ  Ａｃｃｅｓｓ  Ｓｅｃｕｔｉｒｙ）を使用してプロセス内で、複数レベルで得ることができる。複数レベルの隔離を組み合わせると、ハイレベルのセキュリティが得られる。
【００１０】
さらに、このアーキテクチャは、プラグインの実行のための高度にスケーラブルで、ステートレスの低水準管理アーキテクチャであり、これは、追加のサンドボックスサーバを追加することによって、事前の構成なしでオンザフライ(on-the-fly)でスケーリングすることができる。
【００１１】
次に、図面を参照して説明すると、類似の要素は、図全体を通して類似の参照符号を使用して示されている。以下の記載では、説明の便宜上、完全な理解が得られるように多数の具体例が説明されている。なお、明らかであるように、新規の実施形態はこれらの具体例がなくても実施することが可能である。その他の例では、その理解を容易にするために周知の構造およびデバイスがブロック図で示されている。その目的は、請求項に記載した主題の精神および範囲に属するすべての変更、等価および代替をカバーすることである。
【００１２】
図１は、開示したアーキテクチャによるプログラム管理システム１００を示す図である。システム１００は、アプリケーション１０６（例：サーバ）と共に実行するために補助コード１０４を受信するためのインタフェースコンポーネント１０２を含んでいる。インタフェースコンポーネント１０２は、例えば、アプリケーション１０６の一部であることも、別々のコード部分であることもある。あるいは、インタフェースコンポーネント１０２は、例えば、隔離コンポーネント１０８の一部にすることができる。
【００１３】
システム１００は、隔離された環境内で１以上の隔離レベルを使用して補助コードを受信し、セキュアに隔離するための隔離コンポーネント１０８、および部分的に異常な実行振る舞いに基づいて隔離された環境内で補助コード１０４の実行を管理し、モニタリングするための管理コンポーネント１１２も含んでいる。
【００１４】
補助コード１０４は、サーバアプリケーションであるアプリケーション１０８と共に実行するために受信されたサードパーティプラグインにすることが可能であり、隔離コンポーネント１０８は補助コードが隔離された実行のために送信される先のサンドボックスサーバの一部にすることが可能である。１以上の隔離レベルには、マシン隔離レベル、プロセス隔離レベルまたはアプリケーションドメインアクセス隔離レベルの少なくとも１つが含まれている。代替の実現では、クライアント側でも、サーバ側でも別々に設計に従うことができる。言い換えれば、隔離されたプラグインはサーバ側で単独に処理される必要がない。
【００１５】
インタフェースコンポーネント１０２は、補助コード１０４からのコールが該当するアプリケーションに送られることを保証する。言い換えれば、プラグインを隔離して実行する複数のアプリケーションが存在する場合、インタフェースコンポーネント１０２は、プラグインからのコールを対応するサーバアプリケーションに正しくルーティングする。管理コンポーネント１１２は、隔離された環境１０８における補助コード１０４の実行を、その補助コード１０４を使用禁止にすることによって停止する。補助コード１０４の登録は、補助コード１０４がしきい値の回数を超えて使用禁止にされていたときは阻止される。
【００１６】
図２は、正しくない振る舞いをする補助コードにペナルティを科すためのペナルティコンポーネント２０２を含むより詳細なプログラム管理システム２００を示す図である。システム２００は、アプリケーション１０５〈例：サーバ〉と共に実行するために補助コード１０４を受信するためのインタフェースコンポーネント１０２、隔離された環境において補助コード１０４を受信して、１以上の隔離レベルを使用して補助コード１０４をセキュアに隔離するための隔離コンポーネント１０８、および隔離された環境において補助コード１０４の実行をモニタリングして、管理するための管理コンポーネント１１２を含んでいる。管理コンポーネント１１２は、使用禁止にされた補助コード１０４がペナルティシステムによって使用禁止にされているので、その実行を許可しないことになる。
【００１７】
ペナルティコンポーネント２０２は、個別の補助コード１０４を通して累積されたペナルティポイントを追跡し、しきい値を超えていれば、補助コード１０４を使用禁止にする。言い換えれば、正しくない振る舞いをする補助コード１０４に対してペナルティポイントが割り振られ、累積される。ペナルティコンポーネント２０２は構成可能なペナルティしきい値(penalty threshold)を含み、そのしきい値に違反すると、その補助コードの以後の実行が阻止されることになる。ペナルティしきい値に違反したときは、その同じ補助コード１０４の登録はアセンブリシグネーチャ(assembly signature)に基づいて阻止するができる。
【００１８】
アセンブリシグネーチャとしては、アセンブリネーム、アセンブリバージョン、パブリッシャ公開鍵トークン(publisher public key token)、およびアセンブリカルチャ情報(assembly culture information)がある。システムで使用禁止にされたアセンブリのヒストリは、どのパブリッシュ(publish)を使用禁止にすべきかを判断するデータとして潜在的に役立つことができる。
【００１９】
代替の実施形態では、アセンブリ登録はパブリッシャ鍵トークンを通して使用禁止にされることもあるが、このパブリッシャ鍵トークンは別の機能であり、ペナルティポイントシステムから独立して働く。
【００２０】
インタフェースコンポーネント１０２は、サーバマシン上にプリケーションと共に置いておくことができ、このアプリケーションはサーバアプリケーションにすることができる。同様に、管理コンポーネント１１２および／またはペナルティコンポーネント２０２はサーバマシン上にアプリケーション１０６と共に配置しておくこともできる。なお、これが必要条件でないのは、インタフェースコンポーネント１０２、管理コンポーネント１１２、およびペナルティコンポーネント２０２が隔離コンポーネント１０８と共に配置できるからであり、隔離コンポーネントは隔離サーバ（「サンドボックスサーバ」とも呼ばれる）にすることができる。
【００２１】
システム２００は、負荷を複数の既存隔離コンポーネント間で平衡化するために、増加した実行負荷に基づいて１以上の既存隔離コンポーネントを選択するための負荷管理コンポーネント２０４を含むこともできる。言い換えれば、プラグイン（補助コード）を処理するための同じまたは異なるサーバからの複数のアプリケーションが存在することは本アーキテクチャの意図の範囲内である。プラグインは、実行の振る舞いに従って実行、モニタリングおよび管理のために隔離コンポーネントに送信される。正しくない振る舞いをするプラグインは対応するアプリケーション（およびサーバ）にも、例えば、同じネットワークに置かれた他のシステムにも脅威となることがない。
【００２２】
別の言い方をすると、プログラム管理システム２００は、アプリケーション１０６と共に実行のために補助コード１０４を受信するためのインタフェースコンポーネント１０２を備え、補助コード１０４からのコールがアプリケーション１０６に送られることを保証する。隔離コンポーネント１０８は、マシン隔離レベル、プロセス隔離レベルまたはアプリケーションドメインコードアクセス隔離レベルの少なくとも１つを使用して、隔離された環境１１０において補助コード１０４を受信し、セキュアに隔離する。ペナルティコンポーネント２０２は個別補助コード１０４を通して累積されたペナルティポイントを追跡し、補助コード１０４の異常な実行振る舞いに応答してしきい値を超えていれば補助コード１０４を使用禁止にする。管理コンポーネント１１２は、ペナルティポイントに基づいて隔離された環境における補助コード１０４の実行をモニタリングし、管理する。
【００２３】
管理コンポーネント１１２は、使用禁止にされた補助コード１０４の実行を、異常な実行の振る舞いに応じて適用されたペナルティポイントの累積総計に基づいて拒否することによって補助コーお１０４の実行を阻止する。管理コンポーネント１１２、正しくない振る舞いをする補助コードを提供するパブリッシャのヒストリに基づいてパブリッシャの補助コードが実行されるのを阻止する。さらに、管理コンポーネント１１２は、すでに実行されたか、または実行中の組織からの既存補助コードにまたがって累積されたペナルティポイントに基づいて、新しい補助コードの登録を防止する。補助コード１０４は、サーバアプリケーションであるアプリケーション１０６と共に実行するために受信されたサードパーティプラグインであり、隔離コンポーネント１０８は、隔離された実行のために補助コード１０４が送信される先のサンドボックスサーバの一部になっている。
【００２４】
図３は例示のプログラム管理アーキテクチャ３００を示す図である。プログラム管理アーキテクチャ３００はスタンドアロンサンドボックスサーバマシン３０２の拡張機能（隔離環境の場合）を含んでいることもあれば、既存のプラットフォームサーバマシン３０４を含んでいることもある。このアーキテクチャ３００は、プラットフォームサーバマシン３０４においては「サンドボックスサーバ」として定義されたサーバの「役割」を含んでいることもあるン。サンドボックスサーバマシン３０２は、「プラグイン」とも呼ばれる補助コード（ＡＣ）３０６を安全に実行する個別の専用サーバマシンにすることができる。なお、これが必要条件でないのは、サンドボックスサーバ機能がプラットフォームサーバマシン３０４上に配置できるからである。この実施形態においては、アーキテクチャ３００は．Ｎｅｔフレームワークのコンテキストの中で説明されているが、他のオペレーティングシステムを使用するときは他の類似の実現が採用されることもある（．Ｎｅｔフレームワークは、一般に、Ｍｉｃｒｏｓｏｆｔ社によってオペレーティングシステムの中で適用されており、これは新しいアプリケーションとの相互運用性(interoperability)のための事前コード化ソリューションのライブラリを備える）。補助コード３０６は、明確に定義されたインタフェースをもつ．Ｎｅｔアセンブリ内に含まれる．Ｎｅｔコンポーネントにすることができる。
【００２５】
サンドボックスサーバマシン３０２は、「ホスト」（例えば、オペレーティングシステム（ＯＳ）サービスとして実現されている）および図示したホストプロセス３０８を含んでいる。ホストプロセス３０８は、例えば、シングルプロセスとして、「ワーカ(Worker)」で図示した１以上のワーカプロセス３１０を管理することができる。ワーカプロセス３１０は１以上のアプリケーションドメイン（ＡＤ）３１２（．Ｎｅｔワークフレーム内のＡｐｐＤｏｍａｉｎｓと呼ばれる）を含むことができ、これはワーカプロセス３１０内の実行中コードを隔離するために使用される。従って、サンドボックス補助コード３０６は、マシン、プロセスおよびアプリケーションドメインの３つの隔離レベルをもつことができる。
【００２６】
アプリケーションドメインは．Ｎｅｔコードを「実行」特権のみに制限するように．Ｎｅｔメカニズムであるコードアクセスセキュリティ(ＣＡＳ)を使用して限定することができる。ＣＡＳは特定のアセンブリに関連付けられた識別子を使用する。補助コード３０６は限定されたアプリケーションドメイン３１２の１つ内でのみ実行される。ホストプロセス３０８とワーカプロセス３１０は、低い特権のアカウントの下で実行することが可能であり、これらのアカウントはサンドボックスサーバマシン３０２内の非常に制限された機能だけを実行することができる。
【００２７】
補助コード３０６は、登録コンポーネント３１８を使用してプラットフォームサーバデータベース３１４内に補助コード（ＡＣ）登録３１６として登録される。ただし、登録コンポーネント３１８による登録は、累積したペナルティポイントの数がしきい値を超えていれば許可されない。さらに、登録コンポーネント３１８は署名されたアセンブリのみの登録を許可する。登録コンポーネント３１８は、アンセーフ(unsafe)とマークされたパブリッシャからのアセンブリの登録を許可しない。アセンブリは、パブリッシャがセーフとマークされている場合は、隔離なしで実行することが許可される。実行されるために、補助コード３０６はプラットフォームサーバマシン３０４からサンドボックスサーバマシン３０２に送信される。
【００２８】
アセンブリキャッシュ３２０はサンドボックスサーバマシン３０２側で維持されている。アセンブリキャッシュ３２０は、各補助コードアセンブリ用の補助コードアセンブリファイル（「ＡＣアセンブリファイル」と呼ばれる）をストアしている。補助コード３０６がサンドボックスサーバマシン３０２上で実行されるときは、アセンブリキャッシュ３２０がチェックされ、そのキャッシュ３２０が実行用の正しい補助コード３０６をすでに収めているかどうかが判断される。そうでなければ、その補助コード３０６はプラットフォームサーバデータベース３１４からフェッチされ、サンドボックスサーバマシン３０２に送信され、そこで補助コード３０６は補助コードアセンブリファイル３２２としてアセンブリキャッシュ３２０にストアされる。各補助コードアセンブリ３２２は、ユニックな識別子が付けられ、それによって、バージョン管理(versioning)が適用され、正しく働くことができる。
【００２９】
定期的に、古い補助コードアセンブリファイルはアセンブリキャッシュ３２０からクリーンアップされる。アセンブリキャッシュの総サイズの制限、組織当たりのアセンブルキャッシュの総存続時間の制限、アセンブリキャッシュ内のアセンブリの総存続時間の制限といったように、アセンブリキャッシュの周りには完全セットの管理機能が存在する。補助コードアセンブリファイルは、バージョンが古ければ、すなわち、アセンブリファイルが新しいものに更新されているか、またはアセンブリが許容時間を越えてキャッシュに存在していれば、古いと見なされる。
【００３０】
アセンブリキャッシュ３２０の実現は変化することがある。例えば、単純なファイルとしてストアするのではく、キャッシュ３２０はローカルデータベースと共におよびそこに置かれたアセンブリと共にインプリメントすることができる。アセンブリキャッシュ３２０は、コールごとに同じデータを通信チャネルにまたがって送信しないで済むようにする最適化ステップである。
【００３１】
補助コードが有用な作業を行なうのを可能にするために、補助コード３０６にはプラットフォームサーバマシンの機能を実行するためのインタフェースが与えられる。このインタフェースはワーカプロセス３１０によって管理され、補助コード３０６によるプラットフォームサーバマシン３０４へのすべてのコールが発生元プラットフォームサーバ（ここではプラットフォームサーバマシン３０４）に戻されることを保証する。これは、トランザクション完全性(transactional integrity)を保持したいときだけ採用することができる。同じサーバに戻すようにすると、設計の単純化が得られる。内側トランザクションプラグインと外側トランザクションプラグインの両方が存在している。外側トランザクションプラグインは異なるプラットフォームサーバに移ることができる。
【００３２】
これにより、戻されたトランザクションの識別子が発生元プラットフォームサーバ（プラットフォームサーバマシンマシン３０４）で認識することが可能になるので、プラットフォームサーバマシン３０４は、補助コード３０６によって実行される新しい作業を元のトランザクションと関連付けることができる。このことは、あるトランザクションでサンドボックス化された補助コード３０６によって実行される全作業が正しいトランザクションコンテキストで実行されるので、トランザクションを分散化する必要がないことを意味している。
【００３３】
サンドボックスサーバマシン３０２で補助コード３０６が予想外の例外を引き起こし、クラッシュし、過度のＣＰＵ時間またはメモリを使用すると、発生元プラットフォームサーバマシン３０４はこのことを認識し、ペナルティコンポーネント３２４を使用して、補助コード３０６を含む補助コードアセンブリに対してペナルティポイントを累積させることになる。補助コードアセンブリに対するペナルティポイントの数を超えていると、補助コードアセンブリは使用禁止にされ、そのアセンブリ内に収められた１以上の補助コードセットは実行されなくなる。
【００３４】
なお、この時点で、アセンブリは登録解除され、登録コンポーネント３１８を使用して再び登録されることができる。これに応じて、アセンブリが使用禁止にされた回数のカウントがとられる。それが定義したしきい値を超えていれば、アセンブリは管理的アクションが実行されるまで以後の登録が防止される。あるいは、使用禁止にされたアセンブリは単純に再び使用可能にすることができる。
【００３５】
さらに、ある組織のために登録されたすべての補助コードアセンブリに対するペナルティポイントの総数があらかじめ決めたしきい値を超えていれば、その組織に対する補助コードセットの以後の登録はなんらかの管理的アクションがとられるまで防止される。
【００３６】
さらに、過度のエラーまたはクラッシュ数に起因するパブリッシャの阻止を容易にする阻止されたパブリッシャのテーブルが維持されているので、パブリッシャＩＤを収めた関連補助コードアセンブリが登録されたり、再登録されたり、実行されたりすることがない。
【００３７】
アーキテクチャ３００のトランザクション完全性は、オペレーションのために発生元プラットフォームサーバ３０４に戻ることによって異なるサンドボックスサーバマシン上の複数レベルのプラグイン実行を通して維持されている。
【００３８】
アセンブリがある時間の間正しく実行されていた場合にペナルティポイントをデクリメントする報酬(rewards)プロセスが存在することも可能である。これは、ある時間期間にわたってランダムな障害があっても、アセンブリが使用禁止にされないことを意味する。
【００３９】
図４は、サンドボックスサーバ４０２を使用したプログラム管理のためのより一般的なシステム４００を示す図である。オペレーション時に、関連サンドボックスプラグインステップをもつプラットフォームサーバマシン４０６のプラットフォームサーバ４０４のオペレーションが実行されるとき、使用可能なサンドボックスサーバマシン（例：サンドボックスサーバ４０２）が構成されたサンドボックスサーバマシン４０８のリストから選択される。この選択プロセスは、負荷管理コンポーネント２０４の負荷分散アルゴリズム(load balancing algorism)に基づくことができる。サンドボックスサーバマシン４０８は定期的に負荷管理コンポーネント２０４によってクエリされて、使用可能性と負荷が確かめられる。負荷管理コンポーネント２０４は、例えば、プラットフォームサーバマシン４１０の１つの一部にすることができる。
【００４０】
実行リクエストはサンドボックスサーバマシン４０２側のホストプロセス４１２に転送される。ホストプロセス４１２はアセンブリがサンドボックスマシン４０２のアセンブリキャッシュに使用可能になっているかどうかを判断し、使用可能でなければ、オリジネータサーバ（プラットフォームサーバマシン４０６）にアセンブリを要求する。アセンブリがアセンブリキャッシュにあるときは、ホストプロセス４１２は使用可能プールからワーカプロセス(worker process)４１４を選択し、実行リクエストをそのワーカプロセス４１４に転送する。ホストプロセス４１２はワーカプロセスのプールを維持し、ワーカプロセスのリソース使用状況（例：メモリ、ＣＰＵ使用状況など）をモニタリングし、限界値を超えていればワーカプロセスをシャットダウンする。
【００４１】
ワーカプロセスの選択は、ラウンドロビン、ランダム、またはある程度の類似性(affinity)がある異なるストラテジに従うことが可能である。リクエストがある組織に対するものであれば、その組織が稼働中のワーカプロセスによってサービスを受けているかどうかを判断するチェックが行なわれる。そうであれば、そのリクエストはそのワーカプロセスに送られる。そうでなければ、使用可能な空きワーカプロセスプールから新しいワーカプロセスが選択され、それが使用される。
【００４２】
ワーカプロセス４１４はワーカプロセス４１４内に該当ＣＡＳ制限付きアプリケーションドメインを作成および／または選択し、望みのプラグインアセンブリとクラスをロードする。次に、ワーカプロセス４１４はそのプラグインで“Ｅｘｅｃｕｔｅ”をコールし、これを受けてプラグインは該当プラットフォームサーバマシン４０６に対して関連パラメータを指定してコールを行うが、このプラットフォームサーバマシンはプラグインがプラットフォームサーバオペレーションを実行できるようにするインタフェースを含んでいる。さらに、プラグインは、プラグインがトレーシング(tracing)を実行できるようにするインタフェースを含んでいる。プラグインが正しくない振る舞いをし、あらかじめ決めたペナルティしきい値を超える数のペナルティポイントを累積した場合は、プラグインは、プラットフォームサーバ４０４を通してデータベースを使用禁止にすることにより以後の実行が防止される。プラグインがしきい値を超える回数だけ使用禁止にされた場合は、そのアセンブリの以後の登録は使用禁止にされる。すべてのプラグインセットに渡る総使用禁止カウントが別のしきい値を超えた場合は、すべてのプラグイン登録はその組織に対して使用禁止にすることができる。プラグインインタフェースは拡張可能であるので、追加のサービスをプラグインに提供することができる。
【００４３】
本明細書には、開示したアーキテクチャの新規側面を実行する例示方法を表すフローチャートのセットが含まれている。説明の便宜上、例えば、フローチャートまたはフロー図の形で本明細書に示した１以上の方法は一連のアクトとして示され、記載されているが、当然に理解されるように、これら方法によれば、一部のアクトが本明細書に示され、記載されているのとは異なる順序で現れることもあれば、他のアクトと同時に現れることもあるので、これらの方法はアクトの順序によって制限されない。例えば、通常の知識者ならば理解されるように、方法は、ステート図におけるように一連の相互に関係するステートまたはイベントのとして表現されることもある。さらに、方法に例示したアクトは新規の実現ではすべてが必要であるとは限らない。
【００４４】
図５は、プログラムを管理する方法を示す図である。５００において、補助コードが実行のために受信される。５０２において、補助コードが実行のために隔離環境に送信される。５０４において、補助コードが隔離環境で実行される。５０６において、補助コードの実行が異常な実行振る舞いであるかがモニタリングされる。５０８において、異常な実行振る舞いに基づいて補助コードの実行が管理される。
【００４５】
方法の追加側面には、メインオペレーションの一部として隔離実行のために補助コードをスケジューリングすることを含めることができる。さらに、５０４のあと、結果がプラットフォームに返送されることが可能であると、メインオペレーションが継続される。
【００４６】
図６はペナルティポイントに基づいて補助コードを管理する方法を示す図である。６００において、補助コードが補助コードの異常な実行振る舞いについてモニタリングされる。６０２において、補助コードの異常な実行振る舞いのインスタンスに基づいてペナルティポイントが適用される。６０４において、あらかじめ決めたペナルティしきい値と突き合わせる比較のためにペナルティポイントが累積される。６０６において、あらかじめ決めたしきい値に対して補助コードの実行が中止される。
【００４７】
図７はペナルティポイントに基づいて登録を管理する方法を示す図である。７００において、ペナルティポイントが適用され、累積され、ペナルティしきい値と突き合わせて比較される。７０２において、累積されたペナルティポイントの数によって判断されるように、過度の異常な振る舞いに基づいて補助コードの登録が防止される。７０４において、組織に対するプラグインの過度の異常な振る舞いに基づいて補助コードの登録が防止される。７０６において、アンセーフパブリッシャに基づいて補助コードの登録が防止される。
【００４８】
図８は正しくない振る舞いをする補助コードのパブリッシャを管理する方法を示す図である。８００において、アンセーフパブリッシャがアンセーフパブリッシャリストに追加される。このリストからの除去は管理的アクションによることができる。８０２において、正しくない振る舞いをする補助コードを提供するパブリッシャおよびパブリッシャ識別子のテーブルが維持される。８０４において、パブリッシャ識別子をもつパブリッシャから補助コードが受信される。８０６において、パブリッシャからの補助コードの実行が阻止される。８０８において、パブリッシャからの補助コードの登録がテーブルおよび識別子に基づいて阻止される。
【００４９】
図９は、正しくない振る舞いをする補助コードに基づいて組織を管理する方法を示す図である。９００において、１以上の補助コードの正しくない振る舞いをする実行に基づいて１以上の補助コードにペナルティポイントが適用される。９０２において、正しくない振る舞いをするセットの累積されたペナルティポイントがペナルティしきい値と突き合わせてテストされる。９０４において、正しくない振る舞いをするセットが使用禁止にされ、以前に使用禁止にされたセットが管理的アクションを使用して再使用可能にされることができる。９０６において、正しくない振る舞いをする１以上のセットの組織が特定される。９０８において、その組織による新しい補助コードの登録と既存コードの再登録が防止される。
【００５０】
図１０は負荷分散に基づいてサンドバックスサーバを選択する方法を示す図である。１０００において、補助コードが実行のために発生元プラットフォームサーバで受信される。１００２において、負荷分散コンポーネントがアクセスされる。１００４において、補助コードの実行リクエストがサブミットされる。１００６において、複数のサンドボックスの１つが負荷分散コンポーネントによって隔離実行のために選択される。選択を行なうための異なるストラテジは、ラウンドロビン、ランダムのようにある程度の類似性(affinity)に基づいて採用することができる。１００８において、補助コードの正しくない振る舞いがモニタリングされる。１０１０において、正しくない振る舞いの報告が発生元プラットフォームに戻され、ペナルティポイントが適用される。１０１２において、正しくない振る舞いをする補助コードの登録と実行がペナルティポイントに基づいて管理される。
【００５１】
本出願において用いられている「コンポーネント」と「システム」の用語は、ハードウェアであるか、ハードウェアとソフトウェアの組み合わせであるか、ソフトウェアであるか、実行中のソフトウェアであるかに関係なく、コンピュータに関係するエンティティを指すことを目的としている。例えば、コンポーネントは、プロセッサ上で実行されるプロセス、プロセッサ、ハードディスクドライブ、多重ストレージドライブ（光および／または磁気記憶媒体の）、オブジェクト、実行可能コード(executable)、実行スレッド、プログラム、および／またはコンピュータにすることができるが、これらに限定されない。例として、サーバ上で実行されるアプリケーションとサーバは共にコンポーネントにすることができる。１以上のコンポーネントはプロセスおよび／または実行スレッド内に置いておくことができ、コンポーネントは１つのコンピュータ上に置いておくことも、２またはそれ以上のコンピュータ間に分散させることもできる。「例示」の用語は、例(example)、インスタンス(instance)、または図例(illustration)を意味するために本明細書で用いられることがある。「例示」として記載されているどの側面または設計も、必ずしも、他の側面または設計よりも好ましいまたは優位であると解釈されない。
【００５２】
次に図１１を参照して説明すると、図１１は隔離されたプラグイン実行を開示したアーキテクチャに従って実行するように動作可能であるコンピューティングシステム１１００を示すブロック図である。種々の側面に関する追加のコンテキストが得られるようにするために、図１１および以下の解説は、種々の側面が実現可能である適当なコンピューティングシステム１１００の概要を簡単に記載したものである。上記記載は、１以上のコンピュータ上で実行可能であるコンピュータ実行可能命令の一般的コンテキストの中で説明されているが、この分野の精通者ならば認識されるように、新規の実施形態が他のプログラムモジュールと関連付けて実現されることも、ハードウェアとソフトウェアの組み合わせとして実現されることも可能である。
【００５３】
種々の側面を実現するコンピューティングシステム１１００は、１以上の処理ユニット１１０４、システムメモリ１１０６およびシステムバス１１０８を装備したコンピュータ１１０２に含んでいる。処理ユニット１１０４は、シングルコンピュータ、マルチコンピュータ、シングルコアユニットおよびマルチコアユニットのように商用化された種々のプロセッサのいずれかにすることができる。さらに、この分野の精通者ならば理解されるように、新規の本方法が他のコンピュータシステム構成と共に実施することが可能であり、コンピュータシステム構成としてはミニコンピュータ、マインフレームコンピュータのほかに、パーソナルコンピュータ（例：デスクトップ、ラップトップなど）、ハンドヘルドコンピューティングデバイス、マイクロプロセッサベースまたはプログラマブルコンシューマエレクトロニクスなどがあり、これらの各々は１以上の関連デバイスに動作可能に結合することが可能である。
【００５４】
システムメモリ１１０６は、揮発性（ＶＯＬ）メモリ１１１０（例：ランダムアクセスメモリ（ＲＡＭ））および不揮発性（ＮＯＮ−ＶＯＬ）メモリ１１１２（例：ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭなど）を含むことができる。基本入出力システム（ＢＩＯＳ）は不揮発性メモリ１１１２にストアしておくことができ、そこには、スタートアップ時のようにコンピュータ１１０２内のコンピュータ間でデータおよび信号をやりとりするのを容易にする基本的ルーチンが含まれている。揮発性メモリ１１１０は、キャッシングデータ用のスタティックＲＡＭのような高速ＲＡＭを含むことも可能である。
【００５５】
システムバス１１０８は、システムコンポーネントのインタフェースとなるものであり、この中には１以上の処理ユニット１１０４とのメモリサブシステム１１０６が含まれるが、これに限定されない。システムバス１１０８は、メモリバス（メモリコントローラ付きまたは無し）にさらに相互接続可能である数種タイプのバス構造のいずれか、および種々の商用化バスアーキテクチャのいずれかを使用した周辺バス（例：ＰＣＩ、ＰＣＩｅ、ＡＧＰ、ＬＰＣなど）にすることができる。
【００５６】
コンピュータ１１０２は１以上のストレージサブシステム１１１４およびこれらのストレージサブシステム１１１４とシステムバス１１０８および他の望みのコンピュータコンポーネントとの間のインタフェースとなるストレージインタフェース１１１６をさらに含んでいる。ストレージサブシステム１１１４は、例えば、ハードディスクドライブ（ＨＤＤ）、磁気フロッピディスクドライブ（ＦＤＤ）および／または光ディスクストレージドライブ（例：ＣＤ−ＲＯＭドライブ、ＤＶＤドライブなど）の１以上を含むことができる。ストレージインタフェース１１１６は、例えば、ＥＩＤＥ、ＡＴＡ、ＳＡＴＡ、およびＩＥＥＥ１３９４などのインタフェーステクノロジを含むことができる。
【００５７】
１以上のプログラムおよびデータは、メモリサブシステム１１０６、取り外し可能メモリサブシステム１１１８（例：フラッシュドライブ形体のファクタテクノロジ）、および／またはストレージサブシステム１１１４にストアしておくことができるが、その中にはオペレーティングシステム１１２０、１以上のアプリケーションプログラム１１２２、その他のプログラムモジュール１１２４およびプログラムデータ１１２６が含まれている。一般的に、プログラムには特定のタスクを実行または特定の抽象データ型を実現するルーチン、方法、データ構造、その他のソフトウェアなどが含まれている。コンピュータ１１０２がサーバマシン（例：プラットフォームサーバ、サンドボックスサーバ）である場合は、１以上のアプリケーションプログラム１１２２、その他のプログラムモジュール１１２４およびプログラムデータ１１２６は、例えば、図１のシステム１００、図２のシステム２００、図３のプログラム管理アーキテクチャ３００、図５乃至図９の一般的システムおよび方法を含むことができる。
【００５８】
オペレーティングシステム１１２０、アプリケーション１１２２、モジュール１１２４および／またはデータ１１２６のすべてまたは一部は、例えば、揮発性メモリ１１１０のようなメモリにキャッシュしておくこともできる。当然に理解されるように、開示したアーキテクチャは種々の商用化オペレーティングシステムまたはオペレーティングシステムの組み合わせと共に実現することができる（例：バーチャルマシンとして）。
【００５９】
ストレージサブシステム１１１４およびメモリサブシステム（１１０６と１１１８）は、データ、データ構造、コンピュータ実行可能命令などを揮発的または不揮発的に収めているコンピュータ可読媒体の働きをする。コンピュータ可読媒体は、利用できる媒体ならば、コンピュータ１１０２によってアクセスできるどの媒体にすることも可能であり、その中には揮発性媒体と不揮発性媒体、取り外し可能媒体と取り外し不能媒体が含まれる。コンピュータ１１０２にとっては、媒体はデータを任意の適当なデジタルフォーマットでストアするのに適している。この分野の精通者ならば当然に理解されるように、ｚｉｐドライブ、磁気テープ、フラッシュメモリカード、カートリッジなどのように、開示したアーキテクチャの新規方法を実行するためのコンピュータ実行可能命令をストアするために、他のタイプのコンピュータ可読媒体を採用することができる。
【００６０】
ユーザは、キーボードとマウスのような外部ユーザ入力デバイス１１２８を使用してコンピュータ１１０２、プログラムおよびデータとやりとりすることができる。その他の外部入力デバイスとして可能なものに、マイクロホン、ＩＲ（赤外線）リモートコントロール、ジョイスティック、ゲームパッド、カメラ認識システム、スタイラスペン、タッチスクリーン、ジェスチャシステム（例：目の動き、手の動きなど）などがある。ユーザは、タッチパッド、マイクロホン、キーボードなどのオンボードユーザ入力デバイス１１３０を使用してコンピュータ１１０２、プログラムおよびデータとやりとりすることができるが、そこではコンピュータ１１０２は、例えば、ポータブルコンピュータになっている。これらおよびその他の入力デバイスはシステムバス１１０８を経由した入出力（Ｉ／Ｏ）を通して処理ユニット１１０４に接続されているが、パラレルポート、ＩＥＥＥ１３９４シリアルポート、ゲームポート、ＵＳＢポート、ＩＲインタフェースなどの他のインタフェースによって接続することができる。Ｉ／Ｏデバイスインタフェース１１３２は、サウンドカードおよび／またはオンボードオーディオ処理機能のように、プリンタ、オーディオデバイス、カメラデバイスなどの出力周辺デバイス１１３４の使用も容易にしている。
【００６１】
１以上のグラフィックスインタフェース１１３６（一般にグラフィックス処理ユニット（ＧＰＵ）とも呼ばれる）はコンピュータ１１０２と外部ディスプレイ１１３８（例：ＬＣＤプラズマ）および／またはオンボードディスプレイ１１４０〈例：ポータブルコンピュータの場合〉との間にグラフィックスとビデオ信号を提供する。グラフィックスインタフェース１１３６はコンピュータシステムボードの一部として製造することもできる。
【００６２】
コンピュータ１１０２は、ワイヤ／ワイヤレス通信サブシステム１１４２を介した１以上のネットワークおよび／または他のコンピュータとの論理コネクションを使用してネットワーク化環境（例：ＩＰ）で動作することができる。その他のコンピュータとして可能なものとしては、ワークステーション、サーバ、ルータ、パーソナルコンピュータ、マイクロプロセッサベースのエンターテインメントアプライアンス、ピアデバイスまたは他の共通ネットワークノードがあり、これらは、コンピュータ１１０２に関して説明した要素の多くまたはすべてを含んでいるのが代表的である。論理コネクションとして可能なものとしては、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、ホットスポットなどのワイヤ／ワイヤレス接続性がある。ＬＡＮとＷＡＮネットワーキング環境はオフィスや会社で普及しており、イントラネットのような企業内コンピュータネットワークを容易化しており、そのすべてはインターネットのようなグローバル通信ネットワークに接続していることがある。
【００６３】
ネットワーキング環境で使用されるときは、コンピュータ１１０２はワイヤ／ワイヤレス通信サブシステム１１４２（例：ネットワークインタフェースアダプタ、オンボードトランシーバサブシステムなお）に接続して、ワイヤ／ワイヤレスネットワーク、ワイヤ／ワイヤレスプリンタ、ワイヤ／ワイヤレス入力デバイス１１４４などと通信している。コンピュータ１１０２はモデムを含むことが可能であるが、またはネットワーク上の通信を確立するための他の手段を含んでいることもある。ネットワーク化環境では、コンピュータ１１０２に関係するプログラムとデータは、分散システムと関連するようなリモートメモリ／ストレージデバイスにストアしておくことができる。以上から理解されるように、図示のネットワークコネクションは例示であり、コンピュータ間の通信リンクを確立する他の手段を使用することが可能である。
【００６４】
コンピュータ１１０２は、ＩＥＥＥｘｘファミリの標準などの無線(radio)テクノロジを使用してワイヤ／ワイヤレスデバイスまたはエンティティと通信するように動作可能であり、そのようなものとしては、例えば、プリンタ、スキャナ、デスクトップおよび／またはポータブルプリンタ、パーソナルデジタルアシスタント（ＰＤＡ）、通信衛星、ワイヤレスに検出可能タグ（例：キオスク、ニューススタンド、レストルーム）と関連付けられた機器またはロケーションのいずれかの部分とのワイヤレス通信（例：ＩＥＥＥ８０２．１１無線(over-the-air)で動作可能に配置されたワイヤレスデバイスなどがある。この中には、少なくとも、ホットスポット用のＷｉ−Ｆｉ（つまりワイヤレス(Wireless Fidelity)、ＷｉＭａｘ、およびＢｌｕｅｔｏｏｔｈ〈商標〉ワイヤレステクノロジが含まれている。従って、通信は、従来のネットワークまたは単純に少なくとも２つのデバイス間のアドホック(ad hoc)ネットワークとの通信のように事前定義の構造にすることができる。Ｗｉ−ＦｉはＩＥＥＥ８０２．１１ｘ(a、ｂ、ｇなど)を使用して、セキュアで信頼性のある高速ワイヤレス接続性を提供している。Ｗｉ−Ｆｉネットワークは、コンピュータを相互に、インターネットに、およびワイヤネットワーク（ＩＥＥＥ８０２．３に関係するメディアと機能を使用する）に接続するために使用することができる。
【００６５】
例示の側面は分散コンピューティング環境で実施されることも可能であり、そこではある種のタスクは、通信ネットワークを通してリンクされたリモート処理デバイスによって実行されている。分散コンピューティング環境では、プログラムモジュールはローカルおよび／またはリモートストレージおよび／またはメモリシステムに置いておくことができる。
【００６６】
次に図１２を参照して説明すると、図１２は、プラグイン隔離のプログラム管理のためのコンピューティング環境１２００を示す概略ブロック図である。この環境は１以上のクライアント１２０２を含んでいる。クライアント１２０２はハードウェアおよび／またはソフトウェア〈例：スレッド、プロセス、コンピューティングデバイス〉にすることができる。クライアント１２０２は、例えば、クッキー(cookie)および／または関連コンテキスト情報を収容することができる。
【００６７】
この環境１２００は１以上のサーバ１２０４も含んでいる。サーバ１２０４もハードウェアおよび／またはソフトウェア（例：スレッド、プロセス、コンピューティングデバイス）にすることができる。サーバ１２０４は、例えば、アーキテクチャを採用することにより変形(transformation)を実行するためのスレッドを収容することができる。クライアント１２０２とサーバ１２０４間の１つの可能な通信は、２またはそれ以上のコンピュータプロセス間で送信されるのに適したデータパケットの形体にすることができる。データパケットは、例えば、クッキーおよび／または関連コンテキスト情報を収めていることがある。この環境１２００は、クライアント１２０２とサーバ１２０４間の通信を容易にするため採用できる通信フレームワーク１２０６（例：インターネットのようなグローバル通信ネットワーク）を含んでいる。
【００６８】
通信はワイヤ（光ファイバを含む）および／またはワイヤレステクノロジを通して容易にすることができる。クライアント１２０２は、クライアント１２０２にローカルである情報（例：クッキーおよび／または関連コンテキスト情報）をストアするために採用できる１以上のデータストアに動作可能に接続されている。同様に、サーバ１２０４は、サーバ１２０４にローカルである情報（例：クッキーおよび／または関連コンテキスト情報）をストアするために採用できる１以上のデータストアに動作可能に接続されている。
【００６９】
上述してきた説明の中には、開示したアーキテクチャのいくつかの例が含まれている。当然のことであるが、想到し得るすべてのコンポーネントおよび／または方法の組み合わせを記載することは不可能であるが、この分野の通常の知識者ならば認識されるように、さらに多くの組み合わせおよび置換(permutation)が可能である。従って、新規なアーキテクチャは請求項の精神および範囲に属するすべての変更、改良および変形を包含することを目的としている。さらに、「含む(includes)」の用語が詳細説明または請求項のどちらかで使用されている限りにおいて、この用語は「備える(comprising)」が請求項で移行語として使用されたときに解釈されるように「備える(comprising)」の用語と同じように包含的であることを目的としている。
【図１】
2012510679.tif 000003
【図２】
2012510679.tif 000004
【図３】
2012510679.tif 000005
【図４】
2012510679.tif 000006
【図５】
2012510679.tif 000007
【図６】
2012510679.tif 000008
【図７】
2012510679.tif 000009
【図８】
2012510679.tif 000010
【図９】
2012510679.tif 000011
【図１０】
2012510679.tif 000012
【図１１】
2012510679.tif 000013
【図１２】
2012510679.tif 000014
【国際調査報告】
2012510679.tif 000015
2012510679.tif 000016