IIS 6.0 為回應 Code Red、Nimda 等蠕蟲災難,徹底重寫核心架構,確立「預設安全、設計安全」原則,成為關鍵 Web 應用平台的新標準。
預設安全:安裝即安全
1. 非預設安裝
Windows Server 2003 不預裝 IIS 6.0,管理員須明確安裝,消除「不知情暴露」風險。
2. 僅安裝靜態內容服務
| 元件 | IIS 5.0 預設 | IIS 6.0 預設 |
| 靜態 HTML | ✓ | ✓ |
| ASP | ✓ | ✗ |
| ASP.NET | ✓ (若安裝 .NET) | ✗ |
| Server Side Includes | ✓ | ✗ |
| WebDAV | ✓ | ✗ |
| FTP 服務 | ✓ | ✗ |
| SMTP/NNTP | ✓ | ✗ |
動態內容、腳本執行、擴充功能均需明確啟用,大幅縮減攻擊面。
3. 移除範例應用程式
移除 showcode.asp、codebrws.asp 等範例腳本,避免輸入驗證缺陷導致任意檔案讀取 (MS99-013)。
4. 強化檔案存取控制
- 匿名帳號 (IUSR_*) 移除 Web 根目錄寫入權限。
- FTP 使用者隔離於各自根目錄,防止上傳惡意程式至
/scripts 等可執行目錄。
5. 虛擬目錄預設無執行權限
消除目錄遍歷、上傳腳本、MDAC 等經典漏洞利用路徑。
6. 移除子驗證模組 (IISSUBA.dll)
強制所有驗證直接對 SAM/Active Directory 進行,減少 DLL 攻擊面。
7. 父目錄瀏覽預設停用
防止目錄遍歷攻擊存取 SAM 等敏感系統檔案。遷移舊應用時需注意相容性。
設計安全:核心架構重構
HTTP.sys 核心模式 HTTP 協定堆疊
- 運行於核心模式,解析 HTTP 請求、派發至使用者模式工作進程。
- 工作進程受限於使用者模式,無法直接存取核心資源,實現深度防禦。
- 整合 URL 解析器、緩衝區溢位防護、可靠日誌記錄於核心層。
關鍵登錄調優 (HKLM\System\CurrentControlSet\Services\HTTP\Parameters)
MaxFieldLength、MaxRequestBytes:限制標頭/請求大小,防緩衝區溢位。
UrlSegmentMaxLength、UrlSegmentMaxCount:限制 URL 片段長度/數量。
- 可依應用需求微調,平衡安全與相容性。
增強日誌機制
- HTTP.sys 在派發請求前記錄日誌,即使工作進程當機仍保留錯誤記錄。
- 欄位:時間戳、來源/目的 IP:Port、協定版本、HTTP 動詞、URL、狀態碼、站點 ID、原因解釋 (超時、應用程式集區強制中斷等)。
快速失敗保護
- 應用程式集區層級設定:失敗次數臨界值 + 時間窗口 → 自動回收/停止異常工作進程。
- 防止受攻擊進程持續消耗資源、產生錯誤回應。
應用程式隔離:應用程式集區
- 每個集區獨立工作進程 (一或多個),錯誤隔離不波及其他集區。
- 效能較 IIS 5.0 進程內隔離大幅提升,可靠性並重。
最小權限原則落地
- HTTP.sys 核心程式碼:Local System 權限 (必要)。
- 所有工作進程:Network Service 帳號 (Server 2003 新內嚴格受限帳號),而非 LocalSystem。
- 命令列工具僅限管理員執行。
部署建議
- 僅安裝必要元件,啟用必要擴充對應。
- 配置應用程式集區隔離不同信任層級應用。
- 套用 URL 掃描/請求限制登錄值強化 HTTP.sys 防護。
- 啟用詳細日誌與快速失敗保護,整合至監控系統。
- 定期套用安全性更新,採用多層防禦 (WAF、網路防火牆、主機 IDS/IPS)。
IIS 6.0 確立的架構原則 (核心/使用者模式分離、最小權限、預設拒絕、隔離容器) 奠基現代 Web 伺服器安全設計標準,延續至 IIS 7/8/10 與 ASP.NET Core 架構。