{{위키데이터 속성 추적}}
[[파일:Kernel_Layout.svg|섬네일|200x200픽셀|애플리케이션 소프트웨어와 컴퓨터의 하드웨어를 연결하는 [[커널 (컴퓨팅)|커널]].]]
'''커널 패치 보호'''(KPP : Kernel Patch Protection)는 비공식적으로 '''패치가드'''(PatchGuard)라고도 불리며 [[64비트]] [[마이크로소프트 윈도우]]에서 [[커널 (컴퓨팅)|커널]]을 패치하는 것을 막는 기능이다. 이것은 2005년 [[윈도우 XP]] x64 버전과 [[윈도우 서버 2003]] 서비스 팩 1에서 처음 도입되었다.<ref name="KPP FAQ">{{웹 인용
 |url          = http://www.microsoft.com/whdc/driver/kernel/64bitpatch_FAQ.mspx
 |title        = Kernel Patch Protection: Frequently Asked Questions
 |publisher    = [[마이크로소프트]]
 |date         = 22 January 2007
 |accessdate   = 30 July 2007
 |보존url    = https://web.archive.org/web/20070304110141/http://www.microsoft.com/whdc/driver/kernel/64bitpatch_FAQ.mspx#
 |보존날짜 = 2007-03-04
 |url-status = dead
}}</ref>

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

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

또한 윈도우 커널의 디자인 때문에 커널 패치 보호는 커널 패치를 완벽하게 막을 수 없다.<ref name="skape" /> 이 때문에 KPP는 불완전한 방어라는 비판이 있고, 이 문제는 악성코드 개발자가 간단하게 이 방어를 우회하는 방법을 찾을 수 있기 때문에 안티바이러스 개발자 입장에서는 이 문제가 장점보다 크다고 여길 수 있다.<ref name="Samenuk">{{웹 인용
 |url=http://news.softpedia.com/news/Microsoft-Increasing-Security-Risk-with-Vista-37014.shtml
 |title=Microsoft Increasing Security Risk with Vista
 |last=Samenuk
 |first=George
 |publisher=[[맥아피]]
 |date=28 September 2006
 |accessdate=8 July 2013
}}</ref><ref name="Gewirtz">{{뉴스 인용
 |last         = Gewirtz
 |first        = David
 |title        = The great Windows Vista antivirus war
 |url          = http://zatz.com/outlookpower/article/the-great-windows-vista-antivirus-war/
 |publisher    = OutlookPower
 |year         = 2006
 |accessdate   = 8 July 2013
 |보존url    = https://web.archive.org/web/20130201170559/http://zatz.com/outlookpower/article/the-great-windows-vista-antivirus-war/
 |보존날짜 = 2013년 2월 1일
 |url-status = dead
}}</ref> 그럼에도 불구하고 커널 패치는 지원되지 않은 방식으로 커널을 패치하는 합법적인 소프트웨어에 의해 유발되는 시스템 안정성, 신뢰성 및 성능 문제를 막을 수 있다.

== 기술적 개요 ==
윈도우 커널은 디바이스 드라이버가 커널 자신과 동등한 권한 수준을 갖도록 설계되었다.<ref name="Introduction">{{웹 인용
 |url=http://uninformed.org/index.cgi?v=8&a=5&p=2
 |author=Skywing
 |title=Introduction
 |work=PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3
 |publisher=Uninformed
 |date=September 2007
 |accessdate=20 September 2007
 |보존url=https://web.archive.org/web/20160303171005/http://uninformed.org/index.cgi?v=8&a=5&p=2
 |보존날짜=2016-03-03
 |url-status=dead
 }}</ref> 그래서 디바이스 드라이버들은 커널 내부에서 중요 시스템 구조를 수정하거나 패치할 수 없어야 한다.<ref name="KPP FAQ" /> x86 버전에서는 드라이버가 커널을 패치해서는 안된다는 이러한 의무를 강요하지 않았다. 하지만 이로 인해 많은 안티바이러스 프로그램들이 코어 커널 구조를 수정하는 드라이버를 로딩함으로써 필요한 작업을 수행하도록 설계되었다.<ref name="Introduction" /><ref name="Fathi">{{웹 인용
 |url=https://www.theguardian.com/technology/2006/sep/28/viruses.security
 |title=Antivirus vendors raise threats over Vista in Europe
 |last=Schofield
 |first=Jack|publisher=[[가디언]]
 |date=28 September 2006
 |accessdate=20 September 2007
}}</ref>

윈도우의 x64 버전에서 마이크로소프트는 드라이버가 어떤 구조를 수정할 수 있는지 또는 수정할 수 없는지에 대한 제한을 강요하였다. 커널 패치 보호는 기술적으로 이러한 제한을 강화한다. 이것은 커널이 수정되었는지 주기적으로 보호받는 시스템 구조를 검사함으로써 동작한다. 만약 수정이 감지되었다면 윈도우는 먼저 버그를 검사하고 이후에 블루 스크린 또는 리부팅과 함께 시스템을 종료한다.<ref name="Introduction" /><ref name="Patching Policy">{{웹 인용
 |url          = http://www.microsoft.com/whdc/driver/kernel/64bitpatching.mspx
 |title        = Patching Policy for x64-Based Systems
 |publisher    = [[마이크로소프트]]
 |date         = 22 January 2007
 |accessdate   = 20 September 2007
 |보존url    = https://web.archive.org/web/20101216023419/http://www.microsoft.com/whdc/driver/kernel/64bitPatching.mspx#
 |보존날짜 = 2010-12-16
 |url-status = dead
}}</ref> 상응하는 버그체크 번호는 0x109이며 버그체크 코드는 CRITICAL_STRUCTURE_CORRUPTION이다. 금지되는 수정은 다음과 같다:<ref name="Patching Policy" />
* [[시스템 호출]] 테이블 수정
* [[인터럽트 서술자 테이블]] 수정
* 전역 서술자 테이블 수정
* 커널에서 할당되지 않은 커널 스택 사용
* 커널 자신,<ref name="Patching Policy" /> 또는 [[하드웨어 추상화|HAL]]이나 NDIS 커널 라이브러리 내부에서의 수정 또는 코드 패치<ref>{{웹 인용
 |url=http://uninformed.org/index.cgi?v=3&a=3&p=7
 |title=System Images
 |work=Bypassing PatchGuard on Windows x64
 |author=skape
 |author2=Skywing
 |publisher=Uninformed
 |date=December 2005
 |accessdate=21 September 2007
 |보존url=https://web.archive.org/web/20160817074740/http://uninformed.org/index.cgi?v=3&a=3&p=7
 |보존날짜=2016-08-17
 |url-status=dead
 }}</ref>
커널 패치 보호는 단지 커널을 수정하는 디바이스 드라이버에 대한 방어라는 것이 중요하다. 이것은 디바이스 드라이버가 다른 디바이스 드라이버를 패치하는 것을 보호하지 않는다.<ref name="Conclusion">{{웹 인용
 |url=http://uninformed.org/index.cgi?v=6&a=1&p=25
 |author=Skywing
 |title=Conclusion
 |work=Subverting PatchGuard Version 2
 |publisher=Uninformed
 |date=January 2007
 |accessdate=21 September 2007
 |보존url=https://web.archive.org/web/20160304025651/http://uninformed.org/index.cgi?v=6&a=1&p=25
 |보존날짜=2016-03-04
 |url-status=dead
 }}</ref>

궁극적으로 디바이스 드라이버가 커널 자신과 같은 권한 수준을 갖기 때문에 드라이버가 커널 패치 보호를 우회하고 커널을 패치하는 것을 완벽하게 막는 것은 불가능하다.<ref name="skape">{{웹 인용
 |url=http://uninformed.org/index.cgi?v=3&a=3&p=3
 |title=Introduction
 |work=Bypassing PatchGuard on Windows x64
 |author=skape
 |author2=Skywing
 |publisher=Uninformed
 |date=December 2005
 |accessdate=20 September 2007
 |보존url=https://web.archive.org/web/20160817134554/http://uninformed.org/index.cgi?v=3&a=3&p=3
 |보존날짜=2016-08-17
 |url-status=dead
 }}</ref> KPP는 그러나 성공적인 커널 패치를 막는 확연한 장애물이 되어준다. 심하게 난독화된 코드와 헷갈리는 심볼 이름과 함께 KPP는 이것을 우회하려는 시도를 막는다.<ref name="Introduction" /><ref>{{웹 인용
 |url=http://uninformed.org/index.cgi?v=6&a=1&p=10
 |title=Misleading Symbol Names
 |author=Skywing
 |work=Subverting PatchGuard Version 2
 |publisher=Uninformed
 |date=December 2006
 |accessdate=20 September 2007
 |보존url=https://web.archive.org/web/20160303171036/http://uninformed.org/index.cgi?v=6&a=1&p=10
 |보존날짜=2016-03-03
 |url-status=dead
 }}</ref> 또한 KPP의 주기적인 업데이트로 인해 우회 기법도 다음 업데이트 까지의 한시적인 기법이 되어버린다. 2005년 이후로 마이크로소프트는 KPP에 대한 두 번의 주요 업데이트를 하였고 이것들은 이전 버전에서 알려진 우회 기법들을 막았다.<ref name="Introduction" /><ref name="Microsoft Security Advisory (914784)">{{웹 인용
 |url          = http://www.microsoft.com/technet/security/advisory/914784.mspx
 |author       = Microsoft
 |title        = Update to Improve Kernel Patch Protection
 |work         = Microsoft Security Advisory (914784)
 |publisher    = Microsoft
 |date         = June 2006
 |accessdate   = 21 September 2007
 |보존url    = https://web.archive.org/web/20110606104336/http://www.microsoft.com/technet/security/advisory/914784.mspx#
 |보존날짜 = 2011-06-06
 |url-status = dead
}}</ref><ref name="Microsoft Security Advisory (932596)">{{웹 인용
 |url          = http://www.microsoft.com/technet/security/advisory/932596.mspx
 |author       = Microsoft
 |title        = Update to Improve Kernel Patch Protection
 |work         = Microsoft Security Advisory (932596)
 |publisher    = Microsoft
 |date         = August 2007
 |accessdate   = 21 September 2007
 |보존url    = https://web.archive.org/web/20110806064637/http://www.microsoft.com/technet/security/advisory/932596.mspx#
 |보존날짜 = 2011-08-06
 |url-status = dead
}}</ref>

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

== 장점 ==
커널 패치는 수많은 악영향이 있기 때문에 마이크로소프트에서 한 번도 지원된 적이 없다. 커널 패치 보호는 다음과 같은 이러한 악영향에서 보호해 준다:
* 커널에서의 심각한 오류로 인한 [[블루스크린]].<ref name="Field">
{{웹 인용
 |url=http://blogs.msdn.com/windowsvistasecurity/archive/2006/08/11/695993.aspx
 |제목=An Introduction to Kernel Patch Protection
 |성=Field
 |이름=Scott
 |날짜=11 August 2006
 |웹사이트=Windows Vista Security blog
 |출판사=[[마이크로소프트]]
 |확인날짜=30 November 2006
 |보존url=https://web.archive.org/web/20100124154832/http://blogs.msdn.com/windowsvistasecurity/archive/2006/08/11/695993.aspx
 |보존날짜=2010-01-24
 |url-status=dead
 }}
</ref>
* 여러 프로그램에서 커널의 같은 부분을 패치하려고 할 때 발생할 수 있는 신뢰성 문제.<ref name="Allchin">{{웹 인용
 |url          = http://www.microsoft.com/security/windowsvista/allchin.mspx
 |제목       = Microsoft executive clarifies recent market confusion about Windows Vista Security
 |성          = Allchin
 |이름       = Jim
 |날짜       = 20 October 2006
 |출판사    = Microsoft
 |확인날짜 = 30 November 2006
 |보존url    = https://web.archive.org/web/20070205155710/http://www.microsoft.com/security/windowsvista/allchin.mspx#
 |보존날짜 = 2007-02-05
 |url-status = dead
}}</ref>
* 시스템 보안 손상.
* [[루트킷]]이 드라이버로서 삽입되어 커널 제어를 가짐으로써 제거하기 거의 불가능해 진다.
마이크로소프트의 커널 패치 보호 FAQ는 추가적으로 다음과 같이 설명하고 있다:{{인용문
 |Because patching replaces kernel code with unknown, untested code, there is no way to assess the quality or impact of the third-party code...An examination of Online Crash Analysis (OCA) data at Microsoft shows that system crashes commonly result from both malicious and non-malicious software that patches the kernel.|{{웹 인용
 |url          = http://www.microsoft.com/whdc/driver/kernel/64bitpatch_FAQ.mspx
 |title        = Kernel Patch Protection: Frequently Asked Questions
 |date         = 22 January 2007
 |accessdate   = 22 February 2007
 |보존url    = https://web.archive.org/web/20070304110141/http://www.microsoft.com/whdc/driver/kernel/64bitpatch_FAQ.mspx#
 |보존날짜 = 2007-03-04
 |url-status = dead
}}
}}

== 각주 ==
{{각주|2}}

== 외부 링크 ==
* [https://web.archive.org/web/20070217053224/http://www.windows-now.com/blogs/robert/archive/2006/08/12/PatchGuard-and-Symantecs-Complaints-About-Windows-Vista.aspx The Truth About PatchGuard: Why Symantec Keeps Complaining]
* [https://web.archive.org/web/20061124094344/http://blogs.msdn.com/windowsvistasecurity/archive/2006/08/11/695993.aspx An Introduction to Kernel Patch Protection]
* [https://web.archive.org/web/20070205155710/http://www.microsoft.com/security/windowsvista/allchin.mspx Microsoft executive clarifies recent market confusion about Windows Vista Security]
* [https://web.archive.org/web/20070304110141/http://www.microsoft.com/whdc/driver/kernel/64bitpatch_FAQ.mspx Kernel Patch Protection: Frequently Asked Questions]
* [https://web.archive.org/web/20081209034856/http://blogs.technet.com/security/archive/2006/08/12/446104.aspx Windows Vista x64 Security – Pt 2 – Patchguard]
'''Uninformed.org articles:'''
* [https://web.archive.org/web/20170801092238/http://www.uninformed.org/?v=3&a=3 Bypassing PatchGuard on Windows x64]
* [https://web.archive.org/web/20160602175644/http://www.uninformed.org/?v=6&a=1 Subverting PatchGuard Version 2]
* [https://web.archive.org/web/20160603002558/http://www.uninformed.org/?v=8&a=5 PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3]
'''Working bypass approaches'''
* [http://forum.cheatengine.org/viewtopic.php?t=573311 KPP Destroyer (including source code) - 2015]
* [http://www.codeproject.com/KB/vista-security/bypassing-patchguard.aspx A working driver to bypass PatchGuard 3 (including source code) - 2008]
* [https://web.archive.org/web/20151103012629/http://fyyre.ivory-tower.de/txt/bootloader.txt Bypassing PatchGuard with a hex editor - 2009]
'''Microsoft security advisories:'''
* [https://web.archive.org/web/20110606104336/http://www.microsoft.com/technet/security/advisory/914784.mspx June 13, 2006 update to Kernel Patch Protection]
* [https://web.archive.org/web/20110806064637/http://www.microsoft.com/technet/security/advisory/932596.mspx August 14, 2007 update to Kernel Patch Protection]

{{윈도우 구성 요소}}
{{마이크로소프트 보안 제품}}

[[분류:윈도우 NT 커널]]