Kernel Patch Protection (KPP) とは
Kernel Patch Protection、一般にはPatch Guardとして知られるこの技術は、
マイクロソフトの
64ビット版Windowsにおいて、
カーネルへの非公式な
パッチ適用を阻止する仕組みです。KPPは
2005年にWindows XP x64と
Windows Server 2003 SP1で初めて実装され、以来、
システムの
セキュリティと信頼性を確保する重要な役割を果たしています。
ここで「
カーネルへの
パッチの適用」、すなわち
カーネル・
パッチングとは、公式にサポートされていない方法でWindowsの中核である
カーネルに修正を加える行為を指します。このような行為は、
システムの
セキュリティに重大な脅威を及ぼす可能性があるため、
マイクロソフトはこうした方法を全く支持せず、
64ビット版では技術的にそれを阻止することを選択しました。
32ビット版のWindowsでは、
アンチウイルスソフトウェア開発者が
カーネルを
パッチする手法を用いるケースもありましたが、これが
64ビット版では通用しなくなったため、KPPはソフトウェアベンダーに対し、
カーネル・
パッチ技術を使用しない専用の設計を要求する結果となり、これに対して批判も呼んでいます。
KPPの限界と批評
ただし、KPPは完全な防御策というわけではありません。そのため、悪意のあるソフトウェアがKPPの防御を回避する手法を見つけやすく、これはKPPに対するさらなる批判を招いています。これにより、不正な方法で
カーネルに
パッチを適用していた正当なアプリケーションが困難な状況に陥ることもあります。
技術的な概要
Windows NT系のアーキテクチャでは、
デバイスドライバが
カーネルに同等の権限を持つように設計されていますが、実際には
デバイスドライバが
カーネルの核心構造を改変することは想定されていません。x86版ではこのような
パッチが可能である一方で、
64ビット版では
マイクロソフトが明確な制限を加えました。このKPPの技術は、
カーネルの安全な保護
システムが変更されていないかを定期的に確認する役割を持ちます。
もし改変が検出された場合、Windowsはバグチェックをトリガーし、
ブルースクリーンを表示しながら再起動する仕組みです。
以下のような変更が禁止されています:
- - システムサービステーブルの改変
- - 割り込みディスクリプタテーブルの改変
- - グローバルディスクリプタテーブルの改変
- - カーネルスタックの不適切な使用
- - カーネルおよび関連ライブラリの改変
ただし、
デバイスドライバ同士が互いに
パッチをかけることはKPPの防護外であり、完全に
カーネルへの不正な
パッチ適用を防ぐことは難しいのが現実です。しかし、KPPはその効果を非常に重要視しており、高度な難読化を行うことで、これらの回避試行を抑え込もうとしています。
2005年の初回実装以降、
マイクロソフトはKPPに対して二度の主要なアップデートを行っており、それぞれは既知の回避策に対する対策を含んでいます。KPPはサポートされない手法での
カーネル・
パッチングを防止し、
システムの堅牢性を高めるために継続的な改善が求められています。