WIPIVERSE

커널 패치 보호

커널 패치 보호(KPP, Kernel Patch Protection)는 비공식적으로 패치가드(PatchGuard)라고도 불리며, 64비트(x64) 마이크로소프트 윈도우 운영 체제에서 커널을 패치하는 것을 기술적으로 차단하는 보안 기능이다. 이 기능은 2005년 윈도우 XP x64 버전과 윈도우 서버 2003 서비스 팩 1에서 처음 도입되었다.

"커널 패치"란 윈도우 운영 체제의 커널 또는 중앙 요소에 대한 지원되지 않은 수정을 의미한다. 마이크로소프트에 따르면, 이러한 수정은 시스템 보안, 신뢰성 및 성능에 심각한 저하를 유발할 수 있기 때문에 공식적으로 지원된 적이 없다. 32비트(x86) 에디션에서는 기술적으로 커널 패치가 가능했으나, 마이크로소프트는 x64 버전에서 커널 패치 보호를 구현하여 이를 기술적으로 차단하였다.

커널 패치 보호는 보호 대상이 되는 시스템 구조가 수정되었는지 주기적으로 검사하는 방식으로 동작한다. 만약 수정이 감지되면 윈도우는 버그 체크를 수행하고 블루 스크린 또는 재부팅과 함께 시스템을 종료한다. 이때의 버그 체크 번호는 0x109이며, 버그 체크 코드는 CRITICAL_STRUCTURE_CORRUPTION이다. 금지되는 수정에는 다음이 포함된다.

  • 시스템 호출 테이블(SSDT) 수정
  • 인터럽트 서술자 테이블(IDT) 수정
  • 전역 서술자 테이블(GDT) 수정
  • 커널에서 할당되지 않은 커널 스택 사용
  • 커널 자체, 또는 HAL이나 NDIS 커널 라이브러리 내부에서의 수정 또는 코드 패치

커널 패치 보호는 커널을 수정하는 디바이스 드라이버에 대한 방어 기능이라는 점이 중요하다. 이 기능은 디바이스 드라이버가 다른 디바이스 드라이버를 패치하는 것을 보호하지 않는다.

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

또한 윈도우 커널의 설계 특성상 디바이스 드라이버가 커널 자신과 동일한 권한 수준을 갖기 때문에, 커널 패치 보호가 커널 패치를 완벽하게 차단하는 것은 불가능하다는 지적이 있다. 이 때문에 KPP는 불완전한 방어라는 비판이 있으며, 악성코드 개발자가 이 방어를 우회하는 방법을 찾을 수 있다는 점이 지적된다. 그럼에도 불구하고 커널 패치 보호는 지원되지 않는 방식으로 커널을 패치하는 소프트웨어에 의해 유발되는 시스템 안정성, 신뢰성 및 성능 문제를 방지하는 데 기여한다.

커널 패치 보호는 심하게 난독화된 코드와 혼동을 유발하는 심볼 이름을 사용하며, 주기적인 업데이트를 통해 알려진 우회 기법을 차단한다. 2005년 이후 마이크로소프트는 KPP에 대한 주요 업데이트를 여러 차례 진행하였으며, 이는 이전 버전에서 알려진 우회 기법들을 차단하는 효과를 가져왔다.

커널 패치 보호의 장점으로는 커널에서의 심각한 오류로 인한 블루 스크린 방지, 여러 프로그램이 커널의 동일한 부분을 패치하려 할 때 발생할 수 있는 신뢰성 문제 방지, 시스템 보안 손상 방지, 그리고 드라이버로 삽입되어 커널 제어권을 획득하는 루트킷의 제거가 거의 불가능해지는 문제의 방지 등이 꼽힌다. 단점으로는 API 후킹 방지와, 커널 수정을 사용하는 제품들이 최신 윈도우 버전에서 동작하는 방식을 변경해야 하여 이식 문제가 발생할 수 있다는 점이 있다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기