深入瞭解 PowerShell 腳本安全性

適用於:Configuration Manager (目前的分支)

系統管理員必須負責驗證其環境中建議的 PowerShell 和 PowerShell 參數使用方式。 以下是一些實用的資源,可協助系統管理員瞭解 PowerShell 的威力和潛在風險表面。 本指引可協助您降低潛在風險面,並允許使用安全的腳本。

PowerShell 腳本安全性

Configuration Manager腳本功能可讓您以視覺化方式檢閱和核准腳本。 另一個系統管理員可以要求允許其腳本。 系統管理員應該知道 PowerShell 腳本可以有模糊化的腳本。 模糊化的腳本可能是惡意的,而且在腳本核准程式期間難以透過視覺檢查進行偵測。 以視覺化方式檢閱 PowerShell 腳本,並使用檢查工具來協助偵測可疑的腳本問題。 這些工具不一定能判斷 PowerShell 作者的意圖,因此可以將注意力放在可疑的腳本上。 不過,這些工具會要求系統管理員判斷其為惡意或刻意的腳本語法。

建議

  • 使用下列各種連結,熟悉 PowerShell 安全性指引。
  • 簽署您的腳本:另一個保護腳本安全的方法,是在匯入腳本以供使用之前先經過審查並簽署。
  • 請勿在 PowerShell 腳本中儲存密碼 (例如密碼) ,並深入瞭解如何處理秘密。

PowerShell 安全性的一般資訊

選擇此連結集合,可讓Configuration Manager系統管理員開始瞭解 PowerShell 腳本安全性建議。

防禦 PowerShell 攻擊

防範惡意程式碼插入

PowerShell - 藍色小組,討論深度腳本區塊記錄、受保護的事件記錄、反惡意程式碼掃描介面,以及安全程式碼產生 API

適用于反惡意程式碼掃描介面的 API

PowerShell 參數安全性

傳遞參數是一種彈性地使用腳本並延遲決策的方式,直到執行時間為止。 它也會開啟另一個風險介面。

下列清單包含防止惡意參數或腳本插入的建議:

  • 只允許使用預先定義的參數。
  • 使用正則運算式功能來驗證允許的參數。
    • 範例:如果只允許特定範圍的值,請使用正則運算式只檢查可構成該範圍的字元或值。
    • 驗證參數有助於防止使用者嘗試使用可以逸出的特定字元,例如引號。 可以有多種類型的引號,因此使用正則運算式來驗證您認為允許的字元通常比嘗試定義所有不允許的輸入更容易。
  • 在PowerShell 資源庫中使用 PowerShell 模組「插入式搜尋」。
    • 可能會有誤判,因此當某個專案標示為可疑時,請尋找意圖,以判斷其是否為實際問題。
  • Microsoft Visual Studio 具有可協助檢查 PowerShell 語法的腳本分析器。

下列標題為:「DEF CON 25 - Lee Lee - 取得$pwnd:攻擊強化式 Windows Server」的影片提供您可以保護 (問題類型的概觀,特別是第 12:20 到 17:50) :

環境建議

下列清單包含 PowerShell 系統管理員的一般建議:

  • 部署最新版的 PowerShell,例如第 5 版或更新版本,其內建于 Windows 10 或更新版本。 您也可以部署Windows Management Framework
  • 啟用並收集 PowerShell 記錄,並選擇性地包含受保護的事件記錄。 將這些記錄納入您的簽章、搜捕和事件回應工作流程中。
  • 在高價值系統上實作 Just Enough Administration,以消除或減少這些系統不受限制的系統管理存取權。
  • 部署Windows Defender應用程式控制原則,以允許預先核准的系統管理工作使用 PowerShell 語言的完整功能,同時將互動式和未經核准的使用限制為有限的 PowerShell 語言子集。
  • 部署Windows 10或更新版本,讓防毒軟體提供者完整存取所有內容 (包括在執行時間產生或解除混淆的內容,) 包含 PowerShell 的 Windows 腳本主機所處理。