2025年11月12日 星期三

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

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

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\machineKey\validation

validation 預設值 SHA1,GCB建議值HMACSHA256、HMACSHA384 或 HMACSHA512,不符合。

若改成 HMACSHA256、HMACSHA384 或 HMACSHA512,會有甚麼影響 ?

此值儲存於 Web.Config 嗎 ?

Web.Config 有相對應值 ?

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

ChatGPT

🔹 一、machineKey.validation 是什麼?

<machineKey> 是 ASP.NET 在加密、驗證使用者驗證票證(Forms Authentication Cookie)、ViewState、Session、AntiForgery Token 等時使用的金鑰組設定。

validation 屬性決定簽章演算法(即「雜湊演算法」)。

🔹 二、預設值與 GCB 建議值差異

項目 預設值 GCB 建議值 說明
validation SHA1 HMACSHA256、HMACSHA384、HMACSHA512 SHA1 已被認為安全性不足;HMACSHA 系列為強化版本
  • SHA1 雖仍可用,但已被視為弱雜湊演算法,可被碰撞攻擊(collision attack)破解。
  • GCB 建議使用 HMACSHA256 以上演算法是為符合現行加密安全標準。

🔹 三、修改為 HMACSHA256/384/512 會有什麼影響?
影響層面 說明
安全性 提升,防止 SHA1 的碰撞攻擊。
⚠️ 相容性 若系統中有多台 Web Server(或 Web Farm),且它們之間 machineKey 不一致,改變演算法後會造成 Cookie、ViewState、Session 無法互通。
⚠️ 現有登入狀態失效 變更後所有先前簽章(例如 ASP.NET Forms Authentication Cookie)都會無效,使用者需重新登入。
⚠️ 需重新部署 若應用程式中有自行實作簽章驗證、序列化機制(自訂加密驗證),也需確保使用新演算法相容。

🔹 四、machineKey 儲存位置與 Web.Config 對應設定

是的,此值通常儲存在 Web.config:

<system.web>
  <machineKey
    validationKey="AutoGenerate,IsolateApps"
    decryptionKey="AutoGenerate,IsolateApps"
    validation="HMACSHA256"
    decryption="AES" />
</system.web>


若在 IIS 管理員的「設定編輯器」中設定

system.web/machineKey/validation

修改後會自動反映至該網站的 Web.config(除非該設定是由 machine.config 或 applicationHost.config 繼承)。

🔹 五、系統更新後的行為

是的,當應用程式重新啟動或部署新版本(含更新 Web.config)時:

  1. ASP.NET 啟動時會重新讀取 Web.config。
  2. 若 machineKey 值不同(或 validation 變更),所有簽章/Session/Forms Cookie 都會被視為無效。
  3. 建議若為生產系統,應事先:
    • 通知使用者登入會重置;
    • 若多台 IIS 負載平衡(Web Farm),確保各台使用相同 machineKey。

(完)

沒有留言:

張貼留言