内核补丁保护

内核补丁保护（） ，俗名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）中进一步阐述：

缺点

第三方软件 
部分计算机安全软件（如迈克菲的和赛门铁克的諾頓防毒）在x86系统上通过修补内核来工作。卡巴斯基實驗室制作的反病毒软件也已知广泛使用内核代码修补程序。这些程序由于内核补丁保护的存在而无法在Windows 64位版本上正常运行。就此情况，McAfee曾呼吁微软完全删除Windows中的内核补丁保护，或者对“可信公司”制作的软件进行例外处理。

赛门铁克的企业防病毒软件和Norton 2010左右在有内核补丁保护的Windows x64版本上能正常工作，但对零日恶意软件的防护能力有所降低。ESET、Trend Micro、 AVG、avast!、Avira Anti-Vir和等公司制作的反病毒软件在默认配置下不修补内核，但当启用如“高级进程保护”、“阻止未经授权的进程终止”等功能时可能会修补内核。

微软不曾添加例外来削弱“内核补丁保护”的影响范围，不过有不时放宽其限制，例如为了Hypervisor虚拟化软件的正常运行。另外，微软与第三方公司合作，新增了应用程序接口来帮助安全软件执行所需任务，以免除修补内核的需要。新接口在Windows Vista Service Pack 1中被引入。

弱点
由于Windows内核的设计，内核补丁保护并不能完全阻止对内核的补丁。这导致安全软件提供商迈克菲和赛门铁克称内核补丁保护是一个不完美的防御，给安全软件厂商带来的问题超过了其益处，因为恶意软件可以比较容易的找出内核补丁保护的绕过方法，而第三方安全软件必须在其限制下设计和运作。

2006年1月，化名“skape”和“Skywing”的安全研究员发布的一份报告介绍了一些理论上可以绕过内核补丁保护的方法。Skywing于2007年1月继续发布了有关绕过“内核补丁保护”第2版的第二份报告，并于2007年9月发布有关“内核补丁保护”第3版的第三份报告。2006年10月，安全公司也开发了一种可绕过该技术的有效方法。

虽说如此，微软表示作为安全响应中心标准流程的一部分，在致力于消除任何使内核补丁保护被绕过的缺陷。微软已发布过对该技术的两次主要更新，每次都是为解决已知的针对此前版本的绕过技术。

反垄断行为 
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

Microsoft Windows安全技术
Windows NT