ntoskrnl.exe
ntoskrnl.exe (Windows NT operating system kernel の略) またはカーネルイメージ (kernel image) とは、Windows NTカーネル空間のカーネルおよびエグゼキュティブ・レイヤー(実行層)であり、ハードウェア仮想化、プロセスおよびメモリ管理、といった様々なシステムサービスを受け持ち、システムの基本的な部分を構成する[1]。
概要
[編集]ntoskrnl.exeは上層の「エグゼキュティブ」と下層の「カーネル」から構成される。エグゼキュティブはI/O、オブジェクト、セキュリティ、プロセス、プロセス間通信 (IPC)、仮想メモリ、ウィンドウおよびグラフィックの管理を司る。カーネルはスレッドスケジューリング、第1レベル割り込みハンドリング、遅延プロシージャコール (Deferred Procedure Calls ; DPC) などの基本的なオペレーティングシステムサービスを提供する[2]。
技術詳細
[編集]ファンクション
[編集]Windowsカーネルは変数名でなく型名を表すハンガリアン記法を用いてコーディングされている。ntoskrnlのファンクション名はそのコンポーネントを示すプリフィクス(接頭辞)によって定義される。そのうちの一部を次の表に掲げる。
接頭辞 | 意味 |
---|---|
Cc | ファイルシステムキャッシュ[3] |
Cm | コンフィグレーション・マネージャ[4] |
Ex | Windowsエグゼキュティブ[5]、ntoskrnl.exeの「外部レイヤー」 |
FsRtl | ファイルシステム・ランタイムライブラリ[6][7] |
Io | I/Oマネージャー[8] |
Ke | コア・カーネル・ルーチン[9][7] |
Lsa | ローカル・セキュリティ認証[7] |
Mm | メモリ管理[7] |
Ob | オブジェクト・マネージャー[7] |
Pf | Prefetcher[7] |
Po | プラグ・アンド・プレイおよび電源管理[10][7] |
Ps | プロセスおよびスレッド管理[7] |
Rtl | ランタイムライブラリ[7]、これはネイティブアプリケーションで使われる多くのファンクションを含む |
Se | セキュリティ[7] |
Vf | ドライバ署名[7] |
Zw | NtおよびZwはntdll.dllとntoskrnl.exeで宣言されているシステムコール。ユーザーモードのntdll.dllから呼び出されたとき、これらのグループはカーネルモードにトラップしてSSDT (System Service Dispatch Table) を通じてntoskrnl.exeの同等のファンクションを呼び出す。ntoskrnl.exeのファンクションを直接呼び出したとき、Zwはカーネルモードを確保するのに対し、Ntは確保しない[11]。接頭辞のZwは特に意味を持たない[12]。 |
初期化処理
[編集]カーネルは制御を受け取る時に、パラメーターである構造体へのポインタを受け取る。この構造体はブートローダーによって受け渡され、ハードウェアに関する情報、レジストリファイルへのパス、カーネルの挙動を変更するブート設定またはオプションのカーネルパラメータ、ブートローダーによって読み込まれるファイルパスの情報を含んでいる[13][14]。この構造体の定義はカーネルデバッガを使用するか、またはマイクロソフトのシンボルデータベースからダウンロードすることで取得することができる[15]。
x86アーキテクチャでは、カーネルはシステムが既にプロテクトモードにあり、GDT (Global Descriptor Table)、IDT (Interrupt descriptor table)およびTSS (Task State Segment)の準備が済んでいることを受け取る。カーネルはドライバ署名、メモリマネージャー、IDTといった各種リソース・コンポーネントの初期化処理を行い、最後にセッションマネージャー サブシステム (SMSS)が問題なく起動したことを確認して初期化処理を終える[16]。
セキュリティ対策
[編集]Windows Server 2003 SP1以降の64ビット版Windowsには Kernel Patch Protection (PatchGuard) という数分おきにカーネルなどのシステム構造への改変をチェックする機構が備わっている[17][18]。改変が検出された時、Windowsはブルースクリーンに移行してシステムを停止する。しかし、マルウェアの中にはカーネルの起動前に読み込まれるプログラム(ブートセクタなど)に感染することで、この保護機構を回避してカーネルを改ざんするブートキット (Bootkit) と呼ばれる種類が存在する[19]。このような脆弱性に対してはUEFI SecureBootやTPMを利用してRoot of Trust(信頼性の根幹)を確立することが有効である[20]。
脚注
[編集]- ^ Microsoft TechNet : Systems Internals Tips and Trivia - ウェイバックマシン(2008年4月8日アーカイブ分)
- ^ hanbarakat (2007年2月25日). “Deeper into Windows Architecture”. マイクロソフト. 2016年7月9日閲覧。
- ^ マイクロソフト (2009年). “Cache Manager Routines”. マイクロソフト. 2009年6月13日閲覧。
- ^ “CmRegisterCallbackEx routine (Windows Drivers)”. マイクロソフト. 2016年7月10日閲覧。
- ^ “Executive Library Support Routines (Windows Drivers)”. マイクロソフト. 2016年7月10日閲覧。
- ^ マイクロソフト (2009年). “File System Runtime Library Routines”. マイクロソフト. 2009年6月13日閲覧。
- ^ a b c d e f g h i j k Windows Internals, p.72
- ^ マイクロソフト (2009年). “I/O Manager Routines”. マイクロソフト. 2009年6月13日閲覧。
- ^ マイクロソフト (2009年). “Core Kernel Library Support Routines”. マイクロソフト. 2009年6月13日閲覧。
- ^ マイクロソフト (2009年). “Power Manager Routines”. マイクロソフト. 2009年6月13日閲覧。
- ^ The NT Insider (August 27, 2003). “Nt vs. Zw - Clearing Confusion On The Native API”. OSR Online (OSR Open Systems Resources) 10 (4) 2013年9月16日閲覧。.
- ^ Raymond Chen (2009年). “The Old New Thing : What does the "Zw" prefix mean?”. マイクロソフト. 2009年6月13日閲覧。
- ^ “struct LOADER_PARAMETER_BLOCK”. NirSoft. 2016年7月10日閲覧。
- ^ Windows Internals, p.980
- ^ Windows Internals, p.63
- ^ Windows Internals, pp.980-985.
- ^ The Rootkit Arsenal, pp. 267-269.
- ^ Matthew Conover (2006年8月9日). “Assessment of Windows Vista Kernel-Mode Security”. シマンテック. 2016年7月9日閲覧。
- ^ “ファイア・アイ、検出が困難で危険なブートキットによりカード決済情報を狙う脅威グループを確認 - FireEye”. FireEye, Inc. (2015年12月10日). 2016年7月9日閲覧。
- ^ Aleksandr Matrosov, Eugene Rodionov (2011年). “Modern Bootkit Trends: Bypassing Kernel-Mode Signing Policy”. ESET. 2016年7月9日閲覧。
参考文献
[編集]- Russinovich, Mark; Solomon, David; Ionescu, Alex (2009), Windows Internals (5th ed.), マイクロソフト Press, ISBN 0735625301
- Bill Blunden (2009). The Rootkit Arsenal: Escape and Evasion in the Dark Corners of the System. Jones & Bartlett Publishers. ISBN 1598220616
外部リンク
[編集]- Driver Development Part 1: Introduction to Drivers - Code Project by Toby Opferman
- Troubleshooting the Startup Process - Microsoft Technet