オンサイトセミナー
豊田孝の「IT談話館」 Windowsメモリダンプ解析を依頼する WinDbgとシステム分析




 本「IT談話館」一般公開記事は、書籍 「インサイド Microsoft Windows」 程度の基礎知識をお持ちの方を想定しています。



Windows XP/7/8/10 Device Driver、Verifier、リンカー


 本「IT談話館」の「一般公開記事」は、「Active Memory Dump とカーネルメモリダンプ」の解析結果を基に起草されています。公開内容はあくまでも本館ビジネスに支障の出ない範囲に制限されていますが、Windowsビジネスを展開する上で必要となる、新規「商材」の発掘や同業他社との「差異」を確保し、人材と予算をはじめとする所有資源を適切に配置・投資する一助にはなるかもしれません。本「IT談話館」主筆の「豊田孝」はDKOM(Direct Kernel Object Manipulation)ベースの解析手法の第一人者であり、Windowsカーネル空間の解析分野では世界の先頭を走っています。

 現在、セキュリティー問題を無視することはできません。Microsoft社側の負担だけではなく、同社製品の利用者側の負担も増しています。困ったことではありますが、当面避けられません。セキュリティーの視点から「Windows10ソフトウェアセンサー」を見た場合、本「IT談話館」の確認範囲では、「カーネル層保護ロジック」に加え、次のような保護メカニズム階層が考案・実装されています。下記リンクはすべて本館記事を指しています。
  1. Silo/Server Silo
  2. Job
  3. Session
  4. Protected Process
  5. Mandatory Integrity Control(MIC)
  6. Windows API(+CPU)
  7. CPU
 本稿では、カーネルメモリダンプを本「IT談話館」の独自解析コードで解析し、Device Driver開発時に使用されたリンカーバージョンを調査します。なお、DLLのリンカーバージョンに興味をお持ちの方は、本館の「Windows 10 Active Memory DumpとDLL解析」が参考になるかもしれません。

 この調査には次のような機能を実装した本館独自の解析コードを使用します。  本稿で使用する独自解析コードはWindows XP/7/8/10それぞれの環境で採取されたカーネルメモリダンプに適応できますが、ここでは、Windows 8.1のカーネルメモリダンプの解析結果を紹介します。なお、解析コードの開発知識の習得には、「時間と予算の投資」が必要です。

 解析コードが返してくれる情報を活用すれば、次のようなメリットがあります。  デバイスドライバー開発時のリンカーバージョンが極端に古い場合には、定期的に開発元サイトを訪問し、問題が発生する前に(公開されていれば)最新バージョンにアップデートすることが常套手段です。

 次の情報は、本「IT談話館」の独自解析コードをWindows 8.1環境で採取されたカーネルメモリダンプに適応・取得しています。
Started..

Windows 8.1 Kernel Version 9600 MP (4 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 9600.17328.amd64fre.winblue_r3.140827-1500
Machine Name:
Kernel base = 0xfffff802`50871000 PsLoadedModuleList = 0xfffff802`50b47370
Debug session time: Fri Nov  7 14:50:46.222 2014 (UTC + 9:00)
System Uptime: 0 days 21:21:18.953


Windows Version->9600	Verifier Enabled!

	072	DllBase->0xFFFFF8009F59B000	Linker(73.152)	Name->\SystemRoot\system32\drivers\nsiproxy.sys
	081	DllBase->0xFFFFF8009F8CD000	Linker(12. 0)	Name->\SystemRoot\system32\DRIVERS\nvlddmkm.sys
	085	DllBase->0xFFFFF8009F887000	Linker(12. 0)	Name->\SystemRoot\system32\DRIVERS\TeeDriverx64.sys
	090	DllBase->0xFFFFF800A070F000	Linker( 9. 0)	Name->\SystemRoot\system32\drivers\nvvad64v.sys
	097	DllBase->0xFFFFF800A07E0000	Linker( 9. 0)	Name->\SystemRoot\System32\drivers\ScpVBus.sys
	101	DllBase->0xFFFFF800A05C2000	Linker(12. 0)	Name->\SystemRoot\system32\drivers\nvhda64v.sys
	103	DllBase->0xFFFFF800A0A98000	Linker( 8. 0)	Name->\SystemRoot\system32\drivers\RTKVHD64.sys
	109	DllBase->0xFFFFF800A134B000	Linker( 9. 0)	Name->\SystemRoot\system32\drivers\bcbtums.sys
	110	DllBase->0xFFFFF800A137F000	Linker( 9. 0)	Name->\SystemRoot\system32\DRIVERS\btwampfl.sys

		*113	DllBase->0xfffff9600008b000
		*113	FullName->\SystemRoot\System32\win32k.sys

	118	DllBase->0xFFFFF800A0F88000	Linker( 9. 0)	Name->\SystemRoot\system32\drivers\btwavdt.sys
	120	DllBase->0xFFFFF800A0A00000	Linker( 9. 0)	Name->\SystemRoot\system32\drivers\btwaudio.sys
	127	DllBase->0xFFFFF800A0910000	Linker( 9. 0)	Name->\SystemRoot\System32\drivers\rzendpt.sys
	130	DllBase->0xFFFFF800A093D000	Linker( 9. 0)	Name->\SystemRoot\System32\drivers\rzudd.sys
	133	DllBase->0xFFFFF800A10AA000	Linker( 9. 0)	Name->\SystemRoot\System32\drivers\rzvkeyboard.sys

		*136	DllBase->0xfffff9600076b000
		*136	FullName->\SystemRoot\System32\TSDDD.dll


		*137	DllBase->0xfffff96000b12000
		*137	FullName->\SystemRoot\System32\ATMFD.DLL

	153	DllBase->0xFFFFF800A1785000	Linker(10. 0)	Name->\??\C:\Windows\system32\drivers\rzpmgrk.sys
	154	DllBase->0xFFFFF800A178D000	Linker( 8. 0)	Name->\SystemRoot\System32\Drivers\secdrv.SYS

		*163	DllBase->0xfffff96000888000
		*163	FullName->\SystemRoot\System32\cdd.dll

	164	DllBase->0xFFFFF800A1C00000	Linker( 9. 0)	Name->\??\C:\Windows\system32\EasyAntiCheat.sys

Ended..
 ダンプ採取時のWindows 8.1は、リンカーバージョン「11.10」で開発されていましたから、その情報はすでに除外されています。複数の世代のリンカーが使われていますが、ここでは、2点の赤色データから次のような事実を確認することができます。  本稿では詳しい解析工程の説明は割愛しますが、とりあえずは、たとえば、次のようなVerifierのログ内容を表示してみます。
0: kd> !verifier 08 0n10

Displaying most recent 0x000000000000000a entries from the IRQL transition log.
There are up to 0x100 entries in the log.

Thread:             ffffe00193ecf880
Old irql:           0000000000000000
New irql:           0000000000000002
Processor:          0000000000000002
Time stamp:         00000000004b13bd

    fffff800a1206391 netr28ux+0x150391
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00191e44040
Old irql:           0000000000000000
New irql:           0000000000000002
Processor:          0000000000000003
Time stamp:         00000000004b13bd

    fffff8009eb18c20 ndis!ndisMResetMiniportInternal+0xf4
    fffff8009eaed1d5 ndis!ndisQueuedCheckForHang+0x2d0e9
    fffff802508e05e3 nt!ExpWorkerThread+0x293
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000002
New irql:           0000000000000000
Processor:          0000000000000002
Time stamp:         00000000004b13bd

    fffff800a1206430 netr28ux+0x150430
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000000
New irql:           0000000000000002
Processor:          0000000000000002
Time stamp:         00000000004b13bc

    fffff800a1206391 netr28ux+0x150391
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000002
New irql:           0000000000000000
Processor:          0000000000000002
Time stamp:         00000000004b13bc

    fffff800a1206430 netr28ux+0x150430
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000000
New irql:           0000000000000002
Processor:          0000000000000002
Time stamp:         00000000004b13bc

    fffff800a1206391 netr28ux+0x150391
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000002
New irql:           0000000000000000
Processor:          0000000000000002
Time stamp:         00000000004b13bc

    fffff800a1206430 netr28ux+0x150430
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000000
New irql:           0000000000000002
Processor:          0000000000000002
Time stamp:         00000000004b13bc

    fffff800a1206391 netr28ux+0x150391
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000002
New irql:           0000000000000000
Processor:          0000000000000002
Time stamp:         00000000004b13bc

    fffff800a1206430 netr28ux+0x150430
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16

Thread:             ffffe00193ecf880
Old irql:           0000000000000000
New irql:           0000000000000002
Processor:          0000000000000002
Time stamp:         00000000004b13bc

    fffff800a1206391 netr28ux+0x150391
    fffff800a1205ea7 netr28ux+0x14fea7
    fffff8025096fe70 nt!PspSystemThreadStartup+0x58
    fffff802509c67c6 nt!KiStartSystemThread+0x16
 スレッド「ffffe00193ecf880」は、IRQLの「0」と「2」の間を切り替えながら、同じ処理を繰り返しています。このスレッドの動作は、スレッド「ffffe00191e44040」によって「Hang」状態と判定され、ミニポートのリセットに至っています。この後は、指摘されているこれら2つのスレッドの動作などに注意しながら、「Windowsシステムクラッシュとメモリダンプ」の解析作業を始めることになります。



ビジネスメニュー




 本「IT談話館」一般公開記事は、書籍 「インサイド Microsoft Windows」 程度の基礎知識をお持ちの方々を想定しています。
Windowsメモリダンプ解析技術開発室 ビジネスメニュー

Copyright©豊田孝 2004- 2021
本日は2021-07-24です。