內核修補程式保護

**核心修補程式保護**（英語：Kernel Patch Protection） ，俗名 PatchGuard，是 Microsoft Windows 64 位元（x64）版本中預防對核心進行修補的一種特性。該特性 2005 年在 Windows XP 與 Windows Server 2003 Service Pack 1 的 64 位元版本中首次推出。

「修補核心」是指對 Windows 作業系統的核心組件或核心進行本不支援的修改。這種修改沒有得到微軟的支援，並據微軟稱可能大幅降低系統的安全性、可靠性以及效能。儘管微軟並不推薦，但在 Windows 的 x86 版本上修補核心沒有受到限制；而在 Windows 的 x64 版本中，微軟選擇為此行為實施額外的保護和技術障礙。

因為 32 位元（x86）版本的 Windows 可以隨意修補核心，所以有眾多反病毒軟體開發人員使用此技術來實現反病毒等安全功能。在不再支援此技術的 x64 版本 Windows 上，防病毒廠商不得不重新設計其軟體以另尋他法。

不過，由於 Windows 核心的設計，核心修補程式保護並不能完全阻攔核心修補。因而這引發了對核心修補程式保護的批評，指責它是一種不完美的防護措施，對反病毒廠商造成的障礙超過了其帶來的好處，因為惡意軟體的作者可能找到方案來繞過該措施。儘管如此，核心修補程式保護仍可防止由合法軟體以不受支援方式進行的核心修補，這可能對系統的穩定性、可靠性和效能帶來負面結果。

## 技術概述

Windows 核心在設計上使裝置驅動程式有與作業系統核心相同的特權級別。預期的裝置驅動程式不會修改或修補核心中的核心系統結構。但在 Windows 的 x86 版本中，Windows 沒有強制要求此預期。因而，部分 x86 軟體（尤其是某些安全和反病毒軟體）在設計上採用載入驅動程式來修改核心記憶體結構的工作方式。

在 Windows 的 x64 版本中，微軟開始以核心驅動保護技術限制驅動程式可以修改與不能修改的結構。該技術定期檢查核心中受保護的系統結構以驗證其未被修改。如果檢測到修改，Windows 將觸發一個缺陷檢查並以藍白當機關閉系統（並可能重新啟動）。所觸發的錯誤檢查編碼為 0x109，名稱 CRITICAL\_STRUCTURE\_CORRUPTION。被禁止的修改包括：

* 對系統服務描述表進行修改或鉤子 (Hook)
* 修改系統呼叫表
* 修改中斷描述表
* 修改全域描述表
* 使用未由核心分配的核心堆疊
* 修改或修補核心本身、硬體抽象層（HAL）或網路驅動程式介面規範（NDIS）核心庫中包含的代碼

核心修補程式保護只防禦裝置驅動程式對核心進行的修改，而不會干涉對另一個驅動程式的修補。

此外，由於裝置驅動程式有與核心本身相同的特權級別，因此不可能充分防止驅動程式繞過核心修補程式保護並修補核心。不過，核心修補程式保護的確對核心修補構成了重大阻礙。隨著高度混淆的代碼和令人含混的符號名稱，核心修補程式保護默默地以此抵禦了繞過該技術的企圖。對該技術本身的定期更新也使對其繞過更加困難，已有繞過技術可能隨著更新而失效。自 2005 年建立以來，微軟已經發布過對該技術的兩個主要更新，每個更新都是為解決已知的針對此前版本的旁路技術。

## 優點

因為可能導致許多負面影響，核心修補從未得到微軟官方的支援。核心修補程式保護可以預防下列影響：

* 核心中的嚴重錯誤。
* 多個程式嘗試修補核心的相同部分導致的可靠性問題。
* 受損的系統安全性。
* Rootkit 可使用核心存取將其嵌入到作業系統，使其近乎不可能被刪除。

微軟在此技術的常見問題解答（FAQ）中進一步闡述：

> 由於修補程式使用未知、未經測試的代碼替換核心代碼，無法評估第三方代碼的品質或影響。微軟對線上崩潰分析（OCA）資料的檢查表明，系統崩潰經常由於惡意和非惡意的軟體修補核心所造成。
> 
> 

## 缺點

### 第三方軟體

部分電腦安全軟體（如邁克菲的 McAfee VirusScan 和賽門鐵克的諾頓防毒）在 x86 系統上通過修補核心來工作。卡巴斯基實驗室製作的反病毒軟體也已知廣泛使用核心代碼修補程式。這些程式由於核心修補程式保護的存在而無法在 Windows 64 位元版本上正常執行。就此情況，McAfee 曾呼籲微軟完全刪除 Windows 中的核心修補程式保護，或者對「可信公司」製作的軟體進行例外處理。

賽門鐵克的企業防病毒軟體和 Norton 2010 左右在有核心修補程式保護的 Windows x64 版本上能正常工作，但對零日惡意軟體的防護能力有所降低。ESET、Trend Micro、Grisoft AVG、avast!、Avira Anti-Vir 和 Sophos 等公司製作的反病毒軟體在預設組態下不修補核心，但當啟用如「進階行程保護」、「阻止未經授權的行程終止」等功能時可能會修補核心。

微軟不曾添加例外來削弱「核心修補程式保護」的影響範圍，不過有不時放寬其限制，例如為了 Hypervisor 虛擬化軟體的正常執行。另外，微軟與第三方公司合作，新增了應用程式介面來幫助安全軟體執行所需任務，以免除修補核心的需要。新介面在 Windows Vista Service Pack 1 中被引入。

### 弱點

由於 Windows 核心的設計，核心修補程式保護並不能完全阻止對核心的修補程式。這導致安全軟體提供商邁克菲和賽門鐵克稱核心修補程式保護是一個不完美的防禦，給安全軟體廠商帶來的問題超過了其益處，因為惡意軟體可以比較容易的找出核心修補程式保護的繞過方法，而第三方安全軟體必須在其限制下設計和運作。

2006 年 1 月，化名「skape」和「Skywing」的安全研究員發布的一份報告介紹了一些理論上可以繞過核心修補程式保護的方法。Skywing 於 2007 年 1 月繼續發布了有關繞過「核心修補程式保護」第 2 版的第二份報告，並於 2007 年 9 月發布有關「核心修補程式保護」第 3 版的第三份報告。2006 年 10 月，安全公司 Authentium 也開發了一種可繞過該技術的有效方法。

雖說如此，微軟表示作為安全回應中心標準流程的一部分，在致力於消除任何使核心修補程式保護被繞過的缺陷。微軟已發布過對該技術的兩次主要更新，每次都是為解決已知的針對此前版本的繞過技術。

### 反壟斷行為

2006 年，歐盟執委會對核心修補程式保護表示擔憂，稱它是反競爭舉措。不過，微軟自己的反病毒產品 Windows Live OneCare 沒有在核心修補程式保護上有特別例外，而是始終在使用其他方法提供病毒防護服務。但由於其他原因，Windows Live OneCare 的 x64 版本在 2007 年 11 月 15 日之前不可用。

## 參考資料

## 外部連結

* The Truth About PatchGuard: Why Symantec Keeps Complaining
* An Introduction to Kernel Patch Protection
* Microsoft executive clarifies recent market confusion about Windows Vista Security
* Kernel Patch Protection: Frequently Asked Questions
* Windows Vista x64 Security – Pt 2 – Patchguard

**Uninformed.org 文章：**

* Bypassing PatchGuard on Windows x64
* Subverting PatchGuard Version 2
* PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3

**繞過方法：**

* KPP Destroyer (including source code) - 2015 （頁面存檔備份，存於網際網路檔案館）
* A working driver to bypass PatchGuard 3 (including source code) - 2008 （頁面存檔備份，存於網際網路檔案館）
* Bypassing PatchGuard with a hex editor - 2009

**微軟安全通告：**

* June 13, 2006 update to Kernel Patch Protection
* August 14, 2007 update to Kernel Patch Protection