2025年11月13日 星期四

[研究]IIS 10套用GCB設定路徑圖解(3)ASP.NET設定建議

[研究]IIS 10套用GCB設定路徑圖解(3)ASP.NET設定建議

2025-12-02

Windows Server 從Windows Server 2016開始,IIS為10.0版,後續 Windows Server 2019, Windows Server 2022, Windows Server 2025 也都是 10.0版,大版本號碼相同,小版本可能不同,畫面幾乎相同。

政府組態基準(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

類別項次 類別 項數 起訖項次編號 合計
1 基本設定 7 No.1 ~ 7 53
2 設定驗證與授權 5 No.8 ~ 12
3 ASP.NET設定建議 12 No.13 ~ 24
4 要求篩選與其他限制模組 11 No.25 ~ 35
5 IIS記錄 4 No.36 ~ 39
6 FTP要求 2 No.40 ~ 41
7 傳輸加密 12 No.42 ~ 53

IIS 10.0 政府組態基準列表

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
13 TWGCB-04-014-0013 ASP.NET設定建議 以retail模式部署Web應用程式 ▪這項原則設定決定是否以retail模式部署Web應用程式
▪以retail模式部署Web應用程式時,ASP.NET將停用追蹤輸出、停用偵錯功能,並停止將詳細系統錯誤訊息傳送給遠端使用者,以避免資訊洩漏
▪預設值為False
系統檔案 ▪開啟machine.config檔案,路徑如下:%systemroot%\Microsoft.NET\Framework64或Framework\framework版本\CONFIG\machine.config
▪設定machine.config:在<system.web>下加入設定值<deployment retail="true" />
True

[研究]如何判斷某 ASP.NET WebForm 網站使用的是哪一個 machine.config 呢?
https://shaurong.blogspot.com/2025/10/aspnet-webform-machineconfig.html

[研究]ASP.NET WebForm 網站的設定檔和繼承關係
https://shaurong.blogspot.com/2025/11/aspnet-webform_5.html

[研究]GCB,IIS,machine.config 設定 <deployment retail="true" /> 影響https://shaurong.blogspot.com/2025/11/gcbiismachineconfig.html

預設值False,GCB建議值 True,理論上正式機可以依循 GCB,開發機必須 False。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
14 TWGCB-04-014-0014 ASP.NET設定建議 偵錯功能 ▪這項原則設定決定是否啟用偵錯功能
▪開發人員通常在開發過程中啟用偵錯模式,網站上線後若未關閉偵錯模式,惡意人士將可利用此功能獲取應用程式相關資訊
▪雖然以retail模式部署Web應用程式時,即會停用偵錯功能,但基於縱深防禦概念,額外再個別停用偵錯功能,可降低因設定錯誤所造成之影響
▪設定為False,代表停用偵錯功能,設定為True,代表啟用偵錯功能
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\compilation\debug False




[研究]GCB,IIS,\system.web\compilation\debug 設定 False 影響

  • 開發環境不要設定為 True,影響開發除錯。
  • 生產環境可以設定為 True,但要改方案原始碼的 Web.Config,避免更新部署程式碼時,設定被覆蓋。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
15 TWGCB-04-014-0015 ASP.NET設定建議 自訂錯誤訊息顯示模式 ▪這項原則設定決定當網頁發生錯誤時,以何種模式顯示自訂錯誤訊息頁面
▪自訂錯誤訊息顯示模式有3種:
(1)開啟(On):啟用自訂錯誤頁面。如果未指定預設的錯誤網頁時,則使用者與本機端都將顯示ASP.NET錯誤訊息頁面
(2)關閉(Off):停用自訂錯誤頁面,使用者與本機端都將顯示ASP.NET錯誤訊息頁面
(3)僅限遠端(RemoteOnly):只對遠端使用者啟用自訂錯誤頁面,本機顯示ASP.NET錯誤訊息頁面
▪建議設定為開啟或僅限遠端,限制使用者僅能看到自訂錯誤頁面,以避免惡意人士利用此功能獲取應用程式相關資訊
▪預設值為僅限遠端(RemoteOnly)
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\customErrors\mode On或RemoteOnly



預設值 RemoteOnly,GCB 建議 On或RemoteOnly,算預設符合。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
16 TWGCB-04-014-0016 ASP.NET設定建議 HTTP詳細錯誤訊息顯示模式 ▪這項原則設定決定當網頁發生錯誤時,以何種模式顯示HTTP詳細錯誤訊息頁面
▪HTTP詳細錯誤資訊可能包含有關應用程式如何運行之細節資訊,確保在遠端使用者端不顯示HTTP詳細錯誤資訊,可減少惡意人士獲取有關應用程式運作資訊之風險
▪藉由錯誤回應設定可決定HTTP詳細錯誤訊息頁面顯示方式:
(1)本機要求的詳細錯誤及遠端要求的自訂錯誤網頁(DetailedLocalOnly):本機端顯示詳細錯誤訊息,非本機端顯示自訂錯誤頁面
(2)自訂錯誤網頁(Custom):不管本機端或是遠端使用者,皆顯示自訂錯誤頁面
(3)詳細錯誤(Detailed):本機端與遠端使用者皆顯示詳細錯誤訊息
▪預設值為DetailedLocalOnly
站台 IIS管理員\伺服器\站台\網站\IIS\錯誤網頁\動作\開啟功能\動作\編輯功能設定\編輯錯誤網頁的設定\錯誤回應 本機要求的詳細錯誤及遠端要求的自訂錯誤網頁或自訂錯誤網頁




預設值 和 GCB 建議都是「本機要求的詳細錯誤及遠端要求的自訂錯誤網頁或自訂錯誤網頁 (DetailedLocalOnly)」。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
17 TWGCB-04-014-0017 ASP.NET設定建議 ASP.NET堆疊追蹤 ▪這項原則設定決定是否關閉網頁堆疊追蹤模式
▪ASP.NET可透過設定<trace>元素來控制如何被蒐集、儲存及顯示追蹤結果。啟用追蹤後,每個網頁都會要求加入追蹤訊息,這些訊息會附加到頁面輸出或儲存在應用程式追蹤紀錄,建議停用追蹤,以減少惡意人士取得詳細追蹤資訊之風險
▪雖然以retail模式部署Web應用程式時,即會停用追蹤輸出,但基於縱深防禦概念,額外再設定停用追蹤功能,可降低因設定錯誤所造成之影響
▪伺服器
▪站台
▪網頁
▪伺服器級別設定:machine.config與web.config
▪站台級別與每個ASP.NET網站級別個別設定:IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\trace\enabled
▪自設定檔與ASP.NET網頁中,移除所有Trace="true"或trace enabled="true"內容
▪False




ChatGPT

情境 trace / Stack Tracing 預設值 GCB 建議設定
ASP.NET (預設) 通常 off / disabled。許多文件指出若不特別設定 <trace enabled="true">@ Page Trace="true",則 tracing 是關閉的。 (Tenable®) False (也就是關閉 tracing) (Scribd)
開發 / 測試 環境 常開啟 <trace enabled="true"> 或在頁面上 Trace="true",以方便除錯與追蹤流程 — (視情況)
生產環境 (依 GCB) 關閉 (remove trace / trace enabled = false) 符合 GCB 建議

「設定位置」、「設定路徑」、「GCB設定值」欄位寫的有些混亂南棟,預設值和GCB 建議值似乎相同。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
18 TWGCB-04-014-0018 ASP.NET設定建議 工作階段狀態Cookie模式 ▪這項原則設定決定是否使用Cookie儲存工作階段狀態(Session state)
▪工作階段狀態Cookie模式選項如下:
(1)使用Cookie:不論瀏覽器或裝置是否支援Cookie,Cookie都會保存使用者資料
(2)使用URI:不論瀏覽器或裝置是否支援Cookie,呼叫的功能都會使用查詢字串儲存識別項
(3)使用裝置設定檔:ASP.NET根據HttpBrowserCapabilities設定決定是否使用Cookie。如果HttpBrowserCapabilities設定表示瀏覽器或裝置支援Cookie,就會使用Cookie,否則便會在查詢字串中使用識別項
(4)自動偵測:ASP.NET決定要求瀏覽器或裝置是否支援Cookie。如果要求的瀏覽器或裝置支援Cookie,AutoDetect便會使用Cookie保存使用者資料,否則便會在查詢字串中使用識別項。如果瀏覽器或裝置支援Cookie,但目前已停用Cookie,要求的功能還是會使用Cookie
▪使用Cookie管理使用者連線狀態,可藉由防止ASP.NET將Session資訊透過URL傳送,避免Session ID在代理伺服器記錄檔或瀏覽歷程紀錄中被找到,以降低Session遭竊取之風險
▪預設值為使用Cookie
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\sessionState\cookieless UseCookies




預設值和GCB 建議值都是 UseCookie。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
19 TWGCB-04-014-0019 ASP.NET設定建議 httpOnlyCookies ▪這項原則設定決定Cookie是否只能經由HTTP(S)協定來存取,其餘之JavaScript、Silverlight或Flash等前端程式皆無法存取
▪設定網站中的Cookie屬性為HttpOnly,讓Cookie只供瀏覽器與網站伺服器間之網頁溝通,可避免Cookie被JavaScript等相關前端程式存取,以降低攻擊者利用網站既有的XSS漏洞並透過JavaScript取得Cookie資料之機會
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\httpCookies\httpOnlyCookies True




預設值 False,GCB建議 True,實際檢視某網站 Source Code 的 Web.Config 為 True。

<configuration>
  <system.web>
    <httpCookies httpOnlyCookies="true" sameSite="Strict" requireSSL="true" />
  </system.web>
</configuration>

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
20 TWGCB-04-014-0020 ASP.NET設定建議 電腦金鑰驗證方法(ASP.NET 3.5) ▪這項原則設定決定ASP.NET 3.5環境之電腦金鑰使用何種驗證方式
▪使用電腦金鑰,可設定加密及解密金鑰,用以協助保護表單驗證之Cookie資料與網頁層級的檢視狀態資料。電腦金鑰也可用來驗證跨處理序工作階段狀態識別
▪系統採用ASP.NET 3.5版本時,支援下列驗證方法:
(1)AES(金鑰長度可為128, 192或256位元)
(2)MD5
(3)SHA1
(4)TripleDES(金鑰長度為192位元)
▪ASP.NET 3.5環境預設電腦金鑰驗證方法為SHA1
▪在變更.NET Framework版本設定中,分別有v2.0.x與v4.0.x兩種選項,「v2.0.x」表示.NET Framework版本包含3.0與3.5,則適用此項原則設定
▪確認版本方式:IIS管理員\伺服器\動作\變更.NET Framework版本,開啟確認版本
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\machineKey\validation SHA1或AES






[研究]ASP.NET WebForm 用 IIS GUI 判斷使用的 .NET Framework 版本? 32 bits 或 64位元?

註:【確認版本方式:IIS管理員\伺服器\動作\變更.NET Framework版本,開啟確認版本】
除非 Windows Server 同時安裝 .NET 3.5 和 .NET 4.5(或以上),才會出現【變更.NET Framework版本】按鈕,Windows Server 2019 ~ 2025 預設安裝 .NET 4.7或以上,預設沒安裝 .NET 3.5,故不會有該按鈕。

預設值、GCB建議值、實際檢視某網站值 都是 SHA1。
但 ASP.NET 3.5網站應該看本條 No.20,ASP.NET 4.5網站應該看下一項 No.21。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
21 TWGCB-04-014-0021 ASP.NET設定建議 電腦金鑰(ASP.NET 4.5) ▪這項原則設定決定ASP.NET 4.5環境之電腦金鑰使用何種驗證方式
▪使用電腦金鑰,可設定加密及解密金鑰,用以協助保護表單驗證之Cookie資料與網頁層級的檢視狀態資料。電腦金鑰也可用來驗證跨處理序工作階段狀態識別
▪系統採用ASP.NET 4.5版本時,支援下列驗證方法:
(1)AES(金鑰長度可為128, 192或256位元)
(2)MD5
(3)SHA1
(4)TripleDES(金鑰長度為192位元)
(5)HMACSHA256
(6)HMACSHA384
(7)HMACSHA512
▪ASP.NET 4.5環境預設電腦金鑰驗證方法為SHA256
▪在變更.NET Framework版本設定中,分別有v2.0.x與v4.0.x兩種選項,「v4.0.x」表示.NET Framework版本包含4.5,則適用此項原則設定
▪確認版本方式:IIS管理員\伺服器\動作\變更.NET Framework版本,開啟確認版本
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\machineKey\validation HMACSHA256、HMACSHA384或HMACSHA512

(下圖)









某真實網站此值為 SHA1,但 GCB 建議 HMACSHA256、HMACSHA384或HMACSHA512。

ChatGPT

  1. 如果網站是舊專案(例如 .NET Framework 2.0、3.5),這些版本的 ASP.NET 可能不支援 HMACSHA256/384/512,會導致驗證失敗、ViewState 不能正確解碼,使用者可能看到錯誤頁面。
  2. 如果是 .NET Framework 4.5+ 的 WebForm 專案,改成 HMACSHA256/384/512 基本上不會異常,但 現有使用 SHA1 簽署的資料(Cookie、ViewState)可能無法驗證,也就是說舊 Session 或 Cookie 可能失效。
  3. 多伺服器環境:如果是多台 IIS Server,machineKey 的 validationKey 必須統一,否則不同伺服器產生的 ViewState 或 Forms Authentication Ticket 將無法互相驗證。
  4. 正式機更新程式碼後,此設定值會被 Web.Config 設定值覆蓋,建議從 Source Code 改起。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
22 TWGCB-04-014-0022 ASP.NET設定建議 .NET信任層級 ▪這項原則設定決定是否指定套用到應用程式之程式碼存取安全性(Code Access Security, CAS)層級
▪可選擇之信任層級如下:
(1)Full(internal):指定未限制的權限。授予ASP.NET應用程式權限,以存取受制於作業系統安全性之任何資源。支援所有特殊權限操作。
(2)High(web_hightrust.config):指定高程式碼存取安全性層級,ASP.NET應用程式預設無法執行下列任何一個動作:
  • 呼叫Unmanaged程式碼
  • 呼叫處理的元件
  • 寫入事件日誌
  • 存取「訊息佇列」服務佇列
  • 存取ODBC、OleDb或Oracle資料來源
(3)Medium(web_mediumtrust.config):指定中程式碼存取安全性層級,表示除了高信任層級限制外,ASP.NET應用程式預設無法執行下列任何一個動作:
  • 在應用程式目錄外存取檔案
  • 存取登錄
  • 進行網路或網頁服務呼叫
(4)Low(web_lowtrust.config):指定低程式碼存取安全性層級,表示除了中信任層級限制外,ASP.NET應用程式預設無法執行下列任何一個動作:
  • 寫入檔案系統
  • 呼叫Assert方法
(5)Minimal(web_minimaltrust.config):指定最小的程式碼存取安全性層級,表示ASP.NET應用程式只具有執行權限
▪預設信任層級為Full(internal)
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\trust\level Medium (web_mediumtrust.config)、Low (web_lowtrust.config)或Minimal (web_minimaltrust.config)



,ASP.NET設定建議,.NET信任層級,

.NET信任層級 = Code Access Security, CAS = partial trust

[研究]「ASP.NET 部分信任 (Partial Trust)」的 3rd Party 套件/元件支援狀況
此值設定 Medium 會導致 Aspose.Cells, ClosedXML, ClosedXML.Parser, FreeSpire.PDF, NReco.PdfGenerator, WkHtmlToPdf, System.Reflection.Emit 相關套件(FastMember, LinqKit) 、、無法使用。

Can't execute under partial trust - SecurityException: System.Security.Permissions.EnvironmentPermission #1669

Web伺服器上的權限信任
所有Aspose .NET元件都需要設定完全信任權限

CAS被微軟棄用,建議設定Full,否則很多程式庫不能用。

Code Access Security
Because Code Access Security is deprecated, most modern code within the .NET ecosystem is not designed to operate within a partial trust environment. Applications that rely on CAS should not expect modern libraries to behave correctly within these environments, unless the library developer has taken explicit steps to ensure compatibility within the CAS sandbox.
由於程式碼存取安全性 (CAS) 已被棄用,.NET 生態系統中的大多數現代程式碼並非設計用於在部分信任環境中運作。依賴 CAS 的應用程式不應期望現代函式庫在這些環境中正常運行,除非函式庫開發者已採取明確措施確保其與 CAS 沙箱的兼容性。

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

[研究]「ASP.NET 部分信任 (Partial Trust)」的支援狀況

微軟對 .NET 4.0 開始宣導使用 Full Trust 。

預設值 Full,GCB 建議值 Medium (web_mediumtrust.config)、Low (web_lowtrust.config)或Minimal (web_minimaltrust.config)。但微軟對 .NET 4.0 開始宣導使用 Full Trust,建議排除。

********************************************************************************
項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
23 TWGCB-04-014-0023 ASP.NET設定建議 X-Powered-By標頭 ▪這項原則設定決定是否移除X-Powered-By標頭
▪X-Powered-By標頭為HTTP回應標頭,提供網頁伺服器在回應標頭中,呈現當前網頁應用程式所使用之技術
▪移除X-Powered-By標頭可避免攻擊者藉此取得網頁伺服器技術資訊(如使用ASP或PHP),並利用特定版本已知漏洞對伺服器進行攻擊,以提升網頁伺服器安全性
伺服器 IIS管理員\伺服器\IIS\HTTP回應標頭\動作\開啟功能\X-Powered-By\動作\移除 移除




HTTP Response Headers
https://go.microsoft.com/fwlink/?LinkId=210509
https://learn.microsoft.com/zh-tw/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/hh831707(v=ws.11)

有些第三方前端或 API 可能用 X-Powered-By 做檢測(很少見)。

套件類型 檢測方式 移除後結果 錯誤類型
Wappalyzer、BuiltWith 讀取 HTTP 標頭 X-Powered-By 或其他指紋 無法透過標頭判斷 ASP.NET;可能用其他方式猜測 不會報錯,只是無法辨識
企業內部監控或兼容性檢查 AJAX / HTTP Request 判斷標頭值 判斷不到標頭值;某些程式可能跳過特定功能 如果程式寫死依賴標頭,可能出現「Null Reference」或「未找到值」等程式例外,但非常罕見
安全掃描工具 HTTP 回應分析 判斷不到技術棧,掃描報告會顯示「未知技術」或「標頭缺失」 一般不會報錯,只是掃描結果不完整

預設值存在「X-Powered-By」HTTP回應標頭,GCB建議把它移除。基本上出問題機率低,可以移除。

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

項次 TWGCB-ID 類別 原則設定名稱 說明 設定位置 設定路徑 GCB設定值
24 TWGCB-04-014-0024 ASP.NET設定建議 伺服器標頭 ▪這項原則設定決定是否移除伺服器標頭
▪伺服器標頭為HTTP回應標頭,呈現當前網頁應用程式所使用之技術
▪移除伺服器標頭是IIS 10的一項新功能,雖然透過回應標頭進行站台識別並非唯一方法,但移除後仍能增加難度,並阻止部分潛在攻擊者,從而有助於降低風險
站台 IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.webServer\security\requestFiltering\removeServerHeader True


預設值 False,GCB建議True。

設定 True 後,HTTP回應標頭不會出現

Server: Microsoft-IIS/10.0   

可能注意的地方

  1. 第三方 API 或前端檢測工具
    • 如果有某些安全掃描、Web 應用防火牆或自動化工具 檢測 Server header,設 True 可能會:
      • 顯示「無法檢測 IIS 版本」或「Server header missing」的訊息。
      • 這通常只是資訊缺失,非錯誤,對功能沒有影響。
  2. 開發環境
    • 開發時可能會少了 Server 資訊(有些 debug 或自動化檢測工具會用它判斷環境),僅影響訊息顯示,不會影響程式。
  3. 瀏覽器端
    • 完全不會影響瀏覽器端 HTML、JS、CSS 等正常呈現。

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

(完)

相關

[研究]IIS 10套用GCB設定路徑圖解(1)基本設定

[研究]IIS 10套用GCB設定路徑圖解(2)設定驗證與授權

[研究]IIS 10套用GCB設定路徑圖解(3)ASP.NET設定建議

[研究]IIS 10套用GCB設定路徑圖解(4)要求篩選與其他限制模組

[研究]IIS 10套用GCB設定路徑圖解(5)IIS記錄

[研究]IIS 10套用GCB設定路徑圖解(6)FTP要求

[研究]IIS 10套用GCB設定路徑圖解(7)傳輸加密


沒有留言:

張貼留言