Windows 2000のカーネル構造

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

概要

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

技術詳細

ファンクション

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

NT ファンクション プリフィクス
接頭辞 意味
Ccファイルシステムキャッシュ[3]
Cm コンフィグレーション・マネージャ[4]
ExWindowsエグゼキュティブ[5]、ntoskrnl.exeの「外部レイヤー」
FsRtlファイルシステム・ランタイムライブラリ[6][7]
IoI/Oマネージャー[8]
Keコア・カーネル・ルーチン[9][7]
Lsaローカル・セキュリティ認証[7]
Mmメモリ管理[7]
Obオブジェクト・マネージャー[7]
PfPrefetcher[7]
Poプラグ・アンド・プレイおよび電源管理[10][7]
Psプロセスおよびスレッド管理[7]
Rtlランタイムライブラリ[7]、これはネイティブアプリケーションで使われる多くのファンクションを含む
Seセキュリティ[7]
Vfドライバ署名[7]
ZwNtおよび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のセキュアブートやTPMを利用してRoot of Trust(信頼性の根幹)を確立することが有効である[20]。

脚注

  1. ↑ Microsoft TechNet : Systems Internals Tips and Trivia - ウェイバックマシン(2008年4月8日アーカイブ分)
  2. ↑ hanbarakat (2007年2月25日). “Deeper into Windows Architecture”. マイクロソフト. 2016年7月9日閲覧。
  3. ↑ マイクロソフト (2009年). “Cache Manager Routines”. マイクロソフト. 2009年6月13日閲覧。
  4. ↑ “CmRegisterCallbackEx routine (Windows Drivers)”. マイクロソフト. 2016年7月10日閲覧。
  5. ↑ “Executive Library Support Routines (Windows Drivers)”. マイクロソフト. 2016年7月10日閲覧。
  6. ↑ マイクロソフト (2009年). “File System Runtime Library Routines”. マイクロソフト. 2009年6月13日閲覧。
  7. 1 2 3 4 5 6 7 8 9 10 11 Windows Internals, p.72
  8. ↑ マイクロソフト (2009年). “I/O Manager Routines”. マイクロソフト. 2009年6月13日閲覧。
  9. ↑ マイクロソフト (2009年). “Core Kernel Library Support Routines”. マイクロソフト. 2009年6月13日閲覧。
  10. ↑ マイクロソフト (2009年). “Power Manager Routines”. マイクロソフト. 2009年6月13日閲覧。
  11. ↑ 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日閲覧。.
  12. ↑ Raymond Chen (2009年). “The Old New Thing : What does the "Zw" prefix mean?”. マイクロソフト. 2009年6月13日閲覧。
  13. ↑ “struct LOADER_PARAMETER_BLOCK”. NirSoft. 2016年7月10日閲覧。
  14. ↑ Windows Internals, p.980
  15. ↑ Windows Internals, p.63
  16. ↑ Windows Internals, pp.980-985.
  17. ↑ The Rootkit Arsenal, pp. 267-269.
  18. ↑ Matthew Conover (2006年8月9日). “Assessment of Windows Vista Kernel-Mode Security”. シマンテック. 2016年7月9日閲覧。
  19. ↑ “ファイア・アイ、検出が困難で危険なブートキットによりカード決済情報を狙う脅威グループを確認 - FireEye”. FireEye, Inc. (2015年12月10日). 2016年7月9日閲覧。
  20. ↑ Aleksandr Matrosov, Eugene Rodionov (2011年). “Modern Bootkit Trends: Bypassing Kernel-Mode Signing Policy”. ESET. 2016年7月9日閲覧。

参考文献

外部リンク

⌬ Phoenix Mesh CID: 未登録 IPFS未登録 📡 0ピア N=1 CRITICAL PQS B74