サムネイル|Windows 2000のカーネル構造 ntoskrnl.exe()は、Windows NTのカーネルおよびエグゼキュティブを実装するカーネルイメージである。ハードウェア仮想化(HAL)、プロセスやスレッド管理、メモリ管理など様々なシステムサービスを実装する。

概要 ntoskrnl.exeは上層の「エグゼキュティブ」と下層の「カーネル」から構成される。エグゼキュティブはI/O、オブジェクト、セキュリティ、プロセス、プロセス間通信 (IPC)、仮想メモリ、ウィンドウおよびグラフィックの管理を司る。カーネルはスレッドスケジューリング、第1レベル割り込みハンドリング、 () などの基本的なオペレーティングシステムサービスを提供する。

技術詳細 ファンクション Windowsカーネルは変数名でなく型名を表すハンガリアン記法を用いてコーディングされている。ntoskrnlのファンクション名はそのコンポーネントを示すプリフィクス(接頭辞)によって定義される。そのうちの一部を次の表に掲げる。

+ NT ファンクション プリフィクス 意味 Cc ファイルシステムキャッシュ Cmコンフィグレーション・マネージャ Ex Windowsエグゼキュティブ、ntoskrnl.exeの「外部レイヤー」 FsRtl ファイルシステム・ランタイムライブラリWindows Internals, p.72 Io I/Oマネージャー Ke コア・カーネル・ルーチン Lsa ローカル・セキュリティ認証 Mm メモリ管理 Ob オブジェクト・マネージャー Pf Prefetcher Po プラグ・アンド・プレイおよび電源管理 Ps プロセスおよびスレッド管理 Rtl ランタイムライブラリ、これはネイティブアプリケーションで使われる多くのファンクションを含む Se セキュリティ Vf ドライバ署名 Zw NtおよびZwはntdll.dllとntoskrnl.exeで宣言されているシステムコール。ユーザーモードのntdll.dllから呼び出されたとき、これらのグループはカーネルモードにトラップしてSSDT () を通じてntoskrnl.exeの同等のファンクションを呼び出す。ntoskrnl.exeのファンクションを直接呼び出したとき、Zwはカーネルモードを確保するのに対し、Ntは確保しない。接頭辞のZwは特に意味を持たない。

初期化処理 カーネルは制御を受け取る時に、パラメーターである構造体へのポインタを受け取る。この構造体はブートローダーによって受け渡され、ハードウェアに関する情報、レジストリファイルへのパス、カーネルの挙動を変更するブート設定またはオプションのカーネルパラメータ、ブートローダーによって読み込まれるファイルパスの情報を含んでいるWindows Internals, p.980。この構造体の定義はカーネルデバッガを使用するか、またはマイクロソフトのシンボルデータベースからダウンロードすることで取得することができるWindows Internals, p.63。

x86アーキテクチャでは、カーネルはシステムが既にプロテクトモードにあり、GDT ()、IDT ()およびTSS ()の準備が済んでいることを受け取る。カーネルはドライバ署名、メモリマネージャー、IDTといった各種リソース・コンポーネントの初期化処理を行い、最後に (SMSS)が問題なく起動したことを確認して初期化処理を終えるWindows Internals, pp.980-985.。

セキュリティ対策 Windows Server 2003 SP1以降の64ビット版Windowsには Kernel Patch Protection (PatchGuard) という数分おきにカーネルなどのシステム構造への改変をチェックする機構が備わっているThe Rootkit Arsenal, pp. 267-269. 。改変が検出された時、Windowsはブルースクリーンに移行してシステムを停止する。しかし、マルウェアの中にはカーネルの起動前に読み込まれるプログラム(ブートセクタなど)に感染することで、この保護機構を回避してカーネルを改ざんするブートキット () と呼ばれる種類が存在する。このような脆弱性に対してはUEFIのセキュアブートやTPMを利用して(信頼性の根幹)を確立することが有効である。

脚注

参考文献

外部リンク Driver Development Part 1: Introduction to Drivers - Code Project by Toby Opferman Troubleshooting the Startup Process - Microsoft Technet