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




 本「IT談話館」一般公開記事は、10年以上の実務経験を持つ上級Windowsエンジニアを想定しています。
 本館は、Windowsカーネル深層を解析し、クラッシュ原因をはじめとするシステム内の「異様な動き」を検出・分析する
超高度な技術と実績を保有しています。



Windows 10 Device Driver、PEフォーマット、リンカー


 本「IT談話館」の「一般公開記事」は、「Active Memory Dump とカーネルメモリダンプ」の解析結果を基に起草されています。「本館」主筆の「豊田孝」は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
 本稿では、Windows 10環境で採取されたActive Memory Dumpを本「IT談話館」の独自解析コードで解析し、Device DriverとPEフォーマットの関係を解析します。なお、Active Memory DumpやDLLの解析技術に興味をお持ちの方は、本館の「Windows 10 Active Memory DumpとDLL解析」が参考になるかもしれません。

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

Windows 10 Kernel Version 15063 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Kernel base = 0xfffff803`52406000 PsLoadedModuleList = 0xfffff803`527525a0
Debug session time: Tue Jun 27 15:39:26.892 2017 (UTC + 9:00)
System Uptime: 12 days 7:17:40.907


Windows Version->15063	Verifier NOT Enabled!

	000	BaseAddr->0xFFFFF80352406000	Linker(14.10)	Name->\SystemRoot\system32\ntoskrnl.exe
	001	BaseAddr->0xFFFFF80352C8F000	Linker(14.10)	Name->\SystemRoot\system32\hal.dll
	002	BaseAddr->0xFFFFF80352E00000	Linker(14.10)	Name->\SystemRoot\system32\kdcom.dll

	[---]

	056	BaseAddr->0xFFFFF8021A2D0000	Linker(14.10)	Name->\SystemRoot\System32\drivers\volsnap.sys
	057	BaseAddr->0xFFFFF8021A340000	Linker(11. 0)	Name->\SystemRoot\System32\drivers\TVALZ.SYS
	058	BaseAddr->0xFFFFF8021A350000	Linker(11. 0)	Name->\SystemRoot\System32\drivers\Thpevm.SYS
	059	BaseAddr->0xFFFFF8021A360000	Linker(12. 0)	Name->\SystemRoot\SysmonDrv.sys
	060	BaseAddr->0xFFFFF8021A380000	Linker(14.10)	Name->\SystemRoot\System32\drivers\rdyboost.sys
	
	[---]

	173	BaseAddr->0xFFFFF8021D7C0000	Linker(12.10)	Name->\??\C:\ProgramData\Microsoft\Windows Defender\Definition Updates\{587AAA34-0E53-4168-90A2-2877AC5A371E}\MpKsl4c4608d0.sys
	174	BaseAddr->0xFFFFF8021D7E0000	Linker(14.10)	Name->\SystemRoot\System32\Drivers\dump_diskdump.sys
	175	BaseAddr->0xFFFFF8021D820000	Linker(14.10)	Name->\SystemRoot\System32\Drivers\dump_storahci.sys
	176	BaseAddr->0xFFFFF8021D870000	Linker(14.10)	Name->\SystemRoot\System32\Drivers\dump_dumpfve.sys
	177	BaseAddr->0xFFFFF8021D890000	Linker(12. 0)	Name->\??\C:\WINDOWS\system32\drivers\myfault.sys
Ended..
 この出力結果にはデバイスドライバー情報とリンカーバージョンなどが含まれ、次のような事実を読み取ることができます。  デバイスドライバーは担当するデバイスをWindowsカーネル空間の一員として組み入れ、空間を拡張する重要な役割を担います。役割の中に悪意を含めた場合、ユーザー空間からの検出が難しく、長期潜伏型のマルウェアとして組み入れることも可能になります。最悪の場合、Windowsシステム呼び出しを巧みにフックし、自分の存在を隠ぺいする凶悪なルートキットとして活動させることさえ可能です。ここでは、Defenderがインストールする「MpKsl4c4608d0.sys」の存在が気になったとします。まずは、PE仕様を基に、次のような情報を収集してみます。
Directory Info	BaseAddr->0xfffff8021d7c0000
	00	VA->0x000000	Size->0x00000
	01	VA->0x00a834	Size->0x00028
	02	VA->0x00c000	Size->0x00390
	03	VA->0x007000	Size->0x00390
	04	VA->0x007200	Size->0x03d80
	05	VA->0x00d000	Size->0x00028
	06	VA->0x0052c0	Size->0x0001c
	07	VA->0x000000	Size->0x00000
	08	VA->0x000000	Size->0x00000
	09	VA->0x000000	Size->0x00000
	10	VA->0x005500	Size->0x00094
	11	VA->0x000000	Size->0x00000
	12	VA->0x005008	Size->0x002b0
	13	VA->0x000000	Size->0x00000
	14	VA->0x000000	Size->0x00000
	15	VA->0x000000	Size->0x00000
Section Info
	01	VA->0x0000000000001000	Size->0x00002200	Name->.text
	02	VA->0x0000000000004000	Size->0x00000200	Name->awesome
	03	VA->0x0000000000005000	Size->0x00000c00	Name->.rdata
	04	VA->0x0000000000006000	Size->0x00000400	Name->.data
	05	VA->0x0000000000007000	Size->0x00000400	Name->.pdata
	06	VA->0x0000000000008000	Size->0x00001c00	Name->PAGE
	07	VA->0x000000000000a000	Size->0x00001400	Name->INIT
	08	VA->0x000000000000c000	Size->0x00000400	Name->.rsrc
	09	VA->0x000000000000d000	Size->0x00000200	Name->.reloc
 PEフォーマットファイルのの歴史は古く(「本館主筆豊田孝の訳書」参照)、インターネット上にはすでに多数のツールが公開されていますから、本稿ではPE仕様の詳細には触れず、デバイスドライバーとPEフォーマット情報の間にある関係だけを取り上げます。

 デバイスドライバーは、上記情報のいずれかを基に、オブジェクトとしてカーネルメモリ空間に展開されるはずですから、デバイスドライバーのメモリ内オブジェクト情報を取得してみます。
ntdll!_DRIVER_OBJECT
   +0x000 Type             : 0n4
   +0x002 Size             : 0n336
   +0x008 DeviceObject     : 0xffffdb8b`6d1f8e40 _DEVICE_OBJECT
   +0x010 Flags            : 0x12
   +0x018 DriverStart      : 0xfffff802`1d7c0000 Void
   +0x020 DriverSize       : 0xe000
   +0x028 DriverSection    : 0xffffdb8b`67c4e010 Void
   +0x030 DriverExtension  : 0xffffdb8b`67a8edd0 _DRIVER_EXTENSION
   +0x038 DriverName       : _UNICODE_STRING "\Driver\MpKsl4c4608d0"
   +0x048 HardwareDatabase : 0xfffff803`52bafdb8 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
   +0x050 FastIoDispatch   : (null) 
   +0x058 DriverInit       : 0xfffff802`1d7ca708     long  +0
   +0x060 DriverStartIo    : (null) 
   +0x068 DriverUnload     : 0xfffff802`1d7c1280     void  +0
   +0x070 MajorFunction    : [28] 0xfffff802`1d7c14f0     long  +0
 このオブジェクト情報の「DriverStart」フィールドには、上のPE情報の「BaseAddr」が設定されています。この値は、WinDbgの「!dh」コマンドのパラメータとして渡すことにより、PEフォーマット情報を表示させることができます。さらには、「DriverInit」フィールドには「INIT」のアドレス値が、そして、「DriverUnload」フィールドと「MajorFunction」フィールドには「.text」の内部コードがそれぞれ設定されています。
ffffdb8b`67a8ecf0  fffff802`1d7c14f0 MpKsl4c4608d0+0x14f0
ffffdb8b`67a8ecf8  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed00  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed08  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed10  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed18  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed20  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed28  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed30  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed38  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed40  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed48  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed50  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed58  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed60  fffff802`1d7c1660 MpKsl4c4608d0+0x1660
ffffdb8b`67a8ed68  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed70  fffff802`1d7c1630 MpKsl4c4608d0+0x1630
ffffdb8b`67a8ed78  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed80  fffff802`1d7c14f0 MpKsl4c4608d0+0x14f0
ffffdb8b`67a8ed88  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed90  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8ed98  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8eda0  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8eda8  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8edb0  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8edb8  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8edc0  fffff802`1d7c1600 MpKsl4c4608d0+0x1600
ffffdb8b`67a8edc8  fffff803`5250d9a0 nt!IopInvalidDeviceRequest
 本稿では触れませんが、「DriverSection」値はキャストすることにより、PEフォーマットファイル情報のメモリロード時の情報を解析することが可能となります。


ビジネスメニュー




「Windowsメモリダンプ解析サービス」のご案内
Windowsメモリダンプ解析技術

Copyright©豊田孝 2004- 2024
本日は2024-11-24です。