コンテンツにスキップ

Kernel Patch Protection

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Darklanlan (会話 | 投稿記録) による 2016年7月3日 (日) 17:44個人設定で未設定ならUTC)時点の版 (en:Kernel Patch Protection(2016-04-02T22:50:37 )Technical overview節を翻訳)であり、現在の版とは大きく異なる場合があります。

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

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カーネルにおいて、デバイスドライバーはカーネルと同じ特権レベルを持つように設計されている[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”. マイクロソフト (2007年1月22日). 2012年2月25日閲覧。 (日本語)
  2. ^ a b skape (2005年12月). “Introduction”. Bypassing PatchGuard on Windows x64. Uninformed. 2007年9月20日閲覧。
  3. ^ a b c d e Skywing (2007年9月). “Introduction”. PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3. Uninformed. 2007年9月20日閲覧。
  4. ^ 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
  5. ^ システムが深刻なエラーなどにより停止したときに、その時の状態を分析・記録する処理のこと
  6. ^ a b c Patching Policy for x64-Based Systems”. Microsoft (2007年1月22日). 2007年9月20日閲覧。
  7. ^ skape (2005年12月). “System Images”. Bypassing PatchGuard on Windows x64. Uninformed. 2007年9月21日閲覧。
  8. ^ Skywing (2007年1月). “Conclusion”. Subverting PatchGuard Version 2. Uninformed. 2007年9月21日閲覧。
  9. ^ Skywing (2006年12月). “Misleading Symbol Names”. Subverting PatchGuard Version 2. Uninformed. 2007年9月20日閲覧。
  10. ^ Microsoft (2006年6月). “Update to Improve Kernel Patch Protection”. Microsoft Security Advisory (914784). Microsoft. 2007年9月21日閲覧。
  11. ^ Microsoft (2007年8月). “Update to Improve Kernel Patch Protection”. Microsoft Security Advisory (932596). Microsoft. 2007年9月21日閲覧。

関連項目