커널 패치 보호

커널 패치 보호(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 커널