Kernel Patch Protection

Kernel Patch Protection （カーネル・パッチ・プロテクション、KPP）とは、Microsoft Windowsの64ビット (x64) 版が持つ、カーネルへのパッチの適用を妨ぐ機構で、一般にはPatch Guard （パッチ・ガード）の名称で知られる。2005年のx64版Windows XPと同Windows Server 2003 Service Pack 1で最初に搭載された (日本語)。

ここで言及する「カーネルへのパッチの適用」（以下「カーネル・パッチング」と表記する）とは、Windowsオペレーティングシステムの中枢コンポーネントまたはカーネルに対して、サポートされない（非公式な）修正を意味するものである。このような修正は、システムのセキュリティと信頼性を大きく損ねるものである為、マイクロソフトによって全くサポートされない。しかしながら、マイクロソフトは推奨しないものの、Windowsのx86版でのカーネル・パッチングは技術的に可能である。しかし、x64版のWindowsにおいて、マイクロソフトはカーネル・パッチングを技術的に阻害する仕組みを導入することを決定した。

カーネル・パッチは、32ビット (x86) 版のWindowsにおいて技術的に可能であり、いくつかのアンチウイルスソフトウェアの開発者はアンチウイルス又はその他のセキュリティサービスの実装にカーネル・パッチを利用した。この種のアンチウイルスソフトウェアは、x64版Windowsが動作するコンピュータ上では動作しない。このため、Kernel Patch Protectionは、アンチウイルスメーカー各社に対して、カーネル・パッチの技法を用いないようにソフトを再設計することを強いたと批判された。

加えて、Windowsカーネルの設計では、Kernel Patch Protectionはカーネル・パッチングを完全に防ぐことができない。これは、Kernel Patch Protectionは不完全な防御であり、この問題はアンチウイルスメーカー各社の利にはならず、悪意のあるソフトウェアの作者は（KPPの）防御を迂回する方法を簡単に見つける、などの追加の批判を呼んだ。しかしながら、サポートされない方法でのカーネル・パッチングを行っていた適正なソフトウェアも、カーネル・パッチングによってシステムの安定性や信憑性を妨害することがある。

技術概略
Windows NT系アーキテクチャーにおいて、デバイスドライバはカーネルと同じ特権レベルを持つように設計されている。デバイスドライバはカーネル内のコアシステム構造を改変・パッチしないものとされている。x86版Windowsでは、Windowsはドライバがカーネルにパッチを行うことを禁止していない。しかし、この見込みはx86システムによるものではなく、いくつかのプログラム、特に正規のセキュリティおよびアンチウイルスプログラムがコアカーネル構造を改変するドライバを読み込んで必要な処理を行うための設計である "This has never been supported and has never been endorsed by us. It introduces insecurity, instability, and performance issues, and every time we change something in the kernel, their product breaks." —Ben Fathi, corporate vice president of Microsoft's security technology unit。

x64版Windowsでは、マイクロソフトはドライバが改変可能か不可であるかの制限を強制することを決断した。Kernel Patch Protectionはこれらの制限を強制するための技術である。これはカーネルの保護システム構造が改変されていないことを定期的にチェックする。改変が検出されると、Windowsはバグチェックシステムが深刻なエラーなどにより停止したときに、その時の状態を分析・記録する処理のことを開始してブルースクリーンを表示および再起動し、システムをシャットダウンする。

バグチェックに表示される番号は0x109で、コードはCRITICAL_STRUCTURE_CORRUPTIONである。

次のような改変操作が禁止されている。

システムサービステーブルの改変
の改変
の改変
カーネルで割り当てられていないカーネルスタックの使用
カーネル、HAL、NDISカーネルライブラリに含まれるコードの改変・パッチ

Kernel Patch Protectionはデバイスドライバがカーネルを改造することしか阻止できないことを補足しておく。デバイスドライバが他のデバイスドライバをパッチすることに対しては、いかなる保護も受けられない。

最終的には、デバイスドライバはカーネル自身と同じ特権レベルを持っているため、Kernel Patch Protectionの回避とカーネルへのパッチを完全に防ぐことは不可能である。しかし、KPPはカーネルパッチの成功を重大な障害とみなす。高度な難読化コードおよび紛らわしいシンボル名を使って、KPPは隠蔽されたセキュリティ（）によってそれを回避する試みを妨げる。またKPPの定期的な更新によって、短時間に実行される回避技術「動く標的」を次の更新で破壊するだろう。2005年の初版より、マイクロソフトはKPPについて2つの主要なアップデートをリリースした。いずれも前バージョンの既知の回避技術に対して対策を講じている。

 脚注 

 関連項目 
 ntoskrnl.exe - Windows NT系オペレーティングシステムの中枢
 Linux Security Modules

Category:Microsoft Windows
Category:オペレーティングシステムの仕組み
Category:Windowsのセキュリティ技術