Kernel Patch Protection

Microsoft Windows > Windowsのセキュリティ機能 > 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システムによるものではなく、いくつかのプログラム、特に正規のセキュリティおよびアンチウイルスプログラムがコアカーネル構造を改変するドライバを読み込んで必要な処理を行うための設計である。 x64版Windowsでは、マイクロソフトはドライバが改変可能か不可であるかの制限を強制することを決断した。Kernel Patch Protectionはこれらの制限を強制するための技術である。これはカーネルの保護システム構造が改変されていないことを定期的にチェックする。改変が検出されると、Windowsはバグチェックを開始してブルースクリーンを表示および再起動し、システムをシャットダウンする。 バグチェックに表示される番号は0x109で、コードはCRITICAL_STRUCTURE_CORRUPTIONである。 次のような改変操作が禁止されている。 システムサービステーブルの改変 割り込みディスクリプタテーブル（英語版）の改変 グローバルディスクリプタテーブル（英語版）の改変 カーネルで割り当てられていないカーネルスタックの使用 カーネル、HAL、NDISカーネルライブラリに含まれるコードの改変・パッチ Kernel Patch Protectionはデバイスドライバがカーネルを改造することしか阻止できないことを補足しておく。デバイスドライバが他のデバイスドライバをパッチすることに対しては、いかなる保護も受けられない。 最終的には、デバイスドライバはカーネル自身と同じ特権レベルを持っているため、Kernel Patch Protectionの回避とカーネルへのパッチを完全に防ぐことは不可能である。しかし、KPPはカーネルパッチの成功を重大な障害とみなす。高度な難読化コードおよび紛らわしいシンボル名を使って、KPPは隠蔽されたセキュリティ（security through obscurity）によってそれを回避する試みを妨げる。またKPPの定期的な更新によって、短時間に実行される回避技術「動く標的」を次の更新で破壊するだろう。2005年の初版より、マイクロソフトはKPPについて2つの主要なアップデートをリリースした。いずれも前バージョンの既知の回避技術に対して対策を講じている。 ^ a b “Kernel Patch Protection: Frequently Asked Questions”. マイクロソフト (2007年1月22日). 2012年2月25日閲覧。 (日本語) ^ a b skape (2005年12月). “Introduction”. Bypassing PatchGuard on Windows x64. Uninformed. 2007年9月20日閲覧。 ^ a b c d e Skywing (2007年9月). “Introduction”. PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3. Uninformed. 2007年9月20日閲覧。 ^ Schofield, Jack (2006年9月28日). “Antivirus vendors raise threats over Vista in Europe”. The Guardian. 2007年9月20日閲覧。 "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 ^ システムが深刻なエラーなどにより停止したときに、その時の状態を分析・記録する処理のこと ^ a b c “Patching Policy for x64-Based Systems”. マイクロソフト (2007年1月22日). 2007年9月20日閲覧。 ^ skape (2005年12月). “System Images”. Bypassing PatchGuard on Windows x64. Uninformed. 2007年9月21日閲覧。 ^ Skywing (2007年1月). “Conclusion”. Subverting PatchGuard Version 2. Uninformed. 2007年9月21日閲覧。 ^ Skywing (2006年12月). “Misleading Symbol Names”. Subverting PatchGuard Version 2. Uninformed. 2007年9月20日閲覧。 ^ Microsoft (2006年6月). “Update to Improve Kernel Patch Protection”. Microsoft Security Advisory (914784). マイクロソフト. 2007年9月21日閲覧。 ^ マイクロソフト (2007年8月). “Update to Improve Kernel Patch Protection”. Microsoft Security Advisory (932596). マイクロソフト. 2007年9月21日閲覧。 ntoskrnl.exe - Windows NT系オペレーティングシステムの中枢 Linux Security Modules