Kernel Patch Protection (KPP), informally known as PatchGuard, is a feature of 64-bit (x64) editions of Microsoft Windows that prevents patching the kernel. It was first introduced in 2005 with the x64 editions of Windows XP and Windows Server 2003 Service Pack 1.

"Patching the kernel" refers to unsupported modification of the central component or kernel of the Windows operating system. Such modification has never been supported by Microsoft because, according to Microsoft, it can greatly reduce system security, reliability, and performance. Although Microsoft does not recommend it, it is possible to patch the kernel on x86 editions of Windows; however, with the x64 editions of Windows, Microsoft chose to implement additional protection and technical barriers to kernel patching.

Since patching the kernel is possible in 32-bit (x86) editions of Windows, several antivirus software developers use kernel patching to implement antivirus and other security services. These techniques will not work on computers running x64 editions of Windows. Because of this, Kernel Patch Protection resulted in antivirus makers having to redesign their software without using kernel patching techniques.

However, because of the design of the Windows kernel, Kernel Patch Protection cannot completely prevent kernel patching. This has led to criticism that since KPP is an imperfect defense, the problems caused to antivirus vendors outweigh the benefits because authors of malicious software will simply find ways around its defenses. Nevertheless, Kernel Patch Protection can still prevent problems of system stability, reliability, and performance caused by legitimate software patching the kernel in unsupported ways.

Technical overview
The Windows kernel is designed so that device drivers have the same privilege level as the kernel itself. Device drivers are expected to not modify or patch core system structures within the kernel. However, in x86 editions of Windows, Windows does not enforce this expectation. As a result, some x86 software, notably certain security and antivirus programs, were designed to perform needed tasks through loading drivers that modify core kernel structures.

In x64 editions of Windows, Microsoft began to enforce restrictions on what structures drivers can and cannot modify. Kernel Patch Protection is the technology that enforces these restrictions. It works by periodically checking to make sure that protected system structures in the kernel have not been modified. If a modification is detected, then Windows will initiate a bug check and shut down the system, with a blue screen and/or reboot. The corresponding bugcheck number is 0x109, the bugcheck code is CRITICAL_STRUCTURE_CORRUPTION.
Prohibited modifications include:
 Modifying system service descriptor tables
 Modifying the interrupt descriptor table
 Modifying the global descriptor table
 Using kernel stacks not allocated by the kernel
 Modifying or patching code contained within the kernel itself, or the HAL or NDIS kernel libraries

Kernel Patch Protection only defends against device drivers modifying the kernel. It does not offer any protection against one device driver patching another.

Ultimately, since device drivers have the same privilege level as the kernel itself, it is impossible to completely prevent drivers from bypassing Kernel Patch Protection and then patching the kernel. KPP does however present a significant obstacle to successful kernel patching. With highly obfuscated code and misleading symbol names, KPP employs security through obscurity to hinder attempts to bypass it. Periodic updates to KPP also make it a "moving target", as bypass techniques that may work for a while are likely to break with the next update. Since its creation in 2005, Microsoft has so far released two major updates to KPP, each designed to break known bypass techniques in previous versions.

Advantages
Patching the kernel has never been supported by Microsoft because it can cause a number of negative effects. Kernel Patch Protection protects against these negative effects, which include:
 Serious errors in the kernel.
 Reliability issues resulting from multiple programs attempting to patch the same parts of the kernel.
 Compromised system security.
 Rootkits can use kernel access to embed themselves in an operating system, becoming nearly impossible to remove.

Microsoft's Kernel Patch Protection FAQ further explains:

Criticisms

Third-party applications
Some computer security software, such as McAfee's McAfee VirusScan and Symantec's Norton AntiVirus, worked by patching the kernel on x86 systems.  Anti-virus software authored by Kaspersky Lab has been known to make extensive use of kernel code patching on x86 editions of Windows. This kind of antivirus software will not work on computers running x64 editions of Windows because of Kernel Patch Protection. Because of this, McAfee called for Microsoft to either remove KPP from Windows entirely or make exceptions for software made by "trusted companies" such as themselves.

Symantec's corporate antivirus software and Norton 2010 range and beyond worked on x64 editions of Windows despite KPP's restrictions, although with less ability to provide protection against zero-day malware.
Antivirus software made by competitors ESET, Trend Micro, Grisoft AVG, avast!, Avira Anti-Vir and Sophos do not patch the kernel in default configurations, but may patch the kernel when features such as "advanced process protection" or "prevent unauthorized termination of processes" are enabled.

Microsoft does not weaken Kernel Patch Protection by making exceptions to it, though Microsoft has been known to relax its restrictions from time to time, such as for the benefit of hypervisor virtualization software. Instead, Microsoft worked with third-party companies to create new Application Programming Interfaces that help security software perform needed tasks without patching the kernel. These new interfaces were included in Windows Vista Service Pack 1.

Weaknesses
Because of the design of the Windows kernel, Kernel Patch Protection cannot completely prevent kernel patching. This led the computer security providers McAfee and Symantec to say that since KPP is an imperfect defense, the problems caused to security providers outweigh the benefits, because malicious software will simply find ways around KPP's defenses and third-party security software will have less freedom of action to defend the system.

In January 2006, security researchers known by the pseudonyms "skape" and "Skywing" published a report that describes methods, some theoretical, through which Kernel Patch Protection might be bypassed. Skywing went on to publish a second report in January 2007 on bypassing KPP version 2, and a third report in September 2007 on KPP version 3. Also, in October 2006 security company Authentium developed a working method to bypass KPP.

Nevertheless, Microsoft has stated that they are committed to remove any flaws that allow KPP to be bypassed as part of its standard Security Response Center process. In keeping with this statement, Microsoft has so far released two major updates to KPP, each designed to break known bypass techniques in previous versions.

Antitrust behavior
In 2006, the European Commission expressed concern over Kernel Patch Protection, saying it was anticompetitive. However, Microsoft's own antivirus product, Windows Live OneCare, had no special exception to KPP. Instead, Windows Live OneCare used (and had always used) methods other than patching the kernel to provide virus protection services. Still, for other reasons a x64 edition of Windows Live OneCare was not available until November 15, 2007.

References

External links
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 articles:
Bypassing PatchGuard on Windows x64
Subverting PatchGuard Version 2
PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3

Working bypass approaches
KPP Destroyer (including source code) - 2015
A working driver to bypass PatchGuard 3 (including source code) - 2008
Bypassing PatchGuard with a hex editor - 2009

Microsoft security advisories:
June 13, 2006 update to Kernel Patch Protection
August 14, 2007 update to Kernel Patch Protection

Microsoft Windows security technology
Windows NT kernel
커널 패치 보호(KPP : Kernel Patch Protection)는 비공식적으로 패치가드(PatchGuard)라고도 불리며 64비트 마이크로소프트 윈도우에서 커널을 패치하는 것을 막는 기능이다. 이것은 2005년 윈도우 XP x64 버전과 윈도우 서버 2003 서비스 팩 1에서 처음 도입되었다.

"커널 패치"는 윈도우 운영 체제의 커널 또는 중앙 요소에 대한 지원되지 않은 수정을 의미한다. 마이크로소프트에 따르면, 이러한 수정은 시스템 보안, 신뢰성 및 성능에 심각한 감소를 유발할 수 있기 때문에 지금까지 한 번도 지원된 적이 없다. 비록 마이크로소프트가 이것을 지원하지 않지만 윈도우의 x86 에디션에서는 커널을 패치하는 것이 기술적으로 가능하다; 그러나 마이크로소프트는 윈도우 x64 버전에서 이 추가적인 보호를 구현하였고 커널 패치에 대한 기술적으로 막고 있다.

커널을 패치하는 것이 32비트에서는 기술적으로 허용되었기 때문에 몇몇 안티바이러스 개발자들은 보안 서비스를 제공하기 위해 안티바이러스를 구현할 때 커널 패치를 사용하였다. 이러한 종류의 안티바이러스 소프트웨어는 64비트 버전의 윈도우에서는 돌아갈 수 없다. 이 때문에 커널 패치 보호는 안티바이러스 개발자가 자신들의 소프트웨어를 재설계하도록 강제하였다는 비판을 받는다.

또한 윈도우 커널의 디자인 때문에 커널 패치 보호는 커널 패치를 완벽하게 막을 수 없다. 이 때문에 KPP는 불완전한 방어라는 비판이 있고, 이 문제는 악성코드 개발자가 간단하게 이 방어를 우회하는 방법을 찾을 수 있기 때문에 안티바이러스 개발자 입장에서는 이 문제가 장점보다 크다고 여길 수 있다. 그럼에도 불구하고 커널 패치는 지원되지 않은 방식으로 커널을 패치하는 합법적인 소프트웨어에 의해 유발되는 시스템 안정성, 신뢰성 및 성능 문제를 막을 수 있다.

기술적 개요 
윈도우 커널은 디바이스 드라이버가 커널 자신과 동등한 권한 수준을 갖도록 설계되었다. 그래서 디바이스 드라이버들은 커널 내부에서 중요 시스템 구조를 수정하거나 패치할 수 없어야 한다. x86 버전에서는 드라이버가 커널을 패치해서는 안된다는 이러한 의무를 강요하지 않았다. 하지만 이로 인해 많은 안티바이러스 프로그램들이 코어 커널 구조를 수정하는 드라이버를 로딩함으로써 필요한 작업을 수행하도록 설계되었다.

윈도우의 x64 버전에서 마이크로소프트는 드라이버가 어떤 구조를 수정할 수 있는지 또는 수정할 수 없는지에 대한 제한을 강요하였다. 커널 패치 보호는 기술적으로 이러한 제한을 강화한다. 이것은 커널이 수정되었는지 주기적으로 보호받는 시스템 구조를 검사함으로써 동작한다. 만약 수정이 감지되었다면 윈도우는 먼저 버그를 검사하고 이후에 블루 스크린 또는 리부팅과 함께 시스템을 종료한다. 상응하는 버그체크 번호는 0x109이며 버그체크 코드는 CRITICAL_STRUCTURE_CORRUPTION이다. 금지되는 수정은 다음과 같다:
 시스템 호출 테이블 수정
 인터럽트 서술자 테이블 수정
 전역 서술자 테이블 수정
 커널에서 할당되지 않은 커널 스택 사용
 커널 자신, 또는 HAL이나 NDIS 커널 라이브러리 내부에서의 수정 또는 코드 패치
커널 패치 보호는 단지 커널을 수정하는 디바이스 드라이버에 대한 방어라는 것이 중요하다. 이것은 디바이스 드라이버가 다른 디바이스 드라이버를 패치하는 것을 보호하지 않는다.

궁극적으로 디바이스 드라이버가 커널 자신과 같은 권한 수준을 갖기 때문에 드라이버가 커널 패치 보호를 우회하고 커널을 패치하는 것을 완벽하게 막는 것은 불가능하다. KPP는 그러나 성공적인 커널 패치를 막는 확연한 장애물이 되어준다. 심하게 난독화된 코드와 헷갈리는 심볼 이름과 함께 KPP는 이것을 우회하려는 시도를 막는다. 또한 KPP의 주기적인 업데이트로 인해 우회 기법도 다음 업데이트 까지의 한시적인 기법이 되어버린다. 2005년 이후로 마이크로소프트는 KPP에 대한 두 번의 주요 업데이트를 하였고 이것들은 이전 버전에서 알려진 우회 기법들을 막았다.

단점 
 API 후킹 방지.
 커널 수정을 사용하는 제품들은 최근 버전의 윈도우에서 동작하는 방식을 바꾸어야 하며, 이로 인해 이식 문제가 발생할 수 있다.

장점 
커널 패치는 수많은 악영향이 있기 때문에 마이크로소프트에서 한 번도 지원된 적이 없다. 커널 패치 보호는 다음과 같은 이러한 악영향에서 보호해 준다:
 커널에서의 심각한 오류로 인한 블루스크린.
 여러 프로그램에서 커널의 같은 부분을 패치하려고 할 때 발생할 수 있는 신뢰성 문제.
 시스템 보안 손상.
 루트킷이 드라이버로서 삽입되어 커널 제어를 가짐으로써 제거하기 거의 불가능해 진다.
마이크로소프트의 커널 패치 보호 FAQ는 추가적으로 다음과 같이 설명하고 있다:

각주

외부 링크 
 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 articles:
 Bypassing PatchGuard on Windows x64
 Subverting PatchGuard Version 2
 PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3
Working bypass approaches
 KPP Destroyer (including source code) - 2015
 A working driver to bypass PatchGuard 3 (including source code) - 2008
 Bypassing PatchGuard with a hex editor - 2009
Microsoft security advisories:
 June 13, 2006 update to Kernel Patch Protection
 August 14, 2007 update to Kernel Patch Protection

윈도우 NT 커널