Windows 8 RTM 發現 hosts 檔案修改會被自動還原,無法封鎖 `facebook.com` 與 `ad.doubleclick.net` 兩大域名。經測試確認此為 Windows Defender 內建保護機制所致。
問題現象
- 編輯 `C:\Windows\System32\drivers\etc\hosts` 加入封鎖項目 (如 `127.0.0.1 facebook.com`)
- 儲存後重新開啟 hosts 確認修改仍在
- 開啟瀏覽器訪問目標網站 → hosts 檔案自動刪除對應行
- 關閉 Windows Defender 即可解決問題
根因分析
- Windows 8 整合 Windows Defender (原反間諜軟體) 與 MSE (Microsoft Security Essentials) 反病毒引擎
- 內建「網路檢查系統」(NIS) 監控 hosts 檔案變更
- 針對特定高價值域名 (Facebook、DoubleClick 廣告網路) 維護保護清單
- 偵測到 hosts 修改這些域名 → 判定為惡意軟體/劫持行為 → 自動還原
- 保護清單由微軟雲端定期更新,可能包含更多域名
解決方案
方案一:暫時停用 Windows Defender (驗證用)
- 開啟 Windows Defender → 「設定」→「管理員」→ 取消勾選「開啟此應用程式」
- 修改 hosts 檔案 → 驗證封鎖生效
- 缺點:失去即時防護,不建議長期使用
方案二:將 hosts 檔案加入 Windows Defender 掃描排除
- Windows Defender → 「設定」→「排除的檔案與位置」
- 新增 `C:\Windows\System32\drivers\etc\hosts`
- 修改 hosts → 驗證生效
- 優點:保持即時防護,僅排除 hosts 檔案監控
方案三:使用防火牆規則封鎖 (推薦)
- 開啟「進階安全性 Windows 防火牆」(`wf.msc`)
- 「輸出規則」→「新增規則」→「自訂」
- 「所有程式」→ 協定類型「任何」→ 遠端 IP 新增目標域名解析 IP 範圍
- 動作:「封鎖連線」→ 所有設定檔 → 命名「Block_Facebook_DoubleClick」
- 優點:系統層級攔截、不修改 hosts、不影響 Defender、可記錄封鎖日誌
方案四:使用第三方 Hosts 管理工具 (具備鎖定功能)
- HostsMan、BlueLife Hosts Editor 等支援「寫入保護/鎖定檔案」功能
- 設置檔案屬性「唯讀」+ ACL 拒絕 SYSTEM/TrustedInstaller 寫入 (進階)
企業環境建議
- 透過群組原則部署防火牆封鎖規則 (電腦設定 → Windows 設定 → 安全性設定 → 進階安全性 Windows 防火牆)
- 或使用 Proxy/UTM 設備於網路層面統一封鎖廣告/社交媒體域名
- 配置 Windows Defender 群組原則排除 hosts 檔案 (若業務需求必須修改 hosts)
Windows 8 保護 hosts 檔案的設計初衷是防禦惡意軟體劫持熱門域名,但也誤傷合法管理需求。採用防火牆規則替代 hosts 封鎖,才是現代作業系統環境下的正規作法。