IT談話館
Windowsカーネル空間診断サービス
Windows 10 1607 Anniversary Update (AU)のカーネル内部解析
本稿では、AU適応前後の64ビットWindows 10環境で採取いたしましたActive Memory Dumpを次の視点から本「IT談話館」の独自解析コードで解析し、Windows 10の内部変遷を調査しています。
- Systemプロセスをはじめとする主要なプロセス間の親子関係を解析する
- _eprocessオブジェクトではなく、_kprocessオブジェクトを解析対象とする
- AU適応前に存在していた_eprocessゾンビプロセスは適応後消滅しているが、詳しい解析は行わない
本稿では、プロセス間の親子関係のみの解析結果を紹介しておりますから、より詳細な内部解析にご興味をお持ちの方は、本「IT談話館」の次のような記事に目を通されるとよろしいかもしれません。プロセス間の親子関係は、セキュリティー確保やアプリケーション開発では、これまで以上に重要な意味を持ってきております。
まずは、AU適応前のWindows 10 Systemプロセスの親子関係から。
0: kd> vertarget
Windows 10 Kernel Version 10586 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 10586.306.amd64fre.th2_release_sec.160422-1850
Machine Name:
Kernel base = 0xfffff801`b640d000 PsLoadedModuleList = 0xfffff801`b66ebcd0
Debug session time: Mon Jun 13 10:44:34.419 2016 (UTC + 9:00)
System Uptime: 1 days 22:04:59.017
0xFFFFE000A9A9F700 ParentId->0004 System
01 0xFFFFE000AB153040 ParentId->0004 ChildId->0150 smss.exe
Systemプロセスは、セッションマネージャープロセス「smss.exe」を起動しています。次に、同じ解析コードを実行し、AU適応後のWindows 10 Systemプロセスの親子関係を調査してみます。
1: kd> vertarget
Windows 10 Kernel Version 14393 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 14393.0.amd64fre.rs1_release.160715-1616
Machine Name:
Kernel base = 0xfffff802`4161c000 PsLoadedModuleList = 0xfffff802`41921060
Debug session time: Sat Aug 6 11:20:38.904 2016 (UTC + 9:00)
System Uptime: 0 days 1:54:36.603
0xFFFFDF83EC2A9040 ParentId->0004 System
01 0xFFFFDF83ED891780 ParentId->0004 ChildId->0138 smss.exe
02 0xFFFFDF83EF094040 ParentId->0004 ChildId->0a04 MemCompression
ご覧のように、Systemプロセスはセッションマネージャープロセス「smss.exe」に加え、「MemCompression」という名称のプロセスを起動しています。このプロセスは、次のように、Systemプロセスや「smss.exe」プロセスと同じように、Sessionオブジェクトを持っていません。
1: kd> dt _eprocess 0xFFFFDF83EC2A9040 -y session
ntdll!_EPROCESS
+0x340 SessionProcessLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
+0x400 Session : (null)
1: kd> dt _eprocess 0xFFFFDF83ED891780 -y session
ntdll!_EPROCESS
+0x340 SessionProcessLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
+0x400 Session : (null)
1: kd> dt _eprocess 0xFFFFDF83EF094040 -y session
ntdll!_EPROCESS
+0x340 SessionProcessLinks : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
+0x400 Session : (null)
通常のプロセスは、次のように、Sessionオブジェクトを持っています。
1: kd> dt _eprocess 0xFFFFDF83EEF56780 -y session
ntdll!_EPROCESS
+0x340 SessionProcessLinks : _LIST_ENTRY [ 0xffffdf83`edf71ac0 - 0xffffdf83`eef58ac0 ]
+0x400 Session : 0xffffc980`f9910000 _MM_SESSION_SPACE
「MemCompression」プロセスの詳細な解析は本稿では割愛します。次に、サービスコントロールマネージャープロセス「services.exe」の親子関係を見てみます。
0: kd> vertarget
Windows 10 Kernel Version 10586 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 10586.306.amd64fre.th2_release_sec.160422-1850
Machine Name:
Kernel base = 0xfffff801`b640d000 PsLoadedModuleList = 0xfffff801`b66ebcd0
Debug session time: Mon Jun 13 10:44:34.419 2016 (UTC + 9:00)
System Uptime: 1 days 22:04:59.017
0xFFFFE000ABBB4380 ParentId->0284 services.exe
01 0xFFFFE000ABBF6840 ParentId->0284 ChildId->02ec svchost.exe
02 0xFFFFE000AB2763C0 ParentId->0284 ChildId->0354 svchost.exe
03 0xFFFFE000ABBE4840 ParentId->0284 ChildId->0208 svchost.exe
04 0xFFFFE000ABBE6840 ParentId->0284 ChildId->0210 svchost.exe
05 0xFFFFE000ABBE0840 ParentId->0284 ChildId->03bc svchost.exe
06 0xFFFFE000AC55C840 ParentId->0284 ChildId->04f8 svchost.exe
07 0xFFFFE000AAE5B080 ParentId->0284 ChildId->0500 svchost.exe
08 0xFFFFE000AC55A840 ParentId->0284 ChildId->0508 svchost.exe
09 0xFFFFE000AB85D840 ParentId->0284 ChildId->054c svchost.exe
10 0xFFFFE000ABBDA840 ParentId->0284 ChildId->07c8 spoolsv.exe
11 0xFFFFE000A9A99080 ParentId->0284 ChildId->067c svchost.exe
12 0xFFFFE000AC7A7840 ParentId->0284 ChildId->078c svchost.exe
13 0xFFFFE000AC7A5840 ParentId->0284 ChildId->07b0 armsvc.exe
14 0xFFFFE000ABD1A840 ParentId->0284 ChildId->004c svchost.exe
15 0xFFFFE000ABD16840 ParentId->0284 ChildId->0774 mqsvc.exe
16 0xFFFFE000ABDA7840 ParentId->0284 ChildId->0888 svchost.exe
17 0xFFFFE000AC795080 ParentId->0284 ChildId->08a4 Sysmon.exe
18 0xFFFFE000ABDA3840 ParentId->0284 ChildId->08c8 MsMpEng.exe
19 0xFFFFE000ABEF3840 ParentId->0284 ChildId->0a80 svchost.exe
20 0xFFFFE000AAE29840 ParentId->0284 ChildId->0518 SearchIndexer.
21 0xFFFFE000AC197300 ParentId->0284 ChildId->1008 svchost.exe
22 0xFFFFE000AA584080 ParentId->0284 ChildId->13f4 svchost.exe
23 0xFFFFE000AD2F6540 ParentId->0284 ChildId->0ba4 svchost.exe
24 0xFFFFE000AD2AE840 ParentId->0284 ChildId->059c NisSrv.exe
25 0xFFFFE000AD5D7840 ParentId->0284 ChildId->0ca8 TrustedInstall
26 0xFFFFE000AAA8F5C0 ParentId->0284 ChildId->10ac WmiApSrv.exe
AU適応以前は、26個のサービスを起動しています。AU適応後のサービスはどのように変化するでしょうか。
1: kd> vertarget
Windows 10 Kernel Version 14393 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 14393.0.amd64fre.rs1_release.160715-1616
Machine Name:
Kernel base = 0xfffff802`4161c000 PsLoadedModuleList = 0xfffff802`41921060
Debug session time: Sat Aug 6 11:20:38.904 2016 (UTC + 9:00)
System Uptime: 0 days 1:54:36.603
0xFFFFDF83EE54A780 ParentId->028c services.exe
01 0xFFFFDF83EE544780 ParentId->028c ChildId->0320 svchost.exe
02 0xFFFFDF83EEAE3780 ParentId->028c ChildId->0370 svchost.exe
03 0xFFFFDF83EEAD9780 ParentId->028c ChildId->0118 svchost.exe
04 0xFFFFDF83EEADB780 ParentId->028c ChildId->0194 svchost.exe
05 0xFFFFDF83EEAD7780 ParentId->028c ChildId->01e8 svchost.exe
06 0xFFFFDF83EEACB780 ParentId->028c ChildId->04c0 svchost.exe
07 0xFFFFDF83EEAC9780 ParentId->028c ChildId->04c8 svchost.exe
08 0xFFFFDF83EEC33180 ParentId->028c ChildId->04f4 svchost.exe
09 0xFFFFDF83EED16780 ParentId->028c ChildId->0620 svchost.exe
10 0xFFFFDF83EDF7A780 ParentId->028c ChildId->06bc svchost.exe
11 0xFFFFDF83EEE27780 ParentId->028c ChildId->0734 spoolsv.exe
12 0xFFFFDF83EEE17780 ParentId->028c ChildId->0608 svchost.exe
13 0xFFFFDF83EEE13780 ParentId->028c ChildId->0808 svchost.exe
14 0xFFFFDF83EEE11780 ParentId->028c ChildId->0810 svchost.exe
15 0xFFFFDF83EEF71440 ParentId->028c ChildId->08b4 svchost.exe
16 0xFFFFDF83EEF64780 ParentId->028c ChildId->08e0 Sysmon.exe
17 0xFFFFDF83EEF62780 ParentId->028c ChildId->0900 mqsvc.exe
18 0xFFFFDF83EEF58780 ParentId->028c ChildId->0984 svchost.exe
19 0xFFFFDF83EEF56780 ParentId->028c ChildId->0998 MsMpEng.exe
20 0xFFFFDF83EDF71780 ParentId->028c ChildId->08d8 svchost.exe
21 0xFFFFDF83EF361780 ParentId->028c ChildId->0240 NisSrv.exe
22 0xFFFFDF83EE355780 ParentId->028c ChildId->0d44 SearchIndexer.
23 0xFFFFDF83EC711780 ParentId->028c ChildId->0ef8 svchost.exe
サービス数が3個ほど減っているようです。特に、「WmiApSrv.exe」サービスの姿がないのが気になります。このサービスは、カーネルレベルでのトレースロガー機能の制御を行っていますから、ロガー数を確認しておきます。
0: kd> vertarget
Windows 10 Kernel Version 10586 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 10586.306.amd64fre.th2_release_sec.160422-1850
Machine Name:
Kernel base = 0xfffff801`b640d000 PsLoadedModuleList = 0xfffff801`b66ebcd0
Debug session time: Mon Jun 13 10:44:34.419 2016 (UTC + 9:00)
System Uptime: 1 days 22:04:59.017
-00: Not Set!
-01: Not Set!
002 LoggerMode->2800480 LoggerName->Circular Kernel Context Logger
003 LoggerMode->108001c0 LoggerName->Eventlog-Security
004 LoggerMode->10808400 LoggerName->AppModel
005 LoggerMode->10808400 LoggerName->Audio
006 LoggerMode->400000 LoggerName->TCPIPLOGGER
007 LoggerMode->18800180 LoggerName->DefenderApiLogger
008 LoggerMode->188001c0 LoggerName->DefenderAuditLogger
009 LoggerMode->10800180 LoggerName->DiagLog
010 LoggerMode->11800180 LoggerName->EventLog-Application
011 LoggerMode->11800180 LoggerName->EventLog-ForwardedEvents
012 LoggerMode->11800180 LoggerName->EventLog-Microsoft-Windows-Sysmon-Operational
013 LoggerMode->10800180 LoggerName->EventLog-System
014 LoggerMode->800002 LoggerName->LwtNetLog
015 LoggerMode->800002 LoggerName->Microsoft Security Client
016 LoggerMode->800005 LoggerName->Microsoft Security Client OOBE
017 LoggerMode->10808400 LoggerName->NtfsLog
-18: Not Set!
019 LoggerMode->10800190 LoggerName->UBPM
020 LoggerMode->800082 LoggerName->WdiContextLog
021 LoggerMode->800002 LoggerName->WiFiSession
022 LoggerMode->10800002 LoggerName->umstartup
023 LoggerMode->800002 LoggerName->Terminal-Services-LSM
024 LoggerMode->800002 LoggerName->Terminal-Services-RCM
025 LoggerMode->800002 LoggerName->Terminal-Services-RPC-Client
026 LoggerMode->800002 LoggerName->Terminal-Services-Unified-APIs
027 LoggerMode->800002 LoggerName->Terminal-Services-SessionEnv
028 LoggerMode->800002 LoggerName->Terminal-Services-SessionMsg
029 LoggerMode->800002 LoggerName->Terminal-Services-IP-Virtualization
030 LoggerMode->10800002 LoggerName->UserMgr
031 LoggerMode->10802102 LoggerName->WFP-IPsec Diagnostics
032 LoggerMode->804022 LoggerName->MSMQ
-33: Not Set!
034 LoggerMode->800002 LoggerName->MpWppTracing-06112016-124057-00000003-ffffffff
035 LoggerMode->8800110 LoggerName->Diagtrack-Listener
Eventlog-SecurityやEventLog-Systemなどはお馴染みのロガーであり、赤色の2種類のロガーは特別に追加したロガーです。AU適応後のロガー数はどのように変化するでしょうか。
1: kd> vertarget
Windows 10 Kernel Version 14393 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 14393.0.amd64fre.rs1_release.160715-1616
Machine Name:
Kernel base = 0xfffff802`4161c000 PsLoadedModuleList = 0xfffff802`41921060
Debug session time: Sat Aug 6 11:20:38.904 2016 (UTC + 9:00)
System Uptime: 0 days 1:54:36.603
-00: Not Set!
-01: Not Set!
002 LoggerMode->2800480 LoggerName->Circular Kernel Context Logger
003 LoggerMode->108001c0 LoggerName->Eventlog-Security
004 LoggerMode->10808400 LoggerName->AppModel
005 LoggerMode->10808400 LoggerName->Audio
-06: Not Set!
007 LoggerMode->18800180 LoggerName->DefenderApiLogger
008 LoggerMode->188001c0 LoggerName->DefenderAuditLogger
009 LoggerMode->10800180 LoggerName->DiagLog
010 LoggerMode->11800180 LoggerName->EventLog-Application
011 LoggerMode->11800180 LoggerName->EventLog-ForwardedEvents
012 LoggerMode->11800180 LoggerName->EventLog-Microsoft-Windows-Sysmon-Operational
013 LoggerMode->10800180 LoggerName->EventLog-System
014 LoggerMode->800002 LoggerName->LwtNetLog
015 LoggerMode->800002 LoggerName->Microsoft Security Client
016 LoggerMode->800005 LoggerName->Microsoft Security Client OOBE
017 LoggerMode->10808400 LoggerName->NtfsLog
-18: Not Set!
019 LoggerMode->10800190 LoggerName->UBPM
020 LoggerMode->800082 LoggerName->WdiContextLog
021 LoggerMode->800002 LoggerName->WiFiSession
022 LoggerMode->10800002 LoggerName->umstartup
023 LoggerMode->10800002 LoggerName->UserNotPresentTraceSession
024 LoggerMode->10808400 LoggerName->COM
025 LoggerMode->800002 LoggerName->Terminal-Services-LSM
026 LoggerMode->800002 LoggerName->Terminal-Services-RCM
027 LoggerMode->800002 LoggerName->Terminal-Services-RPC-Client
028 LoggerMode->800002 LoggerName->Terminal-Services-Unified-APIs
029 LoggerMode->800002 LoggerName->Terminal-Services-SessionEnv
030 LoggerMode->800002 LoggerName->Terminal-Services-SessionMsg
031 LoggerMode->800002 LoggerName->Terminal-Services-IP-Virtualization
032 LoggerMode->10800002 LoggerName->UserMgr
033 LoggerMode->10802102 LoggerName->WFP-IPsec Diagnostics
034 LoggerMode->804022 LoggerName->MSMQ
035 LoggerMode->800002 LoggerName->MpWppTracing-08062016-092742-00000003-ffffffff
036 LoggerMode->8800110 LoggerName->Diagtrack-Listener
赤色の2個のロガーなどが追加されています。UserNotPresentTraceSessionという名称のロガーはどのような情報をカーネルレベルで記録しているのかたいへん気になるところですが、本稿では割愛いたします。これらのロガーは、「DKOMベースWindows内部解析技術の適応分野」全般で重要な役割を果たします。その方面にご関心をお持ちの方は、本館の「この記事」などに目を通されるとよろしいかもしれません。
実務的な解析コードの開発技術の導入をご予定の場合には、所属チーム内でご協議の上、本「IT談話館」の「オンサイトセミナー」の受講をご検討いただけますと幸いでございます。