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




 本「IT談話館」一般公開記事は、書籍 「インサイド Microsoft Windows」 程度の基礎知識をお持ちの方を想定しています。



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


 SaaS時代におけるWindows 10の頻繁なる内部更新は、性能向上と互換性維持などに加え、ML/DL/AI時代への対応と位置付けられています。簡単に表現すれば、Windows 10はCloudサービスと連携しながらBig Dataを収集・蓄積する「ソフトウェアセンサー」、という役割を担っています。本「IT談話館」は、そのソフトウェアセンサーのユーザー空間とカーネル空間を独自の解析コードで詳しく解析する技術を保有し、「Windowsメモリダンプ解析サービス」を提供しています。「本館サービス」をご利用の際には、所属チーム内でご協議の上、「ご連絡」頂けると幸いです。

 「メモリダンプ」を解析すると、採取時点におけるシステム内部の「異様な動き」を検出・解析することができます。「異様な動き」の中には、システムパフォーマンスの低下、既存アプリの動作異常、システムクラッシュ原因、あるいは、セキュリティー脅威なども含まれます。

 本「IT談話館」の「一般公開記事」は、「Active Memory Dump とカーネルメモリダンプ」の解析結果を基に起草され、0dayをはじめとする脆弱性研究者、組み込みシステム開発者、デジタルフォレンジック技術者、および、EDR製品のビジネス関係者に広く読まれています。公開はあくまでもビジネスに支障の出ない範囲に限定されていますが、それでも、インターネット空間上で容易に入手できるレベルの記事ではありません。

 現在、セキュリティー問題を無視することはできません。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
 本稿は「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を使用しており、その後何らかの事情でアンインストールしたことを示しています。



ビジネスメニュー




 本「IT談話館」一般公開記事は、書籍 「インサイド Microsoft Windows」 程度の基礎知識をお持ちの方々を想定しています。
Windowsメモリダンプ解析技術開発室 ビジネスメニュー

Copyright©豊田孝 2004- 2020
本日は2020-09-28です。