2025年11月13日 星期四

[研究]GCB,IIS,\system.web\trust\level 變更影響?

[研究]GCB,IIS,\system.web\trust\level 變更影響?

2025-11-12

政府組態基準(Government Configuration Baseline,簡稱GCB)

TWGCB-04-014_Microsoft IIS 10政府組態基準說明文件v1.1_1141002

https://www.nics.nat.gov.tw/core_business/cybersecurity_defense/GCB/GCB_Documentation/

https://download.nics.nat.gov.tw/api/v4/file-service/UploadFile/attachfilegcb/TWGCB-04-014_Microsoft%20IIS%2010%E6%94%BF%E5%BA%9C%E7%B5%84%E6%85%8B%E5%9F%BA%E6%BA%96%E8%AA%AA%E6%98%8E%E6%96%87%E4%BB%B6v1.1_1141002.pdf

https://download.nics.nat.gov.tw/api/v4/file-service/UploadFile/attachfilegcb/TWGCB-04-014_Microsoft%20IIS%2010%E6%94%BF%E5%BA%9C%E7%B5%84%E6%85%8B%E5%9F%BA%E6%BA%96%E8%AA%AA%E6%98%8E%E6%96%87%E4%BB%B6v1.1_1141002.docx

IIS 管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\trust\level 


預設 Full,GCB建議 Medium、Low 或 Minimal,不相符。 

改成 Medium、Low 或 Minimal 會導致甚麼功能異常 ? 

此值儲存於 Web.Config 嗎 ? Web.Config 有相對應值 ? 

系統更新程式碼 (含 Web.Config) 後,此值會從新自 Web.Config 讀取?

********************************************************************************

ChatGPT

🧩 一、設定位置與作用

在 IIS 管理員 → 設定編輯器 → system.web → trust → level

對應到 Web.config 中的設定如下:


<configuration>
  <system.web>
    <trust level="Full" originUrl="" />
  </system.web>
</configuration>

此設定主要是 ASP.NET 部分信任 (Partial Trust) 模型的一部分,用來限制應用程式能執行的 .NET Framework 權限。

⚙️ 二、各層級說明

層級 權限範圍 備註
Full (預設) 完整信任,應用程式可執行所有 .NET Framework API 與檔案/登錄/網路操作 最相容但最不安全
High 接近完整信任,但限制部分敏感 API 少見
Medium 禁止部分 I/O、反射、網路等高風險操作 常造成應用程式相容性問題
Low / Minimal 幾乎無法存取檔案、登錄、網路、環境變數等 嚴格安全,但幾乎無法運行一般 ASP.NET 應用程式

⚠️ 三、改為 High、Medium、Low、Minimal 可能造成的功能異常

🟦 1️⃣ trust level="High" 可能異常

此層級比 Full 稍弱,禁止部分反射與跨組件存取。

類別 可能異常現象 錯誤訊息/行為
反射與動態載入 某些使用 Reflection.EmitAssembly.LoadFrom() 的模組無法載入 System.Security.SecurityException: Request for the permission of type 'SecurityPermission' failed.
第三方套件 一些需要存取私有成員或內部屬性的 NuGet 套件出錯 例:PDF 產生、ORM、報表元件
跨組件呼叫 嘗試調用未標註 [AllowPartiallyTrustedCallers] 的組件時失敗 That assembly does not allow partially trusted callers.
Windows API 或 COM Interop 無法調用 COM 物件或 Win32 API PlatformNotSupportedException

🟩 2️⃣ trust level="Medium" 可能異常

此層級限制檔案、登錄、網路、環境變數、反射等權限,為最常見的「報錯層級」。

類別 可能異常現象 錯誤訊息/行為
檔案 I/O 無法讀取或寫入 App_Data 外部檔案 System.Security.SecurityException: Request for the permission of type 'FileIOPermission' failed.
反射/動態程式碼 不能建立動態組件或存取私有成員 MethodAccessExceptionSecurityException
Session / ViewState 使用 SessionStateMode=SQLServerStateServer 可能失敗 例:SecurityException during serialization
資料庫連線 驅動程式需要存取環境變數(例如連線字串),導致拒絕存取 SqlClient 無法開啟連線
第三方函式庫 任何需檔案存取、暫存檔或動態編譯的套件將出錯 例:DotNetZip、Spire、NPOI
郵件發送 System.Net.Mail.SmtpClient 拒絕使用網路 SecurityException: The request for permission of type 'WebPermission' failed.

🔸整體評估: 幾乎所有實際運作中的 ASP.NET 網站都會在此層級出錯,除非是純靜態或展示型頁面。

🟨 3️⃣ trust level="Low" 可能異常

進一步限制網路、登錄、檔案、反射、環境變數與 Thread 操作。

類別 可能異常現象 錯誤訊息/行為
任何 I/O 操作 檔案、登錄、網路全部被禁止 SecurityException
第三方程式庫 幾乎所有使用 System.IO、System.Net 的函式庫失效 無法載入或直接例外中止
伺服端控制項 某些 ASP.NET 控制項需寫入暫存檔 (如 GridView 匯出 Excel) 將失敗 匯出功能失效
應用程式啟動 若 Global.asax 內部使用反射或呼叫外部組件,應用程式啟動即報錯 Application_Start 失敗
序列化 / 加密 無法使用 MachineKey 或加密 API System.Security.SecurityException

🔸整體評估: 僅適用於靜態 HTML 或非常有限的動態頁面,實務上幾乎無法部署 ASP.NET 專案。

🟥 4️⃣ trust level="Minimal" 可能異常

最嚴格層級,只允許非常有限的基本運算與輸出,近乎沙盒。

類別 可能異常現象 錯誤訊息/行為
ASP.NET 執行階段 幾乎所有系統類別被拒絕使用 SecurityException 於啟動階段即發生
頁面呈現 HttpContext, Request, Response 操作受限 Request for the permission ... failed
控制項渲染 WebForm 控制項可能無法 Render 頁面空白或出現例外
Session / Cookie 無法建立 Cookie 或 Session 登入、驗證全部失效
應用程式載入 Global.asax、Web.config 中有自訂模組會導致整站無法啟動 SecurityException 於啟動時拋出

🔸整體評估: 幾乎不可能運行任何 ASP.NET 程式,只能用於安全測試或理論環境。

📘 總結

層級 實務可用性 安全性 相容性
Full ✅ 高 ⚠️ 低 ✅ 最高
High ⚠️ 中 ✅ 中 ⚠️ 中
Medium ❌ 低 ✅ 高 ❌ 極低
Low / Minimal ❌ 極低 ✅ 最高 ❌ 無法運行

實務上,Medium 或以下信任層級幾乎不再使用,因為 ASP.NET Core 與新版 Framework 都不再支援 Partial Trust 模式。

🔄 四、系統更新或程式碼更新後的行為

若你的部署包含 Web.config,那麼部署後 IIS 啟動網站時會重新讀取其中的 <trust> 設定。

若沒有出現在 Web.config,則 IIS 使用機器層級 (machine.config) 預設值,通常是 Full。

🧠 五、實務建議

建議方向 原因
維持 Full 目前 .NET Framework 4.x 及 IIS 10 幾乎皆假設 Full Trust 環境
若要通過 GCB 檢查 可文件化說明「應用程式需 Full Trust 才能運行」,並在稽核時註記「例外項」
若是純靜態網站 (HTML, JS) 可設定為 LowMinimal 無問題

📚 參考來源

ASP.NET Trust Levels and Policy Files
https://learn.microsoft.com/en-us/previous-versions/aspnet/wyts434y(v=vs.100)

Regarding .NET Trust level set
https://learn.microsoft.com/en-us/answers/questions/5572235/regarding-net-trust-level-set

********************************************************************************

(完)

相關

[研究]「ASP.NET 部分信任 (Partial Trust)」的 3rd Party 套件/元件支援狀況https://shaurong.blogspot.com/2025/11/aspnet-partial-trust-3rd-party.html

[研究]GCB,IIS,\system.web\trust\level 變更影響?
https://shaurong.blogspot.com/2025/11/gcbiissystemwebtrustlevel.html

[研究]「ASP.NET 部分信任 (Partial Trust)」的支援狀況
https://shaurong.blogspot.com/2025/11/aspnet-partial-trust.html


沒有留言:

張貼留言