内核补丁保护

内核补丁保护（英語：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将触发一个缺陷检查（英语：bug check）并以蓝屏死机关闭系统（并可能重启）。所触发的错误检查编码为0x109，名称CRITICAL_STRUCTURE_CORRUPTION。被禁止的修改包括： 對系統服務描述表（英语：System Service Descriptor Table）進行修改或鉤子(Hook) 修改系统调用表 修改中断描述表（英语：Interrupt descriptor table） 修改全局描述表（英语：Global descriptor table） 使用未由内核分配的内核堆栈 修改或修补内核本身、硬體抽象層（HAL）或網絡驅動程式介面規範（NDIS）内核库中包含的代码 内核补丁保护只防御设备驱动程序对内核进行的修改，而不会干涉对另一个驱动程序的修补。 此外，由于设备驱动程序有与内核本身相同的特权级别，因此不可能充分防止驱动程序绕过内核补丁保护并修补内核。不过，内核补丁保护的确对内核修补构成了重大阻碍。随着高度混淆的代码和令人含混的符号名称，内核补丁保护默默地以此抵御了绕过该技术的企图。对该技术本身的定期更新也使对其绕过更加困难，已有绕过技术可能随着更新而失效。自2005年创建以来，微软已经发布过对该技术的两个主要更新，每个更新都是为解决已知的针对此前版本的旁路技术。 因为可能导致许多负面影响，内核修补从未得到微软官方的支持。内核补丁保护可以预防下列影响： 内核中的严重错误。 多个程序尝试修补内核的相同部分导致的可靠性问题。 受损的系统安全性。 Rootkit可使用内核访问将其嵌入到操作系统，使其近乎不可能被删除。 微软在此技术的常见问题解答（FAQ）中进一步阐述： 由于修补程序使用未知、未经测试的代码替换内核代码，无法评估第三方代码的质量或影响。微软对在线崩溃分析（OCA）数据的检查表明，系统崩溃经常由于恶意和非恶意的软件修补内核所造成。 ——Kernel Patch Protection: Frequently Asked Questions. 22 January 2007 [22 February 2007]. （原始内容存档于2007年3月4日）.  部分计算机安全软件（如迈克菲的McAfee VirusScan（英语：McAfee VirusScan）和赛门铁克的諾頓防毒）在x86系统上通过修补内核来工作。[來源請求]卡巴斯基實驗室制作的反病毒软件也已知广泛使用内核代码修补程序。这些程序由于内核补丁保护的存在而无法在Windows 64位版本上正常运行。就此情况，McAfee曾呼吁微软完全删除Windows中的内核补丁保护，或者对“可信公司”制作的软件进行例外处理。 赛门铁克的企业防病毒软件和Norton 2010左右在有内核补丁保护的Windows x64版本上能正常工作，但对零日恶意软件的防护能力有所降低。ESET、Trend Micro、Grisoft（英语：Grisoft） AVG、avast!、Avira Anti-Vir和Sophos（英语：Sophos）等公司制作的反病毒软件在默认配置下不修补内核，但当启用如“高级进程保护”、“阻止未经授权的进程终止”等功能时可能会修补内核。 微软不曾添加例外来削弱“内核补丁保护”的影响范围，不过有不时放宽其限制，例如为了Hypervisor虚拟化软件的正常运行。另外，微软与第三方公司合作，新增了应用程序接口来帮助安全软件执行所需任务，以免除修补内核的需要。新接口在Windows Vista Service Pack 1中被引入。 由于Windows内核的设计，内核补丁保护并不能完全阻止对内核的补丁。这导致安全软件提供商迈克菲和赛门铁克称内核补丁保护是一个不完美的防御，给安全软件厂商带来的问题超过了其益处，因为恶意软件可以比较容易的找出内核补丁保护的绕过方法，而第三方安全软件必须在其限制下设计和运作。 2006年1月，化名“skape”和“Skywing”的安全研究员发布的一份报告介绍了一些理论上可以绕过内核补丁保护的方法。Skywing于2007年1月继续发布了有关绕过“内核补丁保护”第2版的第二份报告，并于2007年9月发布有关“内核补丁保护”第3版的第三份报告。2006年10月，安全公司Authentium（英语：Authentium）也开发了一种可绕过该技术的有效方法。 虽说如此，微软表示作为安全响应中心标准流程的一部分，在致力于消除任何使内核补丁保护被绕过的缺陷。微软已发布过对该技术的两次主要更新，每次都是为解决已知的针对此前版本的绕过技术。 2006年，欧盟委员会对内核补丁保护表示担忧，称它是反竞争举措。不过，微软自己的反病毒产品Windows Live OneCare没有在内核补丁保护上有特别例外，而是始终在使用其他方法提供病毒防护服务。但由于其他原因，Windows Live OneCare的x64版本在2007年11月15日之前不可用。 Kernel Patch Protection: Frequently Asked Questions. Microsoft. 22 January 2007 [30 July 2007]. （原始内容存档于2007-03-04）.  Skywing. Introduction. PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3. Uninformed. September 2007 [20 September 2007]. （原始内容存档于2016-03-03）.  Schofield, Jack. Antivirus vendors raise threats over Vista in Europe. The Guardian. 28 September 2006 [20 September 2007]. （原始内容存档于2019-05-12）.  "This has never been supported and has never been endorsed by us. It introduces insecurity, instability, and performance issues, and every time we change something in the kernel, their product breaks." —Ben Fathi, corporate vice president of Microsoft's security technology unit Patching Policy for x64-Based Systems. Microsoft. 22 January 2007 [20 September 2007]. （原始内容存档于2010-12-16）.  skape. System Images. Bypassing PatchGuard on Windows x64. Uninformed. December 2005 [21 September 2007]. （原始内容存档于2016-08-17）.  Skywing. Conclusion. Subverting PatchGuard Version 2. Uninformed. January 2007 [21 September 2007]. （原始内容存档于2016-03-04）.  skape; Skywing. Introduction. Bypassing PatchGuard on Windows x64. Uninformed. December 2005 [20 September 2007]. （原始内容存档于2016-08-17）.  Skywing. Misleading Symbol Names. Subverting PatchGuard Version 2. Uninformed. December 2006 [20 September 2007]. （原始内容存档于2016-03-03）.  Microsoft. Update to Improve Kernel Patch Protection. Microsoft Security Advisory (914784). Microsoft. June 2006 [21 September 2007]. （原始内容存档于2011-06-06）.  Microsoft. Update to Improve Kernel Patch Protection. Microsoft Security Advisory (932596). Microsoft. August 2007 [21 September 2007]. （原始内容存档于2011-08-06）.  Field, Scott. An Introduction to Kernel Patch Protection. Windows Vista Security blog. Microsoft. 11 August 2006 [30 November 2006]. （原始内容存档于2010-01-24）.  Allchin, Jim. Microsoft executive clarifies recent market confusion about Windows Vista Security. Microsoft. 20 October 2006 [30 November 2006]. （原始内容存档于2007-02-05）.  Skywing. Patching non-exported, non-system-service kernel functions. What Were They Thinking? Anti-Virus Software Gone Wrong. Uninformed. June 2006 [21 September 2007]. （原始内容存档于2016-03-04）.  Montalbano, Elizabeth. McAfee Cries Foul over Vista Security Features. PC World（英语：PC World (magazine)）. 6 October 2006 [30 November 2006]. （原始内容存档于2007年4月5日）.  Samenuk, George. Microsoft Increasing Security Risk with Vista. McAfee. 28 September 2006 [8 July 2013]. （原始内容存档于2019-05-15）.  Symantec AntiVirus Corporate Edition: System Requirements. Symantec. 2006 [30 November 2006]. （原始内容存档于2007年5月15日）.  Symantec Internet Security product page. Symantec. 2011 [26 January 2011]. （原始内容存档于2020-12-17）.  High-performance threat protection for the next-generation of 64-bit computers. ESET. 2008-11-20 [2018-05-04]. （原始内容存档于2008-11-20）.  Minimum System Requirements. Trend Micro USA. [5 October 2007]. （原始内容存档于2012-02-08）.  AVG Anti-Virus and Internet Security - Supported Platforms. Grisoft（英语：Grisoft）. [5 October 2007]. （原始内容存档于2007-08-27）.  Jaques, Robert. Symantec and McAfee 'should have prepared better' for Vista. vnunet.com. 23 October 2006 [30 November 2006]. （原始内容存档于2007-09-27）.  McMillan, Robert. Researcher: PatchGuard hotfix stitches up benefit to Microsoft. InfoWorld（英语：InfoWorld）. 19 January 2007 [21 September 2007]. （原始内容存档于2007-01-24）.  Notable Changes in Windows Vista Service Pack 1. 微软. 2008 [20 March 2008]. （原始内容存档于2008-05-03）.  Gewirtz, David. The great Windows Vista antivirus war. OutlookPower. 2006 [8 July 2013]. （原始内容存档于2013年2月1日）.  "The system's already vulnerable. People have already hacked into PatchGuard. System is already vulnerable no matter what. PatchGuard has a chilling effect on innovation. The bad guys are always going to innovate. Microsoft should not tie the hands of the security industry so they can't innovate. We're concerned about out-innovating the bad guys out there." —Cris Paden, Manager on the Corporate Communication Team at Symantec skape; Skywing. Bypassing PatchGuard on Windows x64. Uninformed. 1 December 2005 [2 June 2008]. （原始内容存档于2017-08-01）.  Skywing. Subverting PatchGuard Version 2. Uninformed. December 2006 [2 June 2008]. （原始内容存档于2016-12-06）.  Skywing. PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3. Uninformed. September 2007 [2 June 2008]. （原始内容存档于2017-12-06）.  Hines, Matt. Microsoft Decries Vista PatchGuard Hack. eWEEK（英语：eWEEK）. 25 October 2006 [2 April 2016].  Gewirtz, David. The great Windows Vista antivirus war. OutlookPower. 2006 [30 November 2006]. （原始内容存档于2007-09-04）.  Espiner, Tom. EC Vista antitrust concerns fleshed out. silicon.com. 25 October 2006 [30 November 2006]. （原始内容存档于2007年2月2日）.  Jones, Jeff. Windows Vista x64 Security – Pt 2 – Patchguard. Jeff Jones Security Blog. Microsoft. 12 August 2006 [11 March 2007]. （原始内容存档于2008-12-09）.  White, Nick. Upgrade to Next Version of Windows Live OneCare Announced for All Subscribers. Windows Vista Team Blog. Microsoft. 14 November 2007 [14 November 2007]. （原始内容存档于2008-02-01）.  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