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




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



WinDbg、WMI、システムロガー


 WindowsはSaaSとして提供される時代に入り、その内部は頻繁に更新されています。更新内容の多くは、いろいろな事情と理由から、公にされることはほとんどありません。最新のユーザー空間とカーネル空間に関する信頼できる技術情報を取得するには、「時間と予算」を投資し、高度な内部解析技術を習得する必要があります。本「IT談話館」が一般公開する記事は、0dayをはじめとする脆弱性研究者、組み込みシステム開発者、デジタルフォレンジック技術者、あるいは、EDR製品のビジネス関係者に広く読まれています。特に、Windowsカーネル空間の解析技術情報は多くの人に注目されています。

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

 メモリダンプを解析すると、システム内の「異様な動き」を検出・解析することができます。「異様な動き」の中には、システムパフォーマンスの低下、既存アプリの動作異常、システムクラッシュ原因、あるいは、セキュリティー脅威なども含まれます。「本館サービス」をご利用の際には、所属チーム内でご協議の上、「お問い合わせ」頂けると幸いです。

 セキュリティーの視点から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、WMI、システムロガー(基礎)」前編に続き、WMIを取り上げます。WMIと一口に言ってもその守備範囲が広いため、ここではWMIと、上記リストの先頭にあるSiloという概念の関係性に焦点を当てています。Siloの基礎的な解析工程は、本「IT談話館」のこの記事「WinDbgとWindowsカーネルアーキテクチャー」で紹介しています。

 Windowsシステム内部、特にカーネル空間はバージョン単位ではなくビルド単位で頻繁に更新されています。未公開の情報を含む最新内部機能を調査する際には、カーネル内部を直接覗いて見るのも一案です。多くの最新実装機能や実装予定の機能はカーネル空間内に表現、あるいは、予告されています。

 本「IT談話館」は、実際のところ、SiloやContainerなどの概念とビジネスを通して実践的に対峙した経験はこれまでのところありません。しかし、WMIに関する経験値は豊富であり、SiloもWMIと内部的に関係しているはず!、と想像していました。「想像」や「仮説」でビジネスができるほど本館の顧客は甘くないため、Windows 10環境で採取した2種類のメモリダンプを独自の解析コードで調査してみました。結論を急げば、先の想像は的を得ています。

 まずは次の第1解析情報を見てみます。
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

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
 この調査対象のメモリダンプは2018年6月25日に採取されています。ビルド番号は「14393.2068」と記されています。赤色で強調表示されているデータはSiloに関係しています。このデータの中身を見てみます。
3: kd> dt _ETW_SILODRIVERSTATE 0xffff9c876c0c8000
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との関係が緊密であることを言明しています。この情報の中には、「0xfffff802`6e98e540 _ESERVERSILO_GLOBALS」という情報が提供されており、解析作業を進める上での貴重なヒントとなります。実際、本館の調査経験では、この情報はセキュリティー分析、パフォーマンス低下、Anomaly検出などの作業で大いに役に立つことが分かっています。

 最近のWindowsに追加されたあの機能が分からない。これまで正常に動作していたコードが突然エラーを返す。さらには、突然画面に表示される警告メッセージの意味がさっぱり理解できない。多くの現場ではこのような声が聞こえます。すでに冒頭でも触れましたが、SiloやWindowsアーキテクチャーに関する基礎的な知識は、本「IT談話館」のこの記事「WinDbgとWindowsカーネルアーキテクチャー」で提供されています。

 従来はこのレベルの技術の習得には海外の資料や人材に頼る必要がありましたが、本館主筆の「豊田孝」はBlackHatなどのカンファレンスでプレゼンする海外の先端技術者に助言を与えています。時代が求める人材の育成と技術の習得には、「時間と予算の投資」が必要です。



ビジネスメニュー




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

Copyright©豊田孝 2004- 2020
本日は2020-07-03です。