使用 Windows Defender 應用程控 (WDAC) 來強制執行腳本

注意

Windows Defender 應用程式控制的某些功能僅在特定 Windows 版本上可用。 深入了解 應用程控功能可用性

重要

選項 11 停用:Windows Server 2016在 Windows 10 1607 LTSB 上不支援腳本強制執行,而且不應該在這些平臺上使用。 這樣做會導致非預期的腳本強制執行行為。

腳本強制執行概觀

根據預設,除非原則中已設定選項 11 Disabled:Script Enforcement ,否則所有 WDAC 原則都會啟用腳本強制執行。 WDAC 腳本強制執行牽涉到覺察型腳本主機之間的交握,例如 PowerShell 和 WDAC。 不過,腳本主機會處理實際的強制執行行為。 某些腳本主機,例如 Microsoft HTML 應用程式主機 (mshta.exe) ,會在任何 WDAC UMCI 原則作用中時封鎖所有程式碼執行。 大部分的腳本主機都會先詢問 WDAC,是否應根據目前作用中的 WDAC 原則來允許腳本執行。 然後,腳本主機會封鎖、允許或變更腳本的執行 方式 ,以最能保護用戶和裝置。

已簽署腳本的驗證是使用 WinVerifyTrust API 來完成。 若要通過驗證,簽章根目錄必須存在於裝置上受信任的根存放區中,而且您的 WDAC 原則必須允許它。 此行為與可執行檔的 WDAC 驗證不同,後者不需要安裝跟證書。

WDAC 會共用所有腳本強制事件的 AppLocker - MSI 和腳本 事件記錄檔。 每當腳本主機詢問 WDAC 是否應允許腳本時,就會記錄事件,並以 WDAC 傳回給腳本主機的答案記錄事件。 如需 WDAC 腳本強制事件的詳細資訊,請參閱 瞭解應用程控事件

注意

當腳本執行原則不允許時,WDAC 會引發事件,指出腳本已「封鎖」。不過,實際的腳本強制執行行為是由腳本主機處理,實際上可能不會完全封鎖檔案執行。

另請注意,某些腳本主機可能會變更其行為,即使 WDAC 原則僅處於稽核模式。 您應該檢閱本文中的腳本主機特定資訊,並在您的環境中徹底測試,以確保您需要執行的腳本正常運作。

屬於 Windows 一部分的啟發式腳本主機

PowerShell

您的 WDAC 原則必須允許所有 PowerShell 腳稿 (.ps1) 、模組 (.psm1) ,以及指令清單 (.psd1) ,才能以完整語言許可權執行。

您的 WDAC 原則也必須允許允許模組載入的任何 相依模組 ,而且強制執行 WDAC 時,模組函式必須以名稱明確匯出。 未指定任何匯出函式的模組 (沒有匯出名稱清單) 仍會載入,但無法存取任何模組函式。 在其名稱中使用通配符 (*) 的模組將無法載入。

WDAC 原則不允許的任何 PowerShell 腳本仍會執行,但只會在限制語言模式中執行。

不建議使用PowerShell 點源 。 相反地,腳本應該使用PowerShell模組來提供一般功能。 如果允許的腳本檔案嘗試執行點源腳本檔案,則這些腳本檔案也必須通過原則。

如果強制執行任何 WDAC UMCI 原則,且任何作用中的 WDAC 原則啟用腳本強制執行,即使該原則處於稽核模式,WDAC 會將互動式 PowerShell 置於限制語言模式中。 若要以完整語言許可權執行互動式 PowerShell,您必須停用 所有 原則的腳本強制執行。

如需詳細資訊,請 參閱關於語言模式限制語言模式

VBscript、cscript 和 jscript

您的 WDAC 原則必須允許使用 Windows 腳本主機 (wscript.exe) 或 Microsoft 控制台式腳本主機 (cscript.exe) 執行所有腳本。 如果沒有,則會封鎖腳本。

Microsoft HTML 應用程式主機 (MSHTA) 和 MSXML

如果任何強制執行腳本的 WDAC 原則為作用中,即使該原則處於稽核模式,使用 MSHTA 或 MSXML 的所有程式碼執行都會遭到封鎖。

COM物件

WDAC 會針對您的 WDAC 原則可以擴充或進一步限制的 COM 對象,額外強制執行受限制的允許清單。 COM 物件強制執行 不會 受到選項 11 Disabled:Script Enforcement 的影響。 如需如何允許或拒絕 COM 物件的詳細資訊,請參閱 允許 COM 物件註冊

未由 WDAC 直接控制的腳本

WDAC 不會直接控制透過 Windows 命令處理器 (cmd.exe) 執行的程式代碼,包括 .bat/.cmd 腳本檔案。 不過,這類批次腳本嘗試執行的任何專案都受WDAC控制。 如果您不需要執行 cmd.exe,建議您直接封鎖它,或只根據呼叫進程的例外狀況來允許它。 請參閱使用 Windows Defender 應用程控原則來控制特定外掛程式、載入宏和模組

WDAC 不會控制腳本透過未啟用的腳本主機執行,例如許多第三方 Java 或 Python 引擎。 如果您的 WDAC 原則允許執行未啟用的腳本主機,則您會隱含地允許所有腳本透過該主機執行。 對於非 Microsoft 腳本主機,您應該向軟體廠商確認其腳本主機是否已啟用 WDAC 原則。