共用方式為


使用應用程控來保護 PowerShell

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

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

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

鎖定原則偵測

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

  • $env:TEMP/__PSAppLockerTest__<random-8dot3-name>.ps1
  • $env:TEMP/__PSAppLockerTest__<random-8dot3-name>.psm1

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

注意

在應用程控或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 不會受到影響。

進一步閱讀