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信任層級,

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

[研究]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)傳輸加密


沒有留言:

張貼留言