PowerShell 有數個設計來改善腳本環境安全性的功能。
執行原則
PowerShell 的執行原則是一項安全功能,可控制 PowerShell 載入組態檔和執行腳本的條件。 此功能有助於防止執行惡意指令碼。 您可以使用組策略設定來設定電腦和使用者的執行原則。 執行原則僅適用於 Windows 平臺。
如需詳細資訊,請參閱 about_Execution_Policies。
使用 SecureString 類別
PowerShell 有數個 Cmdlet,可支援使用 System.Security.SecureString 類別。
而且,如同任何 .NET 類別,您可以在自己的腳本中使用 SecureString 。 不過,Microsoft不建議使用 SecureString 進行新的開發。 Microsoft建議您避免使用密碼,並依賴其他方法來驗證,例如憑證或 Windows 驗證。
PowerShell 會繼續支援 SecureString 類別,以提供回溯相容性。 使用 SecureString 仍然比使用純文字字串更安全。 PowerShell 仍然依賴 SecureString 類型,以避免不小心將內容公開至主控台或記錄中。 請小心使用 SecureString ,因為它可以輕鬆地轉換成純文字字串。 如需使用 SecureString 的完整討論,請參閱 System.Security.SecureString 類別 檔。
模組和腳本區塊記錄
模組記錄可讓您啟用所選 PowerShell 模組的記錄功能。 此設定在電腦上的所有會話中都有效。 PowerShell 會記錄 Windows PowerShell 事件記錄檔中指定模組的管線執行事件。
腳本區塊記錄可讓您記錄命令、腳本區塊、函式和腳本的處理,無論是以互動方式叫用,還是透過自動化來叫用。 PowerShell 會將此信息記錄至 Microsoft-Windows-PowerShell/Operational 事件記錄檔。
如需詳細資訊,請參閱下列文章:
AMSI 支援
Windows Antimalware 掃描介面 (AMSI) 是一種 API,可讓應用程式將動作傳遞至反惡意代碼掃描器,例如 Windows Defender,以掃描惡意承載。 從 PowerShell 5.1 開始,在 Windows 10 上執行的 PowerShell 會將所有腳本區塊傳遞至 AMSI。
PowerShell 7.3 會擴充它傳送至AMSI進行檢查的數據。 它現在包含所有 .NET 方法調用。
如需AMSI的詳細資訊,請參閱 AMSI如何協助。
限制語言模式
LimitedLanguage 模式藉由限制 PowerShell 會話中允許的 Cmdlet 和 .NET 類型來保護系統。 如需完整描述,請參閱 about_Language_Modes。
應用程式控制
Windows 10 包含兩種技術: 商務 用 App Control 和 AppLocker ,可用來控制應用程式。 PowerShell 會偵測是否強制執行整個系統應用程控原則。 此原則會在執行腳本區塊、腳本檔案或載入模組檔案時套用特定行為,以防止系統上執行任意程序代碼。
商務用應用程控是在Microsoft安全性回應中心 (MSRC) 所定義的服務準則下設計為安全性功能。 App Control 是 Windows 慣用的應用程式控制系統。
如需 PowerShell 如何支援 AppLocker 和 App Control 的詳細資訊,請參閱 使用應用程控來保護 PowerShell。
軟體用料表 (SBOM)
從 PowerShell 7.2 開始,所有安裝套件都包含軟體材料帳單(SBOM)。 PowerShell 小組也會針對其擁有但獨立於 PowerShell 隨附的模組產生 SBOM。
您可以在下列位置找到 SBOM 檔案:
- 在 PowerShell 中,尋找 位於
$PSHOME/_manifest/spdx_2.2/manifest.spdx.json的 SBOM。 - 針對模組,請在 模組的資料夾下
_manifest/spdx_2.2/manifest.spdx.json尋找 SBOM。
SBOM 的建立和發佈是將聯邦政府網路安全現代化並增強軟體供應鏈安全性的第一步。 如需此計劃的詳細資訊,請參閱在 Microsoft 使用 SPDX 產生 SBOM 的部落格文章。
PowerShell 遠端執行中的安全資料傳輸
在 PowerShell v7.6-preview5 之前,a Session_Key 可用來加密 SecureString ,再傳送 PowerShell 遠端會話。 PowerShell 遠端通訊協定 (PSRP) 會在需要傳輸物件時 SecureString ,在用戶端和伺服器之間執行金鑰交換。 交換涉及以下步驟:
- 客戶端產生公開/私密金鑰對,並將公開金鑰傳送至伺服器。
- 伺服器會產生對稱加密的會話金鑰。
- 伺服器使用公開金鑰來加密會話金鑰並將其傳送給客戶端。
- 用戶端和伺服器都會使用新的會話金鑰來加密 SecureString 物件。
PowerShell 遠端通訊協定 (PSRP) 會在金鑰交換期間使用演算法 RSAEncryptionPadding.Pkcs1 。 該算法 不 安全,因此密鑰交換不提供任何額外的安全性。
這很重要
您必須使用安全傳輸層,以確保透過 PSRP 進行安全資料傳輸。
從 PowerShell v7.6-preview.5 開始,金鑰交換已被取代。 PSRP 的版本已遞增至 v2.4,並包含下列變更:
當用戶端和伺服器都是 v2.4 或更新版本時,下列 PSRP 訊息已被取代:
- 公鑰
- 公鑰請求
- 加密_SESSION_KEY
當用戶端和伺服器都是 v2.4 或更新版本時,會略過 的
SecureString加密和解密步驟。
此變更是回溯相容的。
- 對於舊的用戶端或伺服器(v2.3 或更低版本),仍會在需要時使用金鑰交換。
- 當用戶端和伺服器都位於同一部電腦上時,PSRP 可以使用具名管道遠端會話。
由於遠端用戶端可以連線到具名管道,而且資料不再使用工作階段金鑰加密,因此具名管道 (用於
Enter-PSHostProcess) 會拒絕遠端用戶端。
安全性服務準則
PowerShell 遵循 適用於 Windows 的Microsoft安全性服務準則。 只有安全性功能符合服務準則。
安全性功能
- 具有商務用應用程控的系統鎖定
- 具有商務用應用程控的限制語言模式
深度防禦功能
- 使用 AppLocker 進行系統鎖定
- AppLocker 的限制語言模式
- 執行原則