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




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



クラッシュダンプ、割り込み要求レベル(IRQL)


 本稿では、システムクラッシュ時に取得できるカーネルメモリダンプを解析し、Windowsシステムが採用している割り込み要求レベル(IRQL)を調査しています。

 次のカーネルメモリダンプ情報をご覧ください。
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

BugCheck 133, {0, 501, 500, 0}

*** ERROR: Module load completed but symbols could not be loaded for netr28ux.sys
Probably caused by : netr28ux.sys ( netr28ux+8bd3 )

Followup:     MachineOwner
---------

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
 この情報は次のような障害情報を提供しています。  まずは、次のような情報を取得し、クラッシュ発生当時のシステム概要を把握してみます。
Core->0	Irql->13	Prcb->0xfffff80250b71180
Process->0xfffff80250bca300	Thread->0xfffff80250bcaa00	Name->Idle
	*001: Thread: 0xfffff80250bcaa00	WaitReason: 25	State: 2	Priority: 0
	002: Thread: 0xffffd000d41d92c0	WaitReason: 00	State: 2	Priority: 0
	003: Thread: 0xffffd000d43552c0	WaitReason: 00	State: 2	Priority: 0
	004: Thread: 0xffffd000d43d32c0	WaitReason: 00	State: 2	Priority: 0
Process->0xffffe0019161f040	Thread->0xffffe001946c3880	Name->System
	001: Thread: 0xffffe001916f5040	WaitReason: 31	State: 1	Priority: 8
	002: Thread: 0xffffe00193ecf880	WaitReason: 00	State: 2	Priority: 16
	*003: Thread: 0xffffe001946c3880	WaitReason: 32	State: 3	Priority: 30
	004: Thread: 0xffffe00191e44040	WaitReason: 00	State: 2	Priority: 14
Process->0xfffff80250bca300	Thread->0xfffff80250bcaa00	Name->Idle
	*001: Thread: 0xfffff80250bcaa00	WaitReason: 25	State: 2	Priority: 0
	002: Thread: 0xffffd000d41d92c0	WaitReason: 00	State: 2	Priority: 0
	003: Thread: 0xffffd000d43552c0	WaitReason: 00	State: 2	Priority: 0
	004: Thread: 0xffffd000d43d32c0	WaitReason: 00	State: 2	Priority: 0
Core->1	Irql->00	Prcb->0xffffd000d41cd180
Core->2	Irql->00	Prcb->0xffffd000d4349180
Core->3	Irql->00	Prcb->0xffffd000d43c7180
 この情報は次のようなことを示しています。  これまで収集した情報からは、このクラッシュにはデバイスドライバー(netr28ux)が関与しているようですから、4個のコアー上で実行中となっているスレッドとIRQLをはじめとする各種CPU情報をまず取得してみます。
*Core->00 Pcr->0xfffff80250b71000 Prcb->0xfffff80250b71180 CurrentThread->0xfffff80250bcaa00 IntObj->0xfffff80250855800 IntLevel->2 Irql->13
	Trapframe->0xfffff802522b7880 PreviousIrql->02 PreviousRip->ndis!NdisMIndicateReceiveNetBufferLists+0x825 (fffff800`9eabe585)
Core->01	Pcr->0xffffd000d41cd000	Prcb->0xffffd000d41cd180	CurrentThread->0xffffe001973c3080
Core->02	Pcr->0xffffd000d4349000	Prcb->0xffffd000d4349180	CurrentThread->0xffffe00193ecf880
Core->03	Pcr->0xffffd000d43c7000	Prcb->0xffffd000d43c7180	CurrentThread->0xffffe00191e44040
 この情報は次のようなことを述べています。  これらの情報と次のようなデータを総合的に分析してみると、外部からのデータ受信時にタイムアウトエラー(IRQL 2)が発生し、ポート(NIC)がリセットされている様子が分かります。タイムアウトエラーハンドラーは内部ではるかに要求レベルの高い(IRQL 13)割り込み処理ルーチンを呼び出し、最終的にシステムクラッシュを発生させています。





 参考のために、類似のクラッシュケースのデータも紹介させていただきます。





 実務解析では、タイムアウトの発生原因を特定することになりますが、本稿ではその解説は割愛いたします。

 Windows OSの役割は、CPUやNICをはじめとするハードウェア資源を抽象化し、カーネル層とその上位のユーザー層を構築する点にあります。本稿では、NICとCPUがWindows割り込みメカニズムを通して連携していることを紹介しました。割り込みメカニズムそのものに興味のある方は、本館の「Windows XP/7/8/10の割り込みテーブル(IDT)解析」に目を通されるとよろしいでしょう。セキュリティーを確保する視点から、その実装にはいろいろな工夫が見られます。



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




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

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