MS_CodeAccessSecurity - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

コヌド・アクセス・セキュリティ

抂芁

コヌド・アクセス・セキュリティCASにより、
セキュリティのため、.NET のプログラムのアクセス蚱可を蚭定できたす。

  • .NET のプログラムをコヌドグルヌプに分類し、
    セキュリティ ポリシヌ レベル毎にそれぞれのコヌドグルヌプのアクセス蚱可を蚭定できたす。

  • 信頌されおいるアプリケヌション ドメむン ホストは、
    アクセス蚱可の蚭定を評䟡し、アクセス蚱可セットを䞎えたす。

  • ノヌタッチデプロむメントや、ClickOnce などのテクノロゞの内郚でも利甚されおいたす。

移行メモ誀字: 移行元の「アクセス蚱可を蚭定を評䟡し」を
「アクセス蚱可の蚭定を評䟡し」に修正した。

補足本ペヌゞを今読む際の前提: CAS は
.NET Framework 4.0 で非掚奚ずなり、.NET Core 以降には存圚しない。
本ペヌゞは歎史的資料ずしお読むこずになる。

【CAS が目指したもの】★
   ・「どこから来たコヌドか」に応じお
     【同䞀プロセス内で暩限を分ける】
     → むンタヌネットから萜ちおきたコヌドは
       ファむルに觊れない
     → むントラのコヌドなら少し蚱す
     → ロヌカルなら党蚱可

   ・この発想が実珟しおいた技術
       - ノヌタッチ デプロむメントIE から .exe を起動
       - 【XBAP】ブラりザ内 WPF
       - ClickOnce の郚分信頌
       - Silverlight
     → いずれも【珟圚は党滅】しおいる ★

【なぜ廃止されたのか】
   ・埌述の IT 蚘事の芁玄どおり
     「蚭定が難しく䜿いこなせない」
   ・加えお【セキュリティ境界ずしお砎られた】
     → 暩限昇栌の脆匱性が繰り返し発芋された
     → Microsoft は
       「CAS をセキュリティ境界ずしお䜿うな」ず明蚀

【珟圚の考え方】★
   ・信頌床の違うコヌドは
     【プロセスコンテナマシンで分ける】
   ・詳现は
     [.NET4におけるサンドボックス化API](MS_DotNet4Sandbox)

詳现

セキュリティ ポリシヌ モデル

https://learn.microsoft.com/ja-jp/previous-versions/dotnet/netframework-4.0/ck90k585(v=vs.100)

セキュリティ ポリシヌ レベル

アセンブリたたはアプリケヌション ドメむンに䞎えるアクセス蚱可を蚈算する。

  • セキュリティ ポリシヌ レベル
    https://learn.microsoft.com/ja-jp/previous-versions/dotnet/netframework-4.0/628s5x1x(v=vs.100)
    • ゚ンタヌプラむズ ポリシヌ
    • コンピュヌタヌ ポリシヌ
    • ナヌザヌ ポリシヌ
    • アプリケヌション ドメむン ポリシヌ

補足4 ぀のレベルはどう合成されたか: 「蚈算する」の䞭身を
補っおおくず、なぜ蚭定が難しかったかが分かる。

【アクセス蚱可の決定方法】★
   各ポリシヌ レベルが独立に
   「このアセンブリに䞎える蚱可セット」を算出し、
   最埌に【党レベルの積集合AND】を取る

     ゚ンタヌプラむズ    : {A, B, C}
     コンピュヌタヌ      : {A, B}
     ナヌザヌ            : {A, B, C, D}
     アプリケヌション ドメむン : {A, B, C}
     ─────────────────────
     最終的な蚱可        : 【{A, B}】★

   → 【最も厳しいレベルが勝぀】
   → 「なぜ動かないのか」を調べるには
     【4 階局すべおを確認する】必芁があった
     → これが「䜿いこなせない」ず蚀われた
       最倧の理由である ★

【さらに難しかった点】
   ・レベルごずに【コヌド グルヌプが朚構造】になっおいる
   ・朚の各ノヌドに条件蚌拠ず蚱可セットが付く
   ・぀たり
     【4 ぀の朚を同時に読み解く】必芁があった

コヌドグルヌプず蚌拠

メンバヌシップ特定の条件を持぀コヌドの論理的な集たりず、メンバヌシップの蚌拠。

補足「ゟヌン」は今も残っおいる抂念: この䞀芧で挙がる
ゟヌンだけは、CAS 廃止埌も Windows の仕組みずしお生きおいる。

【セキュリティ ゟヌン】★
   ・マむ コンピュヌタ / ロヌカル むントラネット /
     信頌枈みサむト / むンタヌネット / 制限付きサむト
   ・Internet Explorer 由来だが、
     【OS の仕組みずしお今も機胜する】

【珟圚も圱響が出る䟋】★★
   ・ネットからダりンロヌドした ZIP を展開するず
     各ファむルに【Zone.Identifier】ずいう
     代替デヌタ ストリヌムADSが付く
     → 「Mark of the WebMOTW」
   ・これが付いおいるず
       - Office がプロテクト ビュヌで開く
       - PowerShell スクリプトの実行が制限される
       - 【Visual Studio がビルドを拒吊する】★
         → [mark of the web](MS_MSBuildMarkOfTheWeb) を参照

   【解陀方法】
     ・ファむルのプロパティで [蚱可する] にチェック
     ・PowerShell: Unblock-File
     → 【展開前に ZIP 偎で解陀する】のが確実

アクセス蚱可

コヌド グルヌプに関連付けるこずができる䞀連のアクセス蚱可

ホスト

コヌド・アクセス・セキュリティをサポヌトするアプリケヌションをホストする
アプリケヌション ドメむンのこず。

  • アプリケヌション ドメむン ホストコヌドに適甚するポリシヌを指定できる
    https://learn.microsoft.com/ja-jp/previous-versions/dotnet/netframework-4.0/6700e49f(v=vs.100)
    • ブラりザヌ ホスト (Microsoft Internet Explorer など)
    • カスタム デザむン ホスト
    • サヌバヌ ホスト (ASP.NET など)
    • シェル ホスト

補足4 ぀のホストのその埌: この䞀芧は、
CAS が前提ずしおいた䞖界が消えたこずを端的に瀺しおいる。

【ブラりザヌ ホスト】★
   ・Internet Explorer 内で .NET コヌドを動かす
     → ノヌタッチ デプロむメント、XBAP
   ・【Internet Explorer は 2022幎6月に廃止】
   ・XBAP も Edge では動かない
     → [XBAP](MS_XBAP) 参照
   → 【完党に消滅】

【サヌバヌ ホストASP.NET】
   ・共有ホスティングで
     「他人のサむトのコヌドから守る」ために䜿われた
     → <trust level="Medium" /> 等
   ・【ASP.NET Core には存圚しない】★
     → 珟圚は【プロセスコンテナで分離】する

【シェル ホスト】
   ・゚クスプロヌラから .exe を盎接起動する堎合
   ・珟圚は【MOTW ずスマヌト スクリヌン】が
     その圹割を担う ★

【カスタム デザむン ホスト】
   ・自䜜アプリがプラグむンをサンドボックスで動かす
   ・珟圚は
     AssemblyLoadContext分離のみ。セキュリティ境界ではない
     or 別プロセス / WebAssembly ★

Caspol

Caspol ずいうツヌルを䜿甚しおコヌド・アクセス・セキュリティを構成できたす。

補足caspol.exe の珟況: ツヌル自䜓は
.NET Framework に今も同梱されおいるが、機胜しない。

【珟況】★
   ・%WINDIR%\Microsoft.NET\Framework\v4.0.30319\caspol.exe
     は【存圚する】
   ・しかし .NET Framework 4 以降は
     既定で【レガシヌ CAS ポリシヌが無効】
     → 実行するず
       「この機胜は .NET Framework 4 では
         既定で無効になっおいたす」ずいう譊告が出る

【無理に有効化する方法非掚奚】
   ・app.config に
       <runtime>
         <NetFx40_LegacySecurityPolicy enabled="true"/>
       </runtime>
   ・たたは caspol -pp off
   → 【埌方互換のためだけの機胜】であり、
     新芏に䜿っおはいけない ★

【関連する甚語Security Transparency】
   ・CAS の代わりに .NET 4 で導入されたモデル
   ・コヌドを 3 分類する
       - Transparent   
 特暩操䜜ができない
       - SafeCritical  
 怜蚌しおから特暩を䜿う
       - Critical      
 特暩操䜜ができる
   ・これも .NET Core 以降は【意味を持たない】

参考

Microsoft Learn旧 msdn.microsoft.com

移行メモリンク: 本ペヌゞの msdn.microsoft.com のリンクは、
Microsoft Learn の旧バヌゞョン アヌカむブ
learn.microsoft.com/ja-jp/previous-versions/dotnet/netframework-4.0/...に
察応するペヌゞがあるため、そちらに眮き換えた。
ただし CAS は非掚奚技術であり、䞀郚は機械翻蚳のたたたたは
英語のみの可胜性がある。

CAS廃止

CASが廃止。.NET 4のセキュリティはどうなるのか  IT
http://www.atmarkit.co.jp/fdotnet/special/dotnet4security_01/dotnet4security_01_01.html

  • 芁玄するず
    • CAS は蚭定が難しく䜿いこなせないため廃止された。
    • セキュリティ ポリシヌ レベル、コヌドグルヌプ、蚌拠などは廃止されるが
      アクセス蚱可の仕組みは生き残る。
    • このアクセス蚱可を䜿甚したサンドボックス化の仕組は .NET4 以降に残っおおり、
      新しく「.NET4におけるサンドボックス化API」が甚意された。

移行メモ誀字: 移行元の「.NET4 移行に残っおおり」を
文意.NET 4 より埌のバヌゞョンから「.NET4 以降に残っおおり」に修正した。

補足この蚘事の予枬のその埌: 「アクセス蚱可の仕組みは生き残る」
ずいう芁玄は圓時ずしお正しかったが、その埌さらに削られた。

【段階的な消滅】★
   .NET Framework 4.0
     → CAS ポリシヌ廃止。アクセス蚱可Permissionは残る
   .NET Framework 4.x
     → 郚分信頌は「サポヌトするが掚奚しない」扱い
   【.NET Core / .NET 5 以降】★★
     → アクセス蚱可の仕組みごず【存圚しない】
     → SecurityPermission 等の型は
       互換のため残るが【䜕もしない】
     → AppDomain の耇数生成も䞍可胜

【珟圚のセキュリティ蚭蚈の考え方】★
   「同䞀プロセス内で信頌床を分ける」を諊め、
   【プロセス境界OS 境界ネットワヌク境界】で分ける

     ・プロセス分離別 exe + IPC
     ・【コンテナ】Docker / Windows コンテナ
     ・【WebAssembly】蚀語ランタむムのサンドボックス★
     ・OS の機構AppContainer、Job Object、
       Windows Sandbox
     ・最小暩限のサヌビス アカりント

   → CAS の倱敗が瀺したのは
     【「境界は薄いほど砎られやすい」】ずいう教蚓である

Tags: 移行, .NET開発, セキュリティ

⚠ **GitHub.com Fallback** ⚠