面對層出不窮的惡意軟體、駭客工具、未授權程式,單靠防毒軟體遠不夠。Windows 軟體限制原則 (Software Restriction Policies, SRP) 以群組原則形式,提供基於路徑、雜湊、憑證、網路區域的程式執行控制,是企業端點防禦的關鍵基礎設施。本文系統解析 SRP 核心機制、五大安全等級、規則優先權邏輯、環境變數應用與經典配置陷阱。
SRP 流程:識別程式 → 匹配規則 → 套用安全等級 → 允許/阻擋執行
.exe .dll .bat .cmd .vbs .js .msi .scr .ps1 等 40+ 可執行擴展名,可自訂增減預設僅顯示「不受限制」與「不允許」。啟用完整五級:
註冊表路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Safer\CodeIdentifiers
新建 DWORD:Levels = 0x4131000 (十六進位)
重開 gpedit.msc 即見五級
| 等級 | 權限描述 | 實際效果 |
|---|---|---|
| 不受限制 | 繼承父進程存取權杖 | 受用戶權限約束,非完全不受限 |
| 基本使用者 | 僅擁有「略過遍歷檢查」特權,拒絕管理員權限 | 標準用戶權限,無法寫入系統目錄/註冊表 |
| 受限制 | 比基本使用者更嚴格,保留「略過遍歷檢查」 | 受限 SID,無法存取大多數系統資源 |
| 不信任 | 禁止存取系統/用戶資源 | 程式無法啟動(進程建立失敗) |
| 不允許 | 無條件阻擋程式執行或檔案開啟 | 最嚴格,任何嘗試直接失敗 |
權重排序:不受限制 > 基本使用者 > 受限制 > 不信任 > 不允許
%ProgramFiles%、%SystemRoot%、%UserProfile%)與萬用字元(*、?)C:\Windows\ 設不允許,%Windir% 設不受限 → 生效不允許)** 不等於遞迴子目錄錯誤寫法:%USERPROFILE%\Local Settings\**\*.exe 意圖阻擋 Local Settings 及所有子目錄下的可執行檔。
實測:SRP 中 * 不包含路徑分隔符 \,** 與 * 完全等效。上述規則僅阻擋 Local Settings 第一層子目錄(Temp、Temporary Internet Files、Application Data、History)下的檔案,不含二層及以上子目錄,也不含 Local Settings 本身。
後果:導致安裝程式解壓至 Temp 子目錄的執行檔被阻擋,大量軟體無法安裝。
?:\\autorun.inf 無法阻擋 USB 病毒自動執行廣為流傳的規則:?:\\autorun.inf 設「不允許」。
實測:雙擊 autorun.inf 確實被阻擋,但病毒仍正常執行。
原因:AutoRun 機制由 Shell 探索處理,非直接執行 autorun.inf。病毒利用 open=malware.exe 或 shell\open\command 指向可執行檔,繞過 .inf 檔案限制。
正確防禦:關閉 AutoRun(註冊表 NoDriveTypeAutoRun = 0xFF)、啟用 AppLocker/WDAC、端點防護軟體行為分析。
| 技術 | 推出版本 | 核心差異 | 建議場景 |
|---|---|---|---|
| SRP | XP/Server 2003 | 路徑/雜湊/憑證/區域,使用者模式執行,可繞過 | 舊版相容、簡單路徑封鎖 |
| AppLocker | 7/Server 2008 R2 | 核心模式執行、支援發佈者/檔案屬性/例外、規則集合、稽核模式 | 企業標準化應用控制(Pro/Enterprise 版) |
| WDAC (Device Guard) | 10/Server 2016 | 硬體虛擬化隔離、核心模式強制、簽署原則、不可繞過 | 高安全環境、關鍵基礎設施、不可變工作負載 |