共用方式為


使用應用程控來保護 PowerShell

Windows 10 包含兩種技術:App Control for BusinessAppLocker,可用來控制應用程式。 它們可讓您建立鎖定體驗,以協助保護您的PowerShell環境。

AppLocker 是以軟體限制原則的應用程式控制功能為基礎。 AppLocker 可讓您建立規則,以允許或拒絕特定使用者或群組的應用程式。 您可以根據檔案的唯一屬性來識別應用程式。

商務用應用程控,在 Windows 10 中引進為 Windows Defender 應用程控 (WDAC),可讓您控制哪些驅動程式和應用程式可以在 Windows 上執行。

封鎖政策偵測

PowerShell 會偵測到 AppLocker 和適用於商業用途的 App Control 的系統範圍原則。 AppLocker 沒有辦法查詢原則強制執行狀態。 若要偵測 AppLocker 是否強制執行全系統應用程控原則,PowerShell 會建立兩個暫存盤,並測試是否可以執行它們。 檔案名稱使用以下格式:

  • $Env:TEMP/__PSScriptPolicyTest_<random-8dot3-name>.ps1
  • $Env:TEMP/__PSScriptPolicyTest_<random-8dot3-name>.psm1

商務用 App Control 是適用於 Windows 的慣用應用控制系統。 App Control 提供可讓您探索原則設定的 API。 應用程控是在Microsoft安全性回應中心 (MSRC) 所定義的維護準則下設計為安全性功能。 如需詳細資訊,請參閱 適用於 Windows 的應用程式控制件和 App Control 和 AppLocker 功能可用性

注意

在選擇App Control或AppLocker時,我們建議您使用商務用 App Control 來執行應用程式控制,而非 AppLocker。 Microsoft不再投資 AppLocker。 雖然 AppLocker 可能會繼續收到安全性修正,但不會收到功能增強功能。

應用程控原則強制執行

當 PowerShell 在應用程控原則下執行時,其行為會根據定義的安全策略而變更。 在應用程控原則下,PowerShell 會在模式中 FullLanguage 執行原則允許的受信任腳本和模組。 所有其他腳本和腳本區塊都是不受信任的,並在 ConstrainedLanguage 模式下執行。 當不受信任的腳本嘗試執行模式中不允許的 ConstrainedLanguage 動作時,PowerShell 會擲回錯誤。 很難知道腳本為何無法在模式中 ConstrainedLanguage 正確執行。

應用程控原則稽核

PowerShell 7.4 新增了新功能,以支援稽核模式中的應用程控原則。 在稽核模式中,PowerShell 會在 ConstrainedLanguage 模式下執行不受信任的腳本,執行時不會發生錯誤,而是將訊息記錄到事件記錄檔。 記錄訊息描述如果原則處於 強制 模式,將會套用哪些限制。

變更的歷程記錄

Windows PowerShell 5.1 是第一個支援應用程控的 PowerShell 版本。 App Control 和 AppLocker 的安全性功能會隨著每個新版本的 PowerShell 而改善。 下列各節說明此支援在PowerShell的每個版本中如何變更。 這些變更是累積的,因此較新版本中所述的功能包括舊版的功能。

PowerShell 7.4 中的變更

在 Windows 上,當 PowerShell 在應用程控原則下執行時,其行為會根據定義的安全策略而變更。 在應用程控原則下,PowerShell 會在模式中 FullLanguage 執行原則允許的受信任腳本和模組。 所有其他腳本和腳本區塊都是不受信任的,並在 ConstrainedLanguage 模式下執行。 當未受信任的腳本嘗試執行不允許的動作時,PowerShell 會擲回錯誤。 很難知道腳本為何無法在模式中 ConstrainedLanguage 正確執行。

PowerShell 7.4 現在支援稽核模式中的應用程控原則。 在稽核模式中,PowerShell 會在模式中 ConstrainedLanguage 執行不受信任的腳本,但會將訊息記錄到事件記錄檔,而不是擲回錯誤。 記錄訊息描述如果原則處於 強制 模式,將會套用哪些限制。

PowerShell 7.3 中的變更

  • PowerShell 7.3 現在支援透過應用程控 API 封鎖或允許 PowerShell 腳本檔案的功能。

PowerShell 7.2 中的變更

  • AppLocker 中有一個極端情況,其中您只有 拒絕 規則,而沒有使用限制模式來強制執行政策,因此可以繞過執行原則。 從 PowerShell 7.2 開始,已進行變更,以確保 AppLocker 規則優先於 Set-ExecutionPolicy -ExecutionPolicy Bypass 命令。

  • PowerShell 7.2 現在不允許在鎖定的計算機上以Add-Type 模式的 PowerShell 工作階段使用 NoLanguage Cmdlet。

  • PowerShell 7.2 現在不允許腳本在 AppLocker 系統鎖定條件中使用 COM 物件。 在內部使用 COM 或 DCOM 的 Cmdlet 不會受到影響。

進一步閱讀