Windowsメモリ内部解析サービス
豊田孝の「IT談話館」 Windowsメモリダンプ解析を依頼する WinDbgとシステム分析




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



WinDbgとWindowsレジストリ解析(応用)


 WindowsはSaaSとして提供される時代に入り、その内部は頻繁に更新されています。更新内容の多くは、いろいろな事情から、公にされることはほとんどありません。最新のユーザー空間とカーネル空間に関する信頼できる情報を取得するには、インターネットなどでは語られることのない高度な内部解析技術が必須とされています。

 本稿は「WinDbgとWindowsレジストリ解析(基礎)」の続編であり、基礎編と同じように、Windows 10環境で採取した「Active Memory Dump」内に保存されているWindowsレジストリ情報を本「IT談話館」の独自解析コードで解析しています。

 今回解析対象とするメモリダンプは次のようなものです。
0: kd> vertarget
Windows 10 Kernel Version 18362 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 18362.1.amd64fre.19h1_release.190318-1202
Machine Name:
Kernel base = 0xfffff804`59a00000 PsLoadedModuleList = 0xfffff804`59e480b0
Debug session time: Sun Nov  3 09:56:47.110 2019 (UTC + 9:00)
System Uptime: 0 days 1:42:54.949
 本館の独自解析コードを実行すると、次のような結果が返されてきます。
ObjectTable->0xffff8d8c4c8e8000	HandleCount->0235	ffffc489264e2080->notmyfault64.e

[---]

kbody->0xffff8d8c506b9400	kcb->0xffff8d8c4ac4d720
	FullKeyName->***
	RefCount->0014
Found list end after 10 entries
	Length->8	ShrtKeyName->SECURITYt

kbody->0xffff8d8c506bbda0	kcb->0xffff8d8c49cb15f0
	FullKeyName->***
	RefCount->0020
Found list end after 16 entries
	Length->8	ShrtKeyName->SECURITYt

kbody->0xffff8d8c506ba2a0	kcb->0xffff8d8c4a7640c0
	FullKeyName->\REGISTRY\USER\S-1-5-21-1130387745-3410680543-2795099033-1001_Classes	RefCount->0080
Found list end after 63 entries
	Length->54	ShrtKeyName->S-1-5-21-1130387745-3410680543-2795099033-1001_CLASSES
 この情報には2箇所のデータが赤色で表示されています。いずれも「SECURITYt」というキー名が表示されています。キー名の前に表示されている「Length->8」はキー名を構成する文字数を示していますから、「SECURITYt」から「t」を取り除き、残りの「SECURITY」が正式なキー名となります。

 同じ名前を持つこれら2つのキーオブジェクトは「kbody」欄などの他の数値を見ると、異なる値が設定されていますから、キー名が同名であっても、同一のオブジェクトではないことが分かります。また、「FullKeyName」欄は「***」となっており、「FullKeyName->\REGISTRY\USER\S-1-5-21-1130387745-3410680543-2795099033-1001_Classes」のようにキー名がフル表示されていません。ここでは、2つの「SECURITY」キーオブジェクトの違いを調査してみます。

 本館の独自解析コードを実行し、最初の「SECURITY」キーオブジェクトの「FullKeyName」を確認してみます。
ParentKcb->0xffff8d8c4a75d7c0	FullKeyName->	kcb->0xffff8d8c4a75d7c0	Length->17	ShrtKeyName->INTERNET EXPLORERI訣
ParentKcb->0xffff8d8c4a4b4cd0	FullKeyName->	kcb->0xffff8d8c4a4b4cd0	Length->9	ShrtKeyName->MICROSOFTRSIOND03
ParentKcb->0xffff8d8c4ac68840	FullKeyName->	kcb->0xffff8d8c4ac68840	Length->8	ShrtKeyName->SOFTWAREYSERVICES
ParentKcb->0xffff8d8c4a4840d0	FullKeyName->	kcb->0xffff8d8c4a4840d0	Length->46	ShrtKeyName->S-1-5-21-1130387745-3410680543-2795099033-1001vコK
ParentKcb->0xffff8d8c4a484a00	FullKeyName->	kcb->0xffff8d8c4a484a00	Length->46	ShrtKeyName->S-1-5-21-1130387745-3410680543-2795099033-1001vコK
ParentKcb->0xffff8d8c43ea1be0	FullKeyName->	kcb->0xffff8d8c43ea1be0	Length->4	ShrtKeyName->USER
ParentKcb->0xffff8d8c43e58050	FullKeyName->	kcb->0xffff8d8c43e58050	Length->8	ShrtKeyName->REGISTRY
 この情報内の「ShrtKeyName」欄の文字列を下から上に向かって連結すると、「\REGISTRY\USER\S-1-5-21-1130387745-3410680543-2795099033-1001\SOFTWARE\MICROSOFT\INTERNET EXPLORER\SECURITY」という「FullKeyName」キーが完成します。ちなみに、このキーは、次のようなプロセスが参照しています。
	Kbody->0xffff8d8c506b9400	ProcessId->0x1514
Found list end after 10 entries
0000: 0xffffc48926221080	ProcessId->0x10e8	StartMenuExper
0001: 0xffffc489269e70c0	ProcessId->0x1778	svchost.exe
0002: 0xffffc489269e84c0	ProcessId->0x18cc	ShellExperienc
0003: 0xffffc489271230c0	ProcessId->0x18b8	dllhost.exe
0004: 0xffffc48926b9a080	ProcessId->0x0a80	RuntimeBroker.
0005: 0xffffc489250ee080	ProcessId->0x0bec	svchost.exe
0006: 0xffffc489269cf080	ProcessId->0x10a8	RuntimeBroker.
0007: 0xffffc48926f94500	ProcessId->0x043c	smartscreen.ex
0008: 0xffffc48924b9a080	ProcessId->0x0594	chrome.exe
 この結果を見ると、エントリ数が10個のところ9個しか表示されていません。この背景は興味あるところですが、ここでは、プロセスオブジェクトが2ヶ所で管理されている内部事情に起因すると推察される、とだけ述べておき、詳しい解説は割愛します。ルートキットなどの凶悪マルウェアの潜伏を安易に否定することはできませんが、本館の経験では、数年に一件そのレベルの事案に遭遇するかどうかといった程度です。

 2番目の「SECURITY」キーオブジェクトの「FullKeyName」は次のようになっています。
ParentKcb->0xffff8d8c48de6e30	FullKeyName->	kcb->0xffff8d8c48de6e30	Length->17	ShrtKeyName->INTERNET EXPLORERI訣
ParentKcb->0xffff8d8c47d41d80	FullKeyName->	kcb->0xffff8d8c47d41d80	Length->9	ShrtKeyName->MICROSOFTRSIOND03
ParentKcb->0xffff8d8c443180f0	FullKeyName->	kcb->0xffff8d8c443180f0	Length->8	ShrtKeyName->SOFTWAREYSERVICES
ParentKcb->0xffff8d8c44318390	FullKeyName->	kcb->0xffff8d8c44318390	Length->8	ShrtKeyName->SOFTWAREYSERVICES
ParentKcb->0xffff8d8c43e58ad0	FullKeyName->	kcb->0xffff8d8c43e58ad0	Length->7	ShrtKeyName->MACHINE
ParentKcb->0xffff8d8c43e58050	FullKeyName->	kcb->0xffff8d8c43e58050	Length->8	ShrtKeyName->REGISTRY
 この情報を見ると、「SOFTWARE」キーへのアクセスが重複している印象を受けます。調査してみると、キャッシュミスがあった模様です。「FullKeyName」キーは前項の要領で完成させることができます。なお、このキーは次のようなプロセスが参照しています。
	Kbody->0xffff8d8c506bbda0	ProcessId->0x1514
Found list end after 16 entries
0000: 0xffffc4891e2620c0	ProcessId->0x0004	System
0001: 0xffffc489206c2080	ProcessId->0x1148	svchost.exe
0002: 0xffffc4892582e080	ProcessId->0x1444	svchost.exe
0003: 0xffffc489204e3080	ProcessId->0x13a0	svchost.exe
0004: 0xffffc48920545080	ProcessId->0x0c4c	taskhostw.exe
0005: 0xffffc489262dc0c0	ProcessId->0x0c88	svchost.exe
0006: 0xffffc48926221080	ProcessId->0x10e8	StartMenuExper
0007: 0xffffc489269e70c0	ProcessId->0x1778	svchost.exe
0008: 0xffffc48926d79280	ProcessId->0x003c	SecurityHealth
0009: 0xffffc489269e84c0	ProcessId->0x18cc	ShellExperienc
0010: 0xffffc489271230c0	ProcessId->0x18b8	dllhost.exe
0011: 0xffffc48926b9a080	ProcessId->0x0a80	RuntimeBroker.
0012: 0xffffc489250ee080	ProcessId->0x0bec	svchost.exe
0013: 0xffffc489269cf080	ProcessId->0x10a8	RuntimeBroker.
0014: 0xffffc48926f94500	ProcessId->0x043c	smartscreen.ex
0015: 0xffffc48924b9a080	ProcessId->0x0594	chrome.exe
 この情報ではエントリ数の不一致は見られません。

 レジストリ情報はメモリフォレンジックなどの作業では極めて重要な調査対象とされています。必要以上にレジストリ深層を解析する必要はありませんが、”そこはどういう意味だろう?”という疑問を解消する技術は独自に習得しておく必要はあるでしょう。この姿勢を堅持していれば、たとえば、「WinDbgとWindowsレジストリ解析(基礎)」で紹介したようなWinDbgコマンドエラー発生時に即座に対処できる知識が自然に身に付きます。ちなみに、今回のような「FullKeyName」キーを取得する技術を習得しておくと、次のようなコマンド操作を通してWindowsレジストをカーネル空間から調査できるようになります。
0: kd> !reg q \REGISTRY\Machine\SOFTWARE\MICROSOFT\INTERNET EXPLORER\SECURITY

Found KCB = ffff8d8c49cb15f0 :: \REGISTRY\MACHINE\SOFTWARE\MICROSOFT\INTERNET EXPLORER\SECURITY

Hive         ffff8d8c44bbd000
KeyNode      000002ab4b95ec0c

[SubKeyAddr]         [SubKeyName]
2ab4ee95b2c          DPA
2ab4ee95bd4          MSN
2ab4ee95c54          Negotiate
2ab4ee95cdc          NTLM

 Use '!reg keyinfo ffff8d8c44bbd000 ' to dump the subkey details

[ValueType]         [ValueName]                   [ValueData]
 Key has no Values
 この情報で気なるSubKeyがあれば、上記のアドバイスに従って「2ab4ee95b2c」などの「SubKeyAddr」を指定したり、「\REGISTRY\Machine\SOFTWARE\MICROSOFT\INTERNET EXPLORER\SECURITY\DPA」といった「FullKeyName」キーを指定すれば、より詳しい分析を進めることができます。さらには、次のような応用も可能となります。
0: kd> !reg q \REGISTRY\Machine\SOFTWARE\Mozilla

Sorry <\REGISTRY\Machine\SOFTWARE\Mozilla> is not cached 

===========================================================================================
Falling back to traversing the tree of nodes.

Could not read KeyName; KeyCell = 220db00
Could not read KeyName; KeyCell = 220dcd8
Could not read KeyName; KeyCell = 220e4f8
Could not read KeyName; KeyCell = 220e708
Hive         ffff8d8c44bbd000
KeyNode      000002ab4c9c0a84

[SubKeyAddr]         [SubKeyName]
2ab4c9c0adc          Firefox
2ab4c9c0b4c          MaintenanceService

 Use '!reg keyinfo ffff8d8c44bbd000 ' to dump the subkey details

[ValueType]         [ValueName]                   [ValueData]
 Key has no Values
 この情報は、以前Firefoxを使用しており、その後何らかの事情でアンインストールしたことを示しています。



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




Windowsシステム分析
Windows内部解析技術資料

Copyright©豊田孝 2004- 2020
本日は2020-02-17です。