前言
.NET 程式碼存取安全性 (CAS) 中,代碼組屬性決定權限集的計算邏輯。Exclusive (獨占) 與 LevelFinal (層級最終) 兩個屬性對安全性策略評估有決定性影響。
Exclusive 屬性 (獨占)
定義與效果
- 策略層級允許的權限集 = 與該獨占代碼組關聯的權限集
- 運行庫授予的權限絕不超過獨占代碼組的權限集
- 同一策略層級內,代碼只能屬於一個獨占代碼組
- 計算獨占代碼組權限時,忽略同層級其他代碼組
- 仍會計算當前層級之下的策略層級
應用場景
需要向特定組件授予確切權限集,不允許同層級其他代碼組的權限疊加或干擾。
重要限制
警告:若一個組件同時符合多個標記為獨占的代碼組,該組件將無法執行 (執行階段拋出 PolicyException)。
LevelFinal 屬性 (層級最終)
定義與效果
- 檢查代碼組成員資格與授予權限時,不考慮包含此代碼組的策略層級以下 (應用程式域層級除外) 的任何策略層級
- 策略層級階層:企業 → 電腦 → 使用者 → 應用程式域
- 若套用於企業層級代碼組,電腦與使用者層級策略將完全跳過
- 保證標記屬性的代碼組關聯組件,不會因較低層級管理員決策而獲得較少權限
應用場景
企業級管理員強制鎖定權限基線,防止本機管理員或使用者透過較低層級策略削減權限。
屬性比較總結
| 屬性 | 影響範圍 | 同層級互動 | 下層級策略 | 典型用途 |
| Exclusive | 權限集上限 | 排他 (僅一個) | 仍會計算 | 精確授權特定組件 |
| LevelFinal | 策略評估鏈截斷 | 無直接影響 | 完全跳過 | 企業鎖定權限基線 |
管理工具操作
Caspol.exe 命令列
# 開啟標籤 1.2.1 代碼組的 Exclusive 屬性
caspol -chggroup 1.2.1 -exclusive on
# 開啟 LevelFinal 屬性 (語法類似)
caspol -chggroup 1.2.1 -levelfinal on
.NET Framework 組態工具 (mscorcfg.msc)
- 啟動 mscorcfg.msc
- 展開「執行階段安全性原則」
- 選取目標代碼組 → 右鍵「屬性」
- 勾選「此代碼組為獨占」或「此代碼組為層級最終」
最佳實務建議
- 謹慎使用 Exclusive:容易導致組件無法載入,建議僅用於高度信任的特定簽名組件
- 企業層級配合 LevelFinal:建立不可被覆寫的安全基線
- 測試驗證:部署前在測試環境完整驗證策略評估結果
- 文件化記錄:記錄每個特殊屬性代碼組的用途與授權依據
註:本文部分內容改寫自《.NET 安全揭秘》
作者:玄魂
出處:https://www.cnblogs.com/xuanhun/
查看本欄目