[研究]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/
| 類別項次 | 類別 | 項數 | 起訖項次編號 | 合計 |
| 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 |
- 開發環境不要設定為 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\錯誤網頁\動作\開啟功能\動作\編輯功能設定\編輯錯誤網頁的設定\錯誤回應 | 本機要求的詳細錯誤及遠端要求的自訂錯誤網頁或自訂錯誤網頁 |
********************************************************************************
| 項次 | 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 |
********************************************************************************
| 項次 | 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 |
(下圖)
ChatGPT
- 如果網站是舊專案(例如 .NET Framework 2.0、3.5),這些版本的 ASP.NET 可能不支援 HMACSHA256/384/512,會導致驗證失敗、ViewState 不能正確解碼,使用者可能看到錯誤頁面。
- 如果是 .NET Framework 4.5+ 的 WebForm 專案,改成 HMACSHA256/384/512 基本上不會異常,但 現有使用 SHA1 簽署的資料(Cookie、ViewState)可能無法驗證,也就是說舊 Session 或 Cookie 可能失效。
- 多伺服器環境:如果是多台 IIS Server,machineKey 的 validationKey 必須統一,否則不同伺服器產生的 ViewState 或 Forms Authentication Ticket 將無法互相驗證。
- 正式機更新程式碼後,此設定值會被 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應用程式預設無法執行下列任何一個動作:
▪預設信任層級為Full(internal) |
站台 | IIS管理員\伺服器\站台\網站\管理\設定編輯器\動作\開啟功能\區段\system.web\trust\level | Medium (web_mediumtrust.config)、Low (web_lowtrust.config)或Minimal (web_minimaltrust.config) |
| 項次 | 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 |
可能注意的地方
- 第三方 API 或前端檢測工具
- 如果有某些安全掃描、Web 應用防火牆或自動化工具 檢測 Server header,設 True 可能會:
- 顯示「無法檢測 IIS 版本」或「Server header missing」的訊息。
- 這通常只是資訊缺失,非錯誤,對功能沒有影響。
- 開發環境
- 開發時可能會少了 Server 資訊(有些 debug 或自動化檢測工具會用它判斷環境),僅影響訊息顯示,不會影響程式。
- 瀏覽器端
- 完全不會影響瀏覽器端 HTML、JS、CSS 等正常呈現。
********************************************************************************
沒有留言:
張貼留言