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




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



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


 本稿では、Windows 10環境で採取されたActive Memory Dumpを本「IT談話館」の独自解析コードで解析し、Device Driverの初歩的な解析技術を取り上げています。なお、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
 デバイスドライバーは、これらの情報のいずれかを基に、オブジェクトとしてカーネル空間に展開されるはですから、次に、オブジェクト情報を取得してみます。
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
 このデバイスドライバーオブジェクト情報内の「MajorFunction」フィールド値は次のように設定されています。
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
 これらのフィールド値は、先のPEフォーマット情報の「.text」セクションの内部を指しています。また、次の情報を見る限り、Directory情報はこのデバイスドライバーオブジェクトの作成にほとんど関与していないことも分かります。
1: kd> !dh -e 0xfffff8021d7c0000
No exports

1: kd> !dh -i 0xfffff8021d7c0000
Could not read import at fffff8021d7ca834
 デバイスドライバーは役割と時代の要請に応じて異なるオブジェクトとしてカーネル空間上に生成されます。たとえば、「\SystemRoot\system32\ntoskrnl.exe」のDirectory情報は次のようになっています。
1: kd> !dh -e 0xFFFFF80352406000
_IMAGE_EXPORT_DIRECTORY fffff80352b98000 (size: 000166ae)
Name: ntoskrnl.exe 
Characteristics: 00000000 Ordinal base: 1.
Number of Functions: 2801. Number of names: 2797. EAT: fffff80352b98028.
     ordinal hint target           name
         5    0 FFFFF803524E4730 AlpcGetHeaderSize
         6    1 FFFFF803524E45B0 AlpcGetMessageAttribute
         7    2 FFFFF803524E46D0 AlpcInitializeMessageAttribute
         8    3 FFFFF80352B5CAB0 BgkDisplayCharacter
         9    4 FFFFF80352B5CB70 BgkGetConsoleState
        10    5 FFFFF80352B5CBC0 BgkGetCursorState
        11    6 FFFFF80352B5CC20 BgkSetCursor
        12    7 FFFFF80352544EF0 CcAddDirtyPagesToExternalCache
        13    8 FFFFF8035242C220 CcAsyncCopyRead
        14    9 FFFFF803524F70C0 CcCanIWrite

        [---]

1: kd> !dh -i 0xFFFFF80352406000
  _IMAGE_IMPORT_DESCRIPTOR fffff803527e47a0
    ext-ms-win-ntos-werkernel-l1-1-0.dll
      FFFFF803527E46D0 Import Address Table
      FFFFF803527E4FF0 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

       FFFFF8021A0BD010    3 WerLiveKernelInitSystem

  _IMAGE_IMPORT_DESCRIPTOR fffff803527e47b4
    ext-ms-win-ntos-tm-l1-1-0.dll
      FFFFF803527E4448 Import Address Table
      FFFFF803527E4D68 Import Name Table
                     0 time date stamp
                     0 Index of first forwarder reference

       FFFFF8021A153D40   3B TmPrepareEnlistment
       FFFFF8021A153CD0   3A TmPrepareComplete
       FFFFF8021A153BE0   39 TmPrePrepareEnlistment
       FFFFF8021A153B70   38 TmPrePrepareComplete
       FFFFF8021A155CD0   37 TmIsTransactionActive
       FFFFF8021A155C80   36 TmIsKTMCommitCoordinator
       FFFFF8021A14B620   35 TmInitializeTransactionManager
       FFFFF8021A155A10   32 TmGetTransactionId
       FFFFF8021A1557C0   31 TmFreezeTransactions
       FFFFF8021A15D860   30 TmEndPropagationRequest

       [---]
 本稿で紹介した解析技術をすべての種類のデバイスドライバー解析にそのまま適応することはできません。しかし、カーネル空間への展開背景を理解しておきますと、解析工程設計上の柔軟性が劇的に増します。



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



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


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

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