本「
IT談話館」一般公開記事は、10年以上の開発実務経験を持つ上級Windowsエンジニアを想定しています。
公開技術レベルは、当館ビジネスに支障の出ない範囲に制限されています。
完全メモリダンプを解析すると、採取時点におけるシステム内部の「異様な動き」を検出・解析することができます。
「異様な動き」の中には、次の項目が含まれます。
- システムクラッシュ原因
- セキュリティー脅威
- システムパフォーマンスの低下
- 既存アプリの動作異常
Windowsカーネル, WMI, Silo, システムロガー
本「IT談話館」主筆の「豊田孝」はDKOM(Direct Kernel Object Manipulation)ベースの解析手法の第一人者であり、Windowsカーネル空間の解析分野では世界の先頭を走っています。
- Silo/Server Silo
- Job
- Session
- Protected Process
- Mandatory Integrity Control(MIC)
- Windows API(+CPU)
- CPU
本稿では「WinDbg、WMI、システムロガー(基礎)」前編に続き、WMIを取り上げています。WMIと一口に言ってもその守備範囲が広いため、ここではWMIと、Siloという概念との関係性に焦点を当てています。Siloの基礎的な解析工程は、本「IT談話館」のこの記事「WinDbgとWindowsカーネルアーキテクチャー」で紹介しています。
Windowsシステム内部、特にカーネル空間はバージョン単位ではなくビルド単位で頻繁に更新されます。未公開の情報を含む最新内部機能を調査する際には、カーネル内部を直接覗く必要があります。多くの最新実装機能や実装予定の機能はカーネル空間内に実装、あるいは、予告されています。
本「IT談話館」は、WMIに関する経験は豊富であり、SiloとWMIとは内部的に関係していることを実践的に確認しています。
まずは次の解析情報を見てみましょう。
3: kd> vertarget
Windows 10 Kernel Version 14393 MP (4 procs) Free x64
Product: Server, suite: TerminalServer SingleUserTS
Built by: 14393.2068.amd64fre.rs1_release.180209-1727
Machine Name:
Kernel base = 0xfffff803`c381d000 PsLoadedModuleList = 0xfffff803`c3b251a0
Debug session time: Mon Jun 25 16:16:23.767 2018 (UTC + 9:00)
System Uptime: 2 days 20:12:55.966
この調査対象のメモリダンプは2018年6月25日に採取されています。ビルド番号は「14393.2068」と記されています。
日付からはかなり古いOSということが分かりますが、本館で使用する解析コードの多くは例外なく、Windows 11
の最新ビルド環境でもそのまま利用できます。つまり、Windows 7やWindows 81からWindows 10への遷移期間で発生した
内部変更の影響は受けません。表現を変えると、Windows 10以降のカーネル内部は激変の時期を通過し、安定期に入っています。
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c477040 Id->03 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c30a5c0 Id->04 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c308040 Id->05 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876e6788c0 Id->06 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c2e6500 Id->07 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c2e59c0 Id->08 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c2e4b80 Id->09 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c2e3b80 Id->0a _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c478040 Id->0b _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c476040 Id->0c _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c467840 Id->0d _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876ede92c0 Id->0e _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c4dfb80 Id->0f _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c4de9c0 Id->10 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876c2074c0 Id->11 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876e215b40 Id->13 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876dbb5b80 Id->14 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876f103b80 Id->15 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876f2e7b80 Id->16 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876eab5740 Id->17 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
nt!_WMI_LOGGER_CONTEXT->0xffff9c876ec21900 Id->18 _ETW_SILODRIVERSTATE->0xffff9c876c0c8000
赤色で強調表示されているデータはSiloに関係しています。このデータの中身を見てみます。
nt!_ETW_SILODRIVERSTATE
+0x000 EtwpSecurityProviderGuidEntry : _ETW_GUID_ENTRY
+0x190 EtwpLoggerRundown : [64] 0xffff9c87`6c298270 _EX_RUNDOWN_REF_CACHE_AWARE
+0x390 WmipLoggerContext : [64] 0x00000000`00000001 _WMI_LOGGER_CONTEXT
+0x590 EtwpGuidHashTable : [64] _ETW_HASH_BUCKET
+0x1390 EtwpSecurityLoggers : [8] 3
+0x13a0 EtwpSecurityProviderEnableMask : 0x3 ''
+0x13a1 EtwpShutdownInProgress : 0 ''
+0x13a4 EtwpSecurityProviderPID : 0x2c4
この情報はWmiとSiloの関係が深いことを示しています。次に第2の解析情報を見てみます。
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 = 0xfffff802`6e400000 PsLoadedModuleList = 0xfffff802`6e848130
Debug session time: Thu Dec 26 15:26:37.338 2019 (UTC + 9:00)
System Uptime: 3 days 5:48:09.082
EtwLogger->0xffffa80faafd39c0 Id->02 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faafce9c0 Id->03 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faae69a40 Id->04 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb888e9c0 Id->05 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faafd49c0 Id->06 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faafd59c0 Id->07 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fab1b5a00 Id->08 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fab05c9c0 Id->09 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fab05d9c0 Id->0a _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fab05e9c0 Id->0b _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faafcd9c0 Id->0c _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf3d9c0 Id->0d _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf3c9c0 Id->0e _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faee939c0 Id->0f _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf3a9c0 Id->10 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf329c0 Id->11 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf319c0 Id->12 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf309c0 Id->13 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf35a00 Id->14 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faaf409c0 Id->15 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fab4e3a00 Id->16 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fab1b69c0 Id->17 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb9bf39c0 Id->18 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb03e4a00 Id->19 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb94e4a00 Id->1a _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb7de4a00 Id->1b _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80faed10040 Id->1c _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb8ee59c0 Id->1d _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb0224a00 Id->1e _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb8f2b9c0 Id->1f _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb88a19c0 Id->20 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb7f77040 Id->21 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
EtwLogger->0xffffa80fb85c2a00 Id->23 _ETW_SILODRIVERSTATE->0xffffa80faaf3e000
このメモリダンプは、2019年12月26日時点のビルド番号「18362.1」を持つWindows 10環境で採取されています。先ほどと同じように、赤色データの中身を確認してみます。
0: kd> dt _ETW_SILODRIVERSTATE 0xffffa80faaf3e000
nt!_ETW_SILODRIVERSTATE
+0x000 Silo : (null)
+0x008 SiloGlobals : 0xfffff802`6e98e540 _ESERVERSILO_GLOBALS
+0x010 MaxLoggers : 0x40
+0x018 EtwpSecurityProviderGuidEntry : _ETW_GUID_ENTRY
+0x1a8 EtwpLoggerRundown : 0xffffa80f`aae71ac0 -> 0xffffa80f`aae503f0 _EX_RUNDOWN_REF_CACHE_AWARE
+0x1b0 EtwpLoggerContext : 0xffffa80f`aae71cc0 -> 0x00000000`00000001 _WMI_LOGGER_CONTEXT
+0x1b8 EtwpGuidHashTable : [64] _ETW_HASH_BUCKET
+0xfb8 EtwpSecurityLoggers : [8] 3
+0xfc8 EtwpSecurityProviderEnableMask : 0x3 ''
+0xfcc EtwpShutdownInProgress : 0n0
+0xfd0 EtwpSecurityProviderPID : 0x2bc
+0xfd8 PrivHandleDemuxTable : _ETW_PRIV_HANDLE_DEMUX_TABLE
+0xff8 EtwpCounters : _ETW_COUNTERS
+0x1008 LogfileBytesWritten : _LARGE_INTEGER 0x13877c00
+0x1010 ProcessorBlocks : 0xffffa80f`aaf3f240 _ETW_SILO_TRACING_BLOCK
+0x1018 ContainerRestoreWnfSubscription : 0xffff8181`48a55f70 _EX_WNF_SUBSCRIPTION
+0x1020 PartitionId : _GUID {00000000-0000-0000-0000-000000000000}
+0x1030 ParentId : _GUID {00000000-0000-0000-0000-000000000000}
+0x1040 QpcOffsetFromRoot : _LARGE_INTEGER 0x0
+0x1048 PartitionType : 0
+0x104c SystemLoggerSettings : _ETW_SYSTEM_LOGGER_SETTINGS
+0x11c0 EtwpStartTraceMutex : _KMUTANT
ご覧のように、先ほどの情報とは大きく異なる情報が返されています。この情報はWMIとSiloとの関係が緊密であることを示しています。本館の調査経験では、この情報はセキュリティー分析、パフォーマンス低下、Anomaly検出などの作業で大いに役に立つことが分かっています。