Kernel Patch Protection

カーネルは、アプリケーションソフトウェアコンピュータ上のハードウェアを接続する

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

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

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

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

技術概略

Windows NT系アーキテクチャーにおいて、デバイスドライバはカーネルと同じ特権レベルを持つように設計されている[3]。デバイスドライバはカーネル内のコアシステム構造を改変・パッチしないものとされている。x86版Windowsでは、Windowsはドライバがカーネルにパッチを行うことを禁止していない[1]。しかし、この見込みはx86システムによるものではなく、いくつかのプログラム、特に正規のセキュリティおよびアンチウイルスプログラムがコアカーネル構造を改変するドライバを読み込んで必要な処理を行うための設計である[3][4]

x64版Windowsでは、マイクロソフトはドライバが改変可能か不可であるかの制限を強制することを決断した。Kernel Patch Protectionはこれらの制限を強制するための技術である。これはカーネルの保護システム構造が改変されていないことを定期的にチェックする。改変が検出されると、Windowsはバグチェック[5]を開始してブルースクリーンを表示および再起動し、システムをシャットダウンする[3][6]

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

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

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

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

脚注

  1. ^ a b Kernel Patch Protection: Frequently Asked Questions”. マイクロソフト (22 January 2007). 2012年2月25日閲覧。 (日本語)
  2. ^ a b skape (December 2005). “Introduction”. Bypassing PatchGuard on Windows x64. Uninformed. 20 September 2007閲覧。
  3. ^ a b c d e Skywing (September 2007). “Introduction”. PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3. Uninformed. 20 September 2007閲覧。
  4. ^ Schofield, Jack (28 September 2006). “Antivirus vendors raise threats over Vista in Europe”. The Guardian. 20 September 2007閲覧。 "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
  5. ^ システムが深刻なエラーなどにより停止したときに、その時の状態を分析・記録する処理のこと
  6. ^ a b c Patching Policy for x64-Based Systems”. マイクロソフト (22 January 2007). 20 September 2007閲覧。
  7. ^ skape (December 2005). “System Images”. Bypassing PatchGuard on Windows x64. Uninformed. 21 September 2007閲覧。
  8. ^ Skywing (January 2007). “Conclusion”. Subverting PatchGuard Version 2. Uninformed. 21 September 2007閲覧。
  9. ^ Skywing (December 2006). “Misleading Symbol Names”. Subverting PatchGuard Version 2. Uninformed. 20 September 2007閲覧。
  10. ^ Microsoft (June 2006). “Update to Improve Kernel Patch Protection”. Microsoft Security Advisory (914784). マイクロソフト. 21 September 2007閲覧。
  11. ^ マイクロソフト (August 2007). “Update to Improve Kernel Patch Protection”. Microsoft Security Advisory (932596). マイクロソフト. 21 September 2007閲覧。

関連項目