MS_DotNet4Sandbox - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(コード・アクセス・セキュリティ)
-
セキュリティ・ポリシーと、それを決定する証拠は廃止された。
-
.NET 4 では、サンドボックス化されたアプリケーション・ドメインを作成するための、
さまざまな API が AppDomain.CreateDomain メソッドに一本化された。-
AppDomain.CreateDomain メソッド (System)
https://learn.microsoft.com/ja-jp/dotnet/api/system.appdomain.createdomain -
いろいろ備忘録日記 主に .NET 絡みの
別のAppDomainで処理を実行するための方法メモ
http://devlights.hatenablog.com/entry/20120808/p1- AppDomain
- ExecuteAssembly
- DoCallBack
- CreateInstanceAndUnwrap
- MarshalByRefObject
- Serializable
-
補足(.NET Core 以降、この仕組みは存在しない): 本ページが扱うのは
.NET Framework 4 における CAS(コード アクセス セキュリティ)の
整理の話である。その後、土台ごと無くなった。【段階的な廃止の経緯】★ .NET Framework 2.0 まで → 【証拠(Evidence)】+【セキュリティ ポリシー】で アセンブリの権限を決める仕組みがあった (マイコンピュータ / ローカル イントラネット / インターネット ゾーン ごとに権限を変える) .NET Framework 4.0(本ページの時点) → 【セキュリティ ポリシーが廃止】★ → サンドボックスは AppDomain.CreateDomain(name, evidence, setup, grantSet, ...) に一本化された → 併せて【透過的セキュリティ(Security Transparency)】 モデルが導入された .NET Framework 4.0 以降 → CAS そのものが【非推奨】と明言される ★ 「CAS はセキュリティ境界として使用しないこと」 .NET Core / .NET 5 以降 → 【AppDomain の複数生成が不可能】★ AppDomain.CreateDomain は PlatformNotSupportedException を投げる → 【CAS は完全に存在しない】 → 部分信頼という概念自体がない【なぜ廃止されたのか】★ ・CAS は【信頼境界として機能しなかった】 → 権限昇格の脆弱性が繰り返し発見された → 「同一プロセス内で信頼度の違うコードを 安全に同居させる」ことは 本質的に難しいと結論された ・XBAP / ClickOnce 部分信頼 / Silverlight といった 【CAS を前提にした技術がすべて終息した】【今、同じ目的を達するには】★ ① 【プロセス分離】 別プロセスで実行し、IPC で通信する → プロセスが落ちても本体は生き残る → 【最も現実的】★ ② 【OS のサンドボックス機構】 ・Windows: AppContainer / Job Object / 低整合性レベル(Low IL) ・【Windows Sandbox】(Win10 Pro 以降) ③ 【コンテナ】(Docker / Windows コンテナ)★ → 分離の単位をプロセスからコンテナへ ④ 【WebAssembly】 → 言語ランタイム レベルのサンドボックス → 近年、プラグイン実行基盤として注目されている ⑤ 【AssemblyLoadContext】(.NET Core 以降) → AppDomain の代替だが 【セキュリティ境界ではない】★ あくまで 「アセンブリの分離ロード・アンロード」のための仕組み (プラグインの動的読み込み/差し替えに使う)【本ページのリンク先が挙げるメンバの現況】 ExecuteAssembly … 単一 AppDomain 内では動く DoCallBack … .NET Core では【使えない】 CreateInstanceAndUnwrap … .NET Core では【使えない】 MarshalByRefObject … 型は残るが Remoting は廃止 ★ Serializable / BinaryFormatter → 【BinaryFormatter は .NET 9 で完全に削除された】★ (デシリアライズ時の 任意コード実行の温床だったため) → 代替は System.Text.Json 等
Tags: 移行, .NET開発, セキュリティ