Security- | Developers.IO透明コード

, Author

  • 2017/03/30
  • 6分で読める
    • g
    • D
    • m
    • Y
    • に掲載の記事

    • s
    • +8
  • 注意

    Code Access Security (CAS) と Partially Trusted Code

    The .NET Framework 2.0 は、以下のような機能を提供します。.NET Framework は、コード アクセス セキュリティ (CAS) と呼ばれる、同じアプリケーションで実行されている異なるコードに対してさまざまなレベルの信頼を強制するメカニズムを提供します。

    CAS は .NET Core や .NET 5、またはそれ以降のバージョンではサポートされていません。 CAS は 7.0 以降の C# のバージョンではサポートされていません。

    CAS in .NET Framework は、コードの起源またはその他の ID 面に基づくセキュリティ境界を強制するメカニズムとして使用しないでください。 CAS と Security-Transparent Code は、部分的に信頼できるコード、特に起源が不明なコードとのセキュリティ境界としてサポートされていません。 代替のセキュリティ手段を講じることなく、出所不明のコードを読み込んで実行することは避けるよう、私たちは助言します。 .NET Framework は、CAS サンドボックスに対して発見される可能性のある特権昇格エクスプロイトに対してセキュリティ パッチを発行しません。

    このポリシーは、すべてのバージョンの .NET Framework に適用されますが、Silverlight に含まれる .NET Framework には適用されません。 サンドボックス化とは、一部のコードが完全に信頼できるものとして扱われ、他のコードがサンドボックス用のグラント セット内の許可に制限される、隔離されたドメインを作成するプラクティスを指します。 サンドボックスのグラントセット内で実行されるアプリケーションコードは、透過的であるとみなされます。 サンドボックスのグラントセットは、エビデンス(Evidence class)によって決定される。 Evidence は、サンドボックスが必要とする特定の権限と、どのような種類のサンドボックスを作成できるかを特定します。 Enforcement とは、透過的なコードがそのグラント セット内でのみ実行できるようにすることを指します。

    重要

    セキュリティ ポリシーは、以前のバージョンの .NET Framework の主要な要素でした。 .NET Framework 4 からは、セキュリティ ポリシーは廃止されました。 セキュリティ ポリシーの廃止は、セキュリティの透過性とは別のものです。 この変更の影響については、コード アクセス セキュリティ ポリシーの互換性と移行を参照してください。

    Purpose of the Transparency Model

    透明性は、アプリケーションの一部として実行するコードをインフラの一部として実行するコードから分離する実施メカニズムです。 透過性は、ネイティブ コードの呼び出しなど特権的なことを行えるコード (重要なコード) と行えないコード (透過的なコード) の間に障壁を描きます。 透過的なコードは、操作している権限セットの範囲内でコマンドを実行できますが、重要なコードを実行、派生、または含むことはできません。

    透過性実施の主な目標は、特権に基づいてコードの異なるグループを分離するための簡単で効果的なメカニズムを提供することです。 サンドボックス モデルのコンテキスト内では、これらの特権グループは完全に信頼される (つまり、制限されない) か、部分的に信頼される (つまり、サンドボックスに付与された権限セットに制限される) かのいずれかです。 透明性は、ジャストインタイム コンパイラーによって強制され、完全な信頼など、アセンブリの許可セットに関係なく有効です。

    透明性は、セキュリティ モデルを簡素化し、安全なライブラリやアプリケーションの作成と展開を容易にするために、.NET Framework バージョン 2.0 で導入されました。 透過コードは Microsoft Silverlight でも使用され、部分的に信頼できるアプリケーションの開発を簡素化します。

    注意

    部分的に信頼できるアプリケーションを開発する場合、ターゲット ホストの権限要件を認識する必要があります。 一部のホストで許可されていないリソースを使用するアプリケーションを開発することができます。 このアプリケーションはエラーなくコンパイルされますが、ホスト環境に読み込まれたときに失敗します。 Visual Studio* を使用してアプリケーションを開発した場合、開発環境から部分的に信頼する、または制限された権限セットでデバッグを有効にすることができます。 詳しくは、How toを参照してください。 制限されたアクセス権でClickOnceアプリケーションをデバッグする」を参照してください。 ClickOnce アプリケーション用に提供されるアクセス権の計算機能は、部分的に信頼されたアプリケーションでも使用できます。

    Specifying the Transparency Level

    Assembly-level SecurityRulesAttribute attribute は、アセンブリが従う SecurityRuleSet 規則を明示的に選択します。

    • Level 2 (Level2) – .NET Framework 4 透過ルール。

    • Level 1 (Level1) – .NET Framework 2.0 透過ルール。

    2 つの透過性レベルの主な違いは、レベル 1 はアセンブリ外部からの呼び出しに対して透過性ルールを強制せず、互換性のみを目的としていることです。

    Level 2 Transparency

    Level 2 透過性は .NET Framework 4 で導入されたものです。 このモデルの 3 つの信条は、透過的なコード、セキュリティ安全クリティカルなコード、およびセキュリティ重要なコードです。

    • 透過的なコードは、それが付与される権限 (完全信頼を含む) にかかわらず、他の透過的コードまたはセキュリティ安全クリティカルなコードのみを呼び出すことができます。 コードが部分的に信頼されている場合、ドメインの権限セットで許可されているアクションのみを実行できます。

      • Assert 操作または特権の昇格を実行する。

      • 安全でないまたは検証不可能なコードを含めることはできない。

      • Critical コードを直接呼び出す。

      • SuppressUnmanagedCodeSecurityAttribute属性を持つネイティブコードまたはコードを呼び出す。

      • LinkDemand によって保護されているメンバーを呼び出す。

      • Critical タイプから継承する。

        さらに、透過メソッドは critical 仮想メソッドをオーバーライドしたり critical インターフェース メソッドを実装したりできない。

    • セキュリティセーフな critical コードは完全に信頼できるが透過コードによって呼び出し可能である。 これは、完全信頼コードの限られた表面積を公開します。 正しさとセキュリティの検証は、セーフクリティカルなコードで行われます。

    • Security-critical code は任意のコードを呼び出し、完全に信頼できますが、透明なコードからは呼び出せません。

    レベル 1 透明性

    レベル 1 透明性モデルは .NET Framework バージョン 2.0 で、開発者がセキュリティ監査にさらされるコード量を減少できるよう導入されています。 レベル 1 の透過性はバージョン 2.0 で一般に公開されましたが、主に Microsoft 社内でセキュリティ監査目的にのみ使用されていました。 アノテーションを通じて、開発者は、どの型やメンバがセキュリティ昇格やその他の信頼できるアクションを実行でき(security-critical)、どれが実行できない(security-transparent)かを宣言することができる。 透過的と認定されたコードは、高度なセキュリティ監査は必要ありません。 レベル 1 の透過性では、透過性の実行はアセンブリ内に限定されます。 言い換えると、セキュリティ・クリティカルと認定されたパブリックな型やメンバは、アセンブリ内でのみセキュリティ・クリティカルとなります。 これらの型やメンバがアセンブリの外から呼び出されたときにセキュリティを強化したい場合は、リンク要求を使用して完全信頼する必要があります。 そうしない場合、公に見えるセキュリティ クリティカルな型およびメンバーは、セキュリティ セーフ クリティカルとして扱われ、アセンブリ外部の部分的に信頼されたコードから呼び出すことができます。

    レベル 1 透過性モデルには次の制限があります。

    • Security-critical type and members that are public are accessible from security-transparent code.

    • the transparency annotation is enforced only within an assembly.If you want to use link demand for full trust.

      The level 1 transparency model is available.

    • セキュリティ上重要な型およびメンバーは、アセンブリの外部からの呼び出しに対してセキュリティを強制するためにリンク要求を使用しなければなりません。

    • 継承ルールは強制されません。

    • Transparency Enforcement

      Transparency ルールは、透明性が計算されるまで実行されません。 その時、透明性ルールが違反されると InvalidOperationException がスローされます。 透明度が計算される時間は複数の要因に依存し、予測することはできません。 可能な限り遅く計算されます。 .NET Framework 4では、アセンブリレベルの透明度の計算は、.NET Framework 2.0よりも早く行われます。 唯一の保証は、透明度の計算が必要な時点までに行われることです。 これは、ジャストインタイム(JIT)コンパイラが、あるメソッドがコンパイルされ、そのメソッドのエラーが検出される時点を変更できることに似ています。 透過性の計算は、コードに透過性のエラーがない場合は見えません。

      • Security-Transparent Code, Level 1
      • Security-Transparent Code, Level 2

      も参照してください。

コメントを残す

メールアドレスが公開されることはありません。