針對 Windows Server 2003 搭配 IIS 6.0、ASP、.NET、PHP、Perl、MSSQL、MySQL 等常見 Web 服務組合,本文提供一套經過多次實測驗證的安全強化方案。核心策略包含磁碟權限精細控制、系統服務精簡、高危組件封鎖、IIS 用戶隔離四大面向,能有效防禦木馬植入、提權攻擊、跨站腳本等常見威脅。
採用「最小權限原則」,針對系統盤、網站根目錄、系統關鍵目錄分別設定 ACL(存取控制清單),拒絕匿名用戶寫入、刪除、執行權限,僅保留必要的讀取與執行權限。關鍵目錄配置範例如下:
| 目錄 | 核心防護重點 |
|---|---|
| C:\WINDOWS\system32\config | 拒絕 IIS 匿名用戶讀取,保護 SAM 資料庫 |
| C:\WINDOWS\repair | 同樣拒絕匿名讀取,防備份檔洩露 |
| C:\Program Files | IIS_WPG 僅讀取/執行;虛擬主機用戶組拒絕列表目錄,阻擋 FSO 類木馬 |
| C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys | Everyone 僅限該資料夾:列出/讀取屬性/創建檔案/資料夾/寫入屬性,不可賦予執行與刪除權限 |
針對 PHP、MySQL、WinWebMail 等第三方應用,建議採用獨立應用程式池與專屬 IIS 用戶,將權限限制在各自安裝目錄內,實現應用層面的隔離。
除非業務強制依賴,下列服務務必停用並設為「禁用」:
停用上述服務可大幅縮小攻擊面,降低資源佔用。若需 SSL 憑證服務,請依實際需求調整。
攻擊者常利用 WScript.Shell、Shell.Application、FileSystemObject 等組件執行系統命令、操作檔案。採取「註銷 + 重命名 CLSID/ProgID」雙重防護:
regsvr32 /u 註銷 wshom.ocx、shell32.dll、scrrun.dllShell.Application,找到兩個鍵值:{13709620-C279-11CE-A49E-444553540000} 與 Shell.Application{13709620-C279-11CE-A49E-444553540001}、Shell.Application_nohackFileSystemObject、WScript.Shell,並以 cacls 拒絕 Guests 存取對應 DLLcmd.exe:cacls C:\WINDOWS\system32\cmd.exe /e /d guests針對 Serv-U 6.0 以前版本:停止服務 → 用 UltraEdit 打開 ServUDaemon.exe 搜尋 LocalAdministrator 與特定特徵碼 → 替換為等長度亂碼 → 同步修改 ServUAdmin.exe → 設定安裝目錄拒絕 IIS 匿名用戶讀取。
| 站點類型 | 腳本支援 | 目錄 | IIS 匿名用戶 | 應用程式池身分 | 目錄權限 (Administrators 完全控制外) |
|---|---|---|---|---|---|
| 靜態 HTML | HTM/STM/SHTML | D:\www.1.com | IUSR_1.com | 共用預設池 | IUSR_1.com (讀取) |
| ASP | ASP/ASA | D:\www.2.com | IUSR_2.com | 共用預設池 | IUSR_2.com (讀/寫) |
| ASP.NET | ASPX/ASAX/ASHX… | D:\www.3.com | IUSR_3.com | 獨立池 | IWAM_3.com (讀/寫)、IUSR_3.com (讀/寫) |
| PHP | PHP/PHP3/PHP4 | D:\www.4.com | IUSR_4.com | 獨立池 | IWAM_4.com (讀/寫)、IUSR_4.com (讀/寫) |
每個虛擬主機使用專屬 IUSR_* 匿名帳戶,.NET 與 PHP 站點再配置專屬 IWAM_* 作為應用程式池身分,實現進程級隔離。主目錄權限僅啟用「讀取/純腳本」,並開啟「啟用父路徑」。
本方案在多台生產伺服器長期運行,有效遏制了自動化掃描工具、Webshell 植入、提權腳本等常見攻擊,建議根據實際業務微調權限細節後上線。