漏洞防護會自動對作業系統程序及個別應用程式套用多種漏洞緩解技術。
在個別裝置上使用 Windows 安全性應用程式設定這些設定。 然後,將設定匯出為 XML 檔案,以便可以部署至其他裝置。 使用群組原則將 XML 檔案一次散發至多個裝置。 您還可以使用 PowerShell 設定緩和措施。
本文列出漏洞利用防護中可用的各項緩解措施。 它指示緩和措施是可以套用至全系統還是個別應用程式,並簡要描述了緩和措施的運作原理。
本文也說明如何使用 Windows 安全性、PowerShell 及行動裝置管理(MDM)組態服務提供者(CSP)啟用或設定緩解措施。 在單一裝置上配置漏洞防護設定,是建立可部署於整個網路的設定的第一步。 若要在多台裝置部署此配置,請參閱 匯入、匯出及部署漏洞防護設定。
警告
某些安全緩解技術可能有某些應用程式的相容性問題。 在將此設定部署到生產環境或網路其餘部分之前,您應先在所有目標使用案例中使用 漏洞防護稽核模式 來測試漏洞防護。
漏洞利用防護緩解措施
可為個別應用程式設定所有緩和措施。 還可將一些緩和措施套用至作業系統層級。
您可以將每個緩和措施設定為開啟、關閉或其預設值。 有些緩解措施有更多選項,這些選項在表格描述中都有標示。
預設值一律在每個緩和措施的 [使用預設值] 選項的括弧中指定。 以下範例中,資料執行防止的預設為「開啟」。
每個風險降低設定的 [使用預設值] 設定表示我們對家庭使用者日常使用之基本保護層級的建議。 企業部署應考慮其個別需求的保護,因此需要修改設定,避免預設。
如需與各項緩解措施相關的 PowerShell Cmdlet,請參閱本文底部的 漏洞利用防護緩解措施的 PowerShell Cmdlet。
| 緩和措施 | 描述 | 可套用於 | 稽核模式可用 |
|---|---|---|---|
| 控制流量防護 (CFG) | 確認間接呼叫的控制流程完整性。 可選擇抑制匯出,並使用嚴格的 CFG。 | 系統與應用程式層級 | 否 |
| 資料執行防護 (DEP) | 防止程式碼在僅供資料使用的記憶體頁面上執行,例如堆積區和堆疊。 僅可為 32 位元 (x86) 應用程式設定,對所有其他結構永久啟用。 可選擇性啟用 ATL thunk 模擬。 | 系統與應用程式層級 | 否 |
| 強制執行映像隨機化 (強制 ASLR) | 強制重新放置未使用 /DYNAMICBASE 編譯的映像。 可選擇讓沒有搬遷資訊的映像載入失敗。 | 系統與應用程式層級 | 否 |
| 隨機記憶體分配 (由下而上 ASLR) | 隨機化虛擬記憶體配置的位置。 它包括系統結構堆積、堆疊、TEB 和 PEB。 可選擇對 64 位元處理序使用更大的隨機化變動範圍。 | 系統與應用程式層級 | 否 |
| 驗證例外狀況鏈結 (SEHOP) | 確保例外鏈在異常派遣期間的完整性。 僅可為 32 位元 (x86) 應用程式設定。 | 系統與應用程式層級 | 否 |
| 驗證堆積完整性 | 偵測到堆積損壞時終止處理序。 | 系統與應用程式層級 | 否 |
| 任意程式碼防護 (ACG) | 防止引入非映像支援的可執行程式碼,並防止修改字碼頁。 可選擇性地允許執行緒退出並允許遠端降級 (僅可使用 PowerShell 設定)。 | 僅應用程式層級 | 是 |
| 封鎖低完整性映像 | 防止載入標示為「低完整性」的映像。 | 僅應用程式層級 | 是 |
| 封鎖遠端映像 | 防止載入來自遠端裝置的映像。 | 僅應用程式層級 | 否 |
| 封鎖不信任的字型 | 防止載入系統字型目錄中未安裝的任何 GDI 型字型,尤其是來自網路的字型。 | 僅應用程式層級 | 是 |
| 程式碼完整性防護 | 限制載入由 Microsoft、WHQL 或更高版本簽署的映像。 可選擇允許 Microsoft Store 已簽署的映像。 | 僅應用程式層級 | 是 |
| 停用擴充點 | 停用各種可讓 DLL 注入所有處理序的延伸機制,例如 AppInit DLL、視窗掛鉤和 Winsock 服務提供者。 | 僅應用程式層級 | 否 |
| 停用 Win32k 系統呼叫 | 防止應用程式使用 Win32k 系統呼叫資料表。 | 僅應用程式層級 | 是 |
| 不允許子處理流程 | 防止應用程式建立子處理序。 | 僅應用程式層級 | 是 |
| 匯出位址篩選 (EAF) | 偵測由惡意程式碼解決的危險操作。 可選擇驗證由漏洞利用常用模組進行的存取。 | 僅應用程式層級 | 是 |
| 匯入位址篩選 (IAF) | 偵測由惡意程式碼解決的危險操作。 | 僅應用程式層級 | 是 |
| 模擬執行 (SimExec) | 確保對敏感性 API 的呼叫傳回至合法呼叫者。 僅可為 32 位元 (x86) 應用程式設定。 與 ACG 不相容。 | 僅應用程式層級 | 是 |
| 驗證 API 呼叫 (CallerCheck) | 確保合法呼叫者會呼叫敏感的 API。 僅可為 32 位元 (x86) 應用程式設定。 與 ACG 不相容 | 僅應用程式層級 | 是 |
| 確認控制代碼使用方式 | 導致在任何無效控制代碼參考上引發例外狀況。 | 僅應用程式層級 | 否 |
| 驗證映像相依性完整性 | 強制執行 Windows 映像相依性載入的程式碼簽署。 | 僅應用程式層級 | 否 |
| 驗證堆疊完整性 (StackPivot) | 確保堆疊未遭重新導向,以保護敏感 API。 與 ACG 不相容。 | 僅應用程式層級 | 是 |
重要事項
如果你在 程式設定 區塊新增應用程式並在那裡設定個別緩解措施,這些設定會在系統 設定 區塊中指定的相同緩解措施上方被保留。 下列矩陣和範例可說明預設值的運作方式:
| 在 [程式設定] 中啟用 | 在 [系統設定] 中啟用 | 行為 |
|---|---|---|
| 是 | 否 | 如 [程式設定] 中定義 |
| 是 | 是 | 如 [程式設定] 中定義 |
| 否 | 是 | 如 [系統設定] 中定義 |
| 否 | 否 | 預設值,如 [使用預設值] 選項所定義 |
範例 1 Mikael 在 [系統設定] 區段將 [資料執行防護 (DEP)] 設定為 [預設關閉]。 Mikael 然後將應用程式 test.exe 新增至 [程式設定] 區段。 在該應用程式的選項中,在 [資料執行防護 (DEP)] 下,他啟用 [覆寫系統設定] 選項,並且將開關設定為 [開啟]。 在 [程式設定] 區段下未列出其他應用程式。 結果是只會對 test.exe 啟用 DEP。 所有其他應用程式將不會套用 DEP。
範例 2 Josie 在 [系統設定] 區段將 [資料執行防護 (DEP)] 設定為 [預設關閉]。 Josie 然後將應用程式 test.exe 新增至 [程式設定] 區段。 在該應用程式的選項中,在 [資料執行防護 (DEP)] 下,她啟用 [覆寫系統設定] 選項,並且將開關設定為 [開啟]。 Josie 也將 miles.exe 應用程式新增到 [程式設定] 區段,並將 [控制流程防護 (CFG)] 設定為 [開啟]。 她沒有為 DEP 啟用 [覆寫系統設定] 選項或該應用程式的任何其他緩和措施。 結果將為 test.exe 啟用 DEP。 將不會為任何其他應用程式啟用 DEP,包括 miles.exe。 將為 miles.exe 啟用 CFG。
注意事項
如果你在這篇文章中發現任何問題,可以直接向 Windows Server/Windows 客戶端的合作夥伴回報,或使用你所在國家/地區的 Microsoft 技術支援電話。
使用 Windows 安全性應用程式設定系統層級緩和措施
要在單一裝置上設定系統層級及應用程式層級的漏洞防護緩解措施,請使用 Windows 安全性 應用程式:
在工作列中選取防護盾圖示,或在 [開始] 功能表中搜尋 [Windows 安全性],以開啟 Windows 安全性應用程式。
選取 [應用程式和瀏覽器控制] 磚 (或左側功能表列上的應用程式圖示),然後選取 [惡意探索保護]。
在 [系統設定] 區段下,尋找您想要設定的緩和措施,然後選取下列其中項。 未在 [程式設定] 區段個別設定的應用程式,將使用此處設定的設定:
- [預設開啟] - 針對未在應用程式特定的 [程式設定] 區段設定此緩和措施的應用程式,啟用緩和措施
- 預設為關閉 - 對於未在應用程式專屬的 程式設定 區段中設定此緩解措施的應用程式,系統會停用此緩解措施
- [使用預設值] - 根據 Windows 10 或 Windows 11 安裝所設定的預設設定,緩和措施會設定為啟用或停用;一律在每個緩和措施的 [使用預設值] 標籤旁指定預設值 ([開啟] 或 [關閉])
注意事項
變更某些設定時,您可能會看到使用者帳戶控制視窗。 輸入系統管理員認證以套用設定。
更改某些設定可能需要重新啟動裝置。
重複這些設定步驟,針對你想設定的所有系統層級緩解措施。
請移至 [程式設定] 區段,然後選擇要對其套用緩和措施的應用程式:
- 如果您要設定的應用程式已列出,請選取它,然後選取 [編輯]
- 如果未列出應用程式,請在清單頂端選取 [新增程式以自訂],然後選擇您要如何新增應用程式:
- 使用 [依程式名稱新增],以將緩和措施套用至任何具有該名稱的執行中程式。 您必須指定附有副檔名的檔案。 您可以輸入完整路徑,限制只有該位置中具有該名稱的應用程式才套用緩和措施。
- 使用 [選擇確切的檔案路徑] 以使用標準的 Windows 檔案總管檔案選擇器視窗來尋找並選取您想要的檔案。
選取應用程式之後,您就會看到可套用的所有緩和措施清單。 若要啟用緩和措施,請選取核取方塊,然後將滑桿變更為 [開啟]。 選取任何額外選項。 選擇 [稽核] 僅會在稽核模式中套用緩和措施。 如果您需要重新啟動程式或應用程式,或如果您需要重新啟動 Windows,您將收到通知。
對要設定的所有應用程式和緩和措施重複這些步驟。 當您設定完成時,選取 [套用]。
你現在可以 將漏洞防護設定匯出為 XML 檔案 ,或繼續設定應用程式專屬的緩解措施。
將設定匯出為 XML 檔案可讓您將設定從一個裝置複製到其他裝置上。
PowerShell 參考資料
您可以使用 Windows 安全性應用程式設定惡意探索保護,也可以使用 PowerShell Cmdlet。
無論您使用的是 PowerShell 還是 Windows 安全性,都將一律套用最近修改的組態設定。 因為最近修改的設定總是套用,如果你用應用程式設定緩解措施,再用 PowerShell 設定相同的緩解措施,應用程式會更新顯示你用 PowerShell 所做的變更。 如果您隨後使用應用程式再次變更緩和措施,則該變更將套用。
重要事項
任何透過群組原則部署到裝置的變更都將覆寫本機設定。 設定初始設定時,請使用不會套用群組原則設定的裝置,以確保變更不會被覆寫。
您可以使用 PowerShell 動詞 Get 或 Set 來搭配 Cmdlet ProcessMitigation 使用。 使用 Get 會列出裝置上已啟用之任何緩和措施的目前設定狀態 - 新增 -Name Cmdlet 與 app exe,以查看該應用程式的緩和措施:
Get-ProcessMitigation -Name processName.exe
重要事項
尚未設定的系統層級緩和措施會顯示 NOTSET 的狀態。
對於系統層級設定,NOTSET 表示已套用該緩和措施的預設設定。
對於應用層級設定,NOTSET 表示將套用該緩和措施的系統層級設定。
可以在 Windows 安全性中查看每個系統層級緩和措施的預設設定。
使用 Set 以下列格式設定每個緩和措施:
Set-ProcessMitigation -<scope> <app executable> -<action> <mitigation or options>,<mitigation or options>,<mitigation or options>
位置:
-
<範圍>:
-
-Name表示應將緩和措施套用至特定應用程式。 在此旗標之後指定應用程式的可執行檔。 -
-System表示應在系統層級套用緩和措施。
-
-
<動作場面>:
-
-Enable以啟用緩解措施 -
-Disable以停用緩解措施
-
-
<緩解措施>:
- 緩解措施的 cmdlet 如下方漏洞利用防護緩解措施 cmdlet 表 ,以及所有子選項 (前後加上空格) 中定義。 每個緩和措施會以逗號分隔。
例如,若要使用 ATL Thunk 模擬來啟用 [資料執行保護 (DEP)] 緩和措施,以及針對資料夾 C:\Apps\LOB\tests中名為 testing.exe 的可執行檔,以及防止該可執行檔建立子處理序,您可以使用下列命令:
Set-ProcessMitigation -Name c:\apps\lob\tests\testing.exe -Enable DEP, EmulateAtlThunks, DisallowChildProcessCreation
重要事項
以逗號分隔每個緩和措施選項。
若要在系統層級套用緩解措施,而非針對特定應用程式,請使用 -System 範圍。 例如,要啟用裝置上所有程序的 DEP,你會使用以下指令:
Set-Processmitigation -System -Enable DEP
若要停用緩和措施,您可以將 -Enable 取代為 -Disable。 不過,對於應用程式層級的緩和措施,這會強制僅對該應用程式停用緩和措施。
如果你需要將應用程式層級的緩解還原回系統預設,也必須包含 -Remove cmdlet。 以下範例移除了 test.exe 應用程式專屬的 DEP 覆寫,使其繼承系統預設:
Set-Processmitigation -Name test.exe -Remove -Disable DEP
您也可以將一些緩和措施設定為稽核模式。 與其使用 PowerShell 指令碼來進行緩解,不如使用下方漏洞防護緩解指令碼表中指定的審計模式指令碼。
例如,下列命令會為先前使用的 testing.exe 上的任意程式碼防護(ACG)緩解措施啟用僅稽核模式的監控,此模式會記錄原則違規事件,但不會封鎖執行:
Set-ProcessMitigation -Name c:\apps\lob\tests\testing.exe -Enable AuditDynamicCode
您可以使用相同的命令停用稽核模式,但將 -Enable 替換為 -Disable。
PowerShell 參考資料表
此資料表列出可用來設定各項緩解措施的 PowerShell cmdlet (以及相關的稽核模式cmdlet)。
| 緩和措施 | 適用於 | PowerShell Cmdlet | 稽核模式 Cmdlet |
|---|---|---|---|
| 控制流量防護 (CFG) | 系統與應用程式層級 | CFG,StrictCFG,SuppressExports | 稽核不可用 |
| 資料執行防護 (DEP) | 系統與應用程式層級 | DEP,EmulateAtlThunks | 稽核不可用 |
| 強制執行映像隨機化 (強制 ASLR) | 系統與應用程式層級 | ForceRelocateImages | 稽核不可用 |
| 隨機記憶體分配 (由下而上 ASLR) | 系統與應用程式層級 | BottomUp、HighEntropy | 稽核不可用 |
| 驗證例外狀況鏈結 (SEHOP) | 系統與應用程式層級 | SEHOP、SEHOPTelemetry | 稽核不可用 |
| 驗證堆積完整性 | 系統與應用程式層級 | TerminateOnError | 稽核不可用 |
| 任意程式碼防護 (ACG) | 僅應用程式層級 | DynamicCode | 稽核動態程式碼 |
| 封鎖低完整性映像 | 僅應用程式層級 | BlockLowLabel | 稽核影像載入 |
| 封鎖遠端映像 | 僅應用程式層級 | 封鎖遠端圖片 | 稽核不可用 |
| 封鎖不信任的字型 | 僅應用程式層級 | 停用非系統字型 | AuditFont, FontAuditOnly |
| 程式碼完整性防護 | 僅應用程式層級 | MicrosoftSignedOnly、AllowStoreSignedBinaries | AuditMicrosoftSigned, AuditStoreSigned |
| 停用擴充點 | 僅應用程式層級 | ExtensionPoint | 稽核不可用 |
| 停用 Win32k 系統呼叫 | 僅應用程式層級 | 停用 Win32k 系統呼叫 | AuditSystemCall |
| 不允許子處理序 | 僅應用程式層級 | 不允許建立子處理程序 | AuditChildProcess |
| 匯出位址篩選 (EAF) | 僅應用程式層級 | EnableExportAddressFilterPlus、EnableExportAddressFilter [1] | 稽核不可用 [2] |
| 匯入位址篩選 (IAF) | 僅應用程式層級 | EnableImportAddressFilter | 稽核不可用 [2] |
| 模擬執行 (SimExec) | 僅應用程式層級 | EnableRopSimExec | 稽核不可用 [2] |
| 驗證 API 呼叫 (CallerCheck) | 僅應用程式層級 | EnableRopCallerCheck | 稽核不可用 [2] |
| 確認控制代碼使用方式 | 僅應用程式層級 | StrictHandle | 稽核不可用 |
| 驗證映像相依性完整性 | 僅應用程式層級 | EnforceModuleDepencySigning | 稽核不可用 |
| 驗證堆疊完整性 (StackPivot) | 僅應用程式層級 | EnableRopStackPivot | 稽核不可用 [2] |
[1]:若要啟用 Export Address Filtering Plus(EAF+)並限制其僅限於特定 DLL 模組,請使用以下格式:
Set-ProcessMitigation -Name processName.exe -Enable EnableExportAddressFilterPlus -EAFModules dllName1.dll,dllName2.dll
[2]:無法透過 PowerShell Cmdlet 取得此緩解措施的稽核資訊。
自訂漏洞防護通知
如需在觸發規則並封鎖應用程式或檔案時自訂通知的更多資訊,請參閱 Windows 安全性。