部分信頼アセンブリによって呼び出される信頼済みアセンブリで FullTrust を付与する

StackOverflow https://stackoverflow.com/questions/2387564

質問

次のような環境を想像してください。の XBAP 部分信頼モードで実行されているアプリケーション (デフォルトの動作。完全な信頼を必要とすることはオプションではありませんが、質問する前に、 XBAP に完全な信頼が与えられている場合、すべてが期待どおりに動作します) は、GAC にあるローカルにインストールされたアセンブリを参照しています。これを達成するために、「AllowPartiallyTrustedCallers」というオプションが地方議会に与えられ、全幅の信頼も与えられています。(これはある種のローカル接続の対応物であると想像してください)

(ちなみに、AllowPartiallyTrustedCallers 属性の使用のセキュリティ面については認識していますが、これはこの投稿の範囲外です。気にしないでください)

さて、たとえ地元の GAC アセンブリーが 完全な信頼 (電話して確認できます Assembly.GetExecutingAssembly().IsFullyTrusted いつでも)、部分的に信頼された呼び出し元 (XBAP) によって呼び出されるため、(暗黙的または明示的) 要求は失敗します。 (何か誤解していたら訂正してください). 。幸いなことに、ローカル GAC アセンブリ内で明示的なアサートを実行してアクセス許可を取得できます。次に例を示します。

new System.Security.Permissions.FileIOPermission(.....).Assert();

これにより、この時点でフル スタック ウォーク オン デマンドを回避し、必要に応じてファイル アクセスを行うことができます。(もう一度、訂正してください...)これは実際に完璧に機能します。 (この場合)

問題は、ファイル IO をまったく行わず、実際に呼び出していることです。 外部ライブラリ できるはずのもの 彼らが望むことは何でもする (そして、彼らは、レジストリへのアクセス、Web サービス要求の作成、ファイルの書き込み、アンマネージド コードの呼び出しなど、多くのことを実行する可能性があります。詳細はわかりませんが、信頼できます。) そして、要求スタック ウォークが私たちの要求に到達するのを防ぎます。部分的に信頼された呼び出し元。すべてはローカルにインストールされた信頼できる GAC アセンブリから行われるため、これは達成できるはずです。(繰り返しになりますが、ここではセキュリティ面については気にせず、クライアントを信頼できると想定してください)

これを解決するアプローチ:

  • 私たちが最初に考えたのは、外部ライブラリを操作する前に、ほぼすべてのアクセス許可に対してアクセス許可のセット (PermissionSet) をアサートすることでした。これはほぼ機能しますが、ある時点でまだセキュリティ例外が発生するようです。外部ライブラリが何らかの理由で失敗するスレッドをさらに開始する可能性があるため、またはエントリアセンブリにアクセスしているためです。実際にはわかりません。

  • 次に、次の属性を試しました

[System.Security.Permissions.PermissionSet(
  System.Security.Permissions.SecurityAction.Assert, Name = "FullTrust")]

それもうまくいきませんでした。

  • 3 番目に、新しい AppDomain を開き、完全に信頼された GAC アセンブリを AppDomains エントリ ポイントにして、この AppDomain 内であらゆるものを実行することを考えました (私たちの理論では、スタック ウォークはもはや部分的に信頼された呼び出し元に到達することはできません)。残念ながら、これを達成することはできません...または、新しく作成された AppDomain は、「MyComputer」セキュリティ ゾーンの証拠または無制限の SecurityPermission の下で実行するように設定されている場合でも、さらに多くの要求に失敗します。AppDomain 全体に完全な信頼を明示的に付与することはできません。

  • 4番目に、使用 カスポール はオプションではありません。(展開上の理由により)

さて、これは多くの情報になるはずなので、私たちがアーカイブしたいことを理解していただければ幸いです。

これを要点まで理解するには: 完全に信頼されたアセンブリは、呼び出すアセンブリに対して完全な完全信頼をアサートし、部分的に信頼された呼び出し元に到達するためのすべてのスタック ウォークを停止するにはどうすればよいでしょうか?

よろしくお願いします

役に立ちましたか?

解決

完全に部分的に信頼できる呼び出し元を許可に関しては、マイクロソフトからのドキュメントを見てみますトラストアセンブリは、私はこれを行うことが可能になるだろうと信じていないします。

あなたは、我々はセキュリティ上の問題を回避するために必要なことを強調し続けますが、すべて現実には、あなたがあなたのソリューションをやろうとしているものがバイパスされ、基本的にすべての単一の.NET Framework内のコードアクセスセキュリティシステムの一部、およびI」ハードあなたが実行可能な解決策を得ることができるとしていることを信じるために押されるでしょう。

この上に、私はこのプロセスが実際にこの方法を実行する必要があることを何かであることを想像することはできません。

あなたがローカルで、すでに実行している何かへの通信をオフに渡すために、部分的に信頼され、発信者からこの処理をオフロードできませんでした、信頼できる?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top