オンサイトセミナー
豊田孝の「IT談話館」 Windowsメモリフォレンジックを依頼する WinDbg




本「IT談話館」はDKOMベースの高度なメモリフォレンジックサービスを提供しています!



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


 本稿では、Windows XP/7/8/10それぞれの環境で採取されたカーネルメモリダンプを本「IT談話館」の独自解析コードで解析し、Device Driver開発時に使用されたリンカーバージョンを調査しています。なお、DLLのリンカーバージョンに興味をお持ちの方は、本館拙稿「Windows 10 Active Memory DumpとDLL解析」をお読みください。

 この調査には次のような機能を実装した本館独自の解析コードを使用いたします。  本「IT談話館」の独自解析コードはWindows XP/7/8/10それぞれの環境で採取されたカーネルメモリダンプに適応できますが、本稿では、Windows 8.1のカーネルメモリダンプの解析結果をご紹介させていただきます。こちらの拙稿では、Windows XPのカーネルメモリダンプの解析結果をご紹介しております。

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

 次の情報は、本「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
 赤色のデータ群からは次のような事情を窺い知れます。  「2つのコアーが「IRQL = 2」に同時に設定された途端クラッシュが発生している」ことは、次の事実により裏付けされます。
0: kd> !whattime 4b13bd
4920253 Ticks in Standard Time:  21:21:18.953s

0: kd> vertarget
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
 ご覧のように、クラッシュ発生時点と「2つのコアーが「IRQL = 2」に同時に設定された時点」が同じ値になっています。以上の基本調査を踏まえ、ロック、割り込み、DPCなどを中心とした本格的な解析作業を始めることになります。



本「IT談話館」はDKOMベースの高度なメモリフォレンジックサービスを提供しています!



 実務的な解析コードの開発技術の導入をご予定の場合には、所属チーム内でご協議の上、本「IT談話館」の「オンサイトセミナー」の受講をご検討いただけますと幸いでございます。


サービスメニュー
Windowsクラッシュダンプ解析サービス 技術資料 WinDbg

Copyright©豊田孝 2004- 2017
本日は2017-10-21です。