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




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




Windows 8/10とJobオブジェクト(基礎)


 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
 本稿では、上記リストにあるJobオブジェクトを取り上げています。このオブジェクトは、Windows 2000時代から存在しますが、Windows 8以降その役割が強化され、極めて重要なオブジェクトの一つとなっています。ここでは、Jobオブジェクトを次のように整理しておきます。  米Microsoft社はこのような「Job情報」を公開しています。Google社の一部チームは、セキュリティー確保の観点から、Jobオブジェクトを「このように」認識しています。

 Jobオブジェクトは、次のような4種類の基本概念の上に構築されていると考えられます。    本稿では、Windows 10環境で採取した「Active Memory Dump」を本館の独自解析コードで解析し、Jobオブジェクトの初歩的な内部構造を紹介しています。まずは、次の情報をご覧ください。なお、解析コードの開発知識の習得には、「時間と予算」の投資が必要です。
1: kd> version
Windows 10 Kernel Version 15063 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Kernel base = 0xfffff800`d5287000 PsLoadedModuleList = 0xfffff800`d55d35c0
Debug session time: Sat Aug 26 08:15:56.376 2017 (UTC + 9:00)
System Uptime: 4 days 0:30:14.078


	EJobNotFound	ActiveThreads->00000032	chrome.exe(0xffffdb8ccd082080)
	EJobNotFound	ActiveThreads->00000007	chrome.exe(0xffffdb8ccd964640)
	EJobNotFound	ActiveThreads->00000002	chrome.exe(0xffffdb8ccdf5d080)
+JobId->1860	PEJob->0xffffdb8cc9858350	Flags->01800010	Flgas2->00000000	chrome.exe(0xffffdb8ccdc0a080)
	+JobListEntry->0273: JobId->1860	LEJob->0xffffdb8cc9858350	Flags->01800010	Flgas2->00000000
+JobId->1672	PEJob->0xffffdb8cca0f2890	Flags->01800010	Flgas2->00000000	chrome.exe(0xffffdb8cc97ec080)
	+JobListEntry->0274: JobId->1672	LEJob->0xffffdb8cca0f2890	Flags->01800010	Flgas2->00000000
+JobId->1996	PEJob->0xffffdb8ccdafd890	Flags->010c1a00	Flgas2->00000000	MicrosoftEdge.(0xffffdb8cccd23640)
	+JobListEntry->0276: JobId->1996	LEJob->0xffffdb8ccdafd890	Flags->010c1a00	Flgas2->00000000
+JobId->0024	PEJob->0xffffdb8ccdbe1720	Flags->010c1a00	Flgas2->00000000	MicrosoftEdgeC(0xffffdb8cc99c3080)
	+JobListEntry->0278: JobId->0024	LEJob->0xffffdb8ccdbe1720	Flags->010c1a00	Flgas2->00000000
+JobId->1524	PEJob->0xffffdb8cccd6e060	Flags->01041000	Flgas2->00000000	MicrosoftEdgeC(0xffffdb8ccd381080)
	+JobListEntry->0281: JobId->1524	LEJob->0xffffdb8cccd6e060	Flags->01041000	Flgas2->00000000
+JobId->1564	PEJob->0xffffdb8cce4f84f0	Flags->01041000	Flgas2->00000000	MicrosoftEdgeC(0xffffdb8ccddd8080)
	+JobListEntry->0288: JobId->1564	LEJob->0xffffdb8cce4f84f0	Flags->01041000	Flgas2->00000000
 この情報には、先に紹介した4種類の基礎概念がすべて含まれています。実行した本館独自解析コードは、すべてのプロセスを調査し、4種類の基礎概念間に成立しているJobオブジェクト情報を返してきますが、ここでは、Google社のChromeとMicrosoftのEdgeの2つのブラウザのJobオブジェクト情報のみを紹介しています。

 JobオブジェクトはWindows 8からその役割が強化されました。Windows 8.1とWindows 10におけるJobオブジェクトの実装内容を調査してみると、強化作業が完了したわけではなく、現在も続けられていることがはっきり分かります。たとえば、Windows 8.1のJobオブジェクトには「JobId」フィールドなどは実装されていません。従って、今回使用した本館独自解析コードは、Windows 8/8.1環境で採取されたカーネルメモリダンプの解析にはそのまま適応できません。

 上の実行結果内には、異なる値を持つ3種類の「Flags」が含まれています。「Flags」値はJobオブジェクトの基本的な性質を示し、次のような「!job」コマンドで確認することができます。  
1: kd> !job 0xffffdb8cc9858350 f
Job at ffffdb8cc9858350
  Basic Accounting Information
    TotalUserTime:             0x0
    TotalKernelTime:           0x0
    TotalCycleTime:            0x0
    ThisPeriodTotalUserTime:   0x0
    ThisPeriodTotalKernelTime: 0x0
    TotalPageFaultCount:       0x0
    TotalProcesses:            0x1
    ActiveProcesses:           0x1
    FreezeCount:               0
    BackgroundCount:           0
    TotalTerminatedProcesses:  0x0
    PeakJobMemoryUsed:         0x18726
    PeakProcessMemoryUsed:     0x18726
  Job Flags
    [UI limits]
  Limit Information (LimitFlags: 0x2108)
  Limit Information (EffectiveLimitFlags: 0x2108)
    JOB_OBJECT_LIMIT_ACTIVE_PROCESS: 0x1
    JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
    JOB_OBJECT_LIMIT_PROCESS_MEMORY: 0x100000
  Processes assigned to this job:
    PROCESS ffffdb8ccdc0a080
        SessionId: 1  Cid: 1ac0    Peb: e0b069e000  ParentCid: 1ee8
        DirBase: b3d0b000  ObjectTable: ffff918513726a80  HandleCount: 382.
        Image: chrome.exe

  Child jobs:
    

1: kd> !job 0xffffdb8ccdafd890 f
Job at ffffdb8ccdafd890
  Basic Accounting Information
    TotalUserTime:             0x0
    TotalKernelTime:           0x0
    TotalCycleTime:            0x0
    ThisPeriodTotalUserTime:   0x0
    ThisPeriodTotalKernelTime: 0x0
    TotalPageFaultCount:       0x0
    TotalProcesses:            0x1
    ActiveProcesses:           0x1
    FreezeCount:               1
    BackgroundCount:           0
    TotalTerminatedProcesses:  0x0
    PeakJobMemoryUsed:         0x1bf6
    PeakProcessMemoryUsed:     0x1bf6
  Job Flags
    [frozen]
    [wake notification allocated]
    [wake notification enabled]
    [timers virtualized]
    [job swapped]
  Limit Information (LimitFlags: 0x0)
  Limit Information (EffectiveLimitFlags: 0x3800)
  Processes assigned to this job:
    PROCESS ffffdb8cccd23640
        SessionId: 1  Cid: 080c    Peb: bc33151000  ParentCid: 0318
    DeepFreeze
        DirBase: 10f58a000  ObjectTable: ffff918512b1e3c0  HandleCount: 1131.
        Image: MicrosoftEdge.exe

  Child jobs:
    

1: kd> !job 0xffffdb8cce4f84f0 f
Job at ffffdb8cce4f84f0
  Basic Accounting Information
    TotalUserTime:             0x0
    TotalKernelTime:           0x0
    TotalCycleTime:            0x0
    ThisPeriodTotalUserTime:   0x0
    ThisPeriodTotalKernelTime: 0x0
    TotalPageFaultCount:       0x0
    TotalProcesses:            0x1
    ActiveProcesses:           0x1
    FreezeCount:               1
    BackgroundCount:           0
    TotalTerminatedProcesses:  0x0
    PeakJobMemoryUsed:         0x5132
    PeakProcessMemoryUsed:     0x5132
  Job Flags
    [wake notification enabled]
    [timers virtualized]
  Limit Information (LimitFlags: 0x100)
  Limit Information (EffectiveLimitFlags: 0x3900)
    JOB_OBJECT_LIMIT_PROCESS_MEMORY: 0x100000
  Processes assigned to this job:
    PROCESS ffffdb8ccddd8080
        SessionId: 1  Cid: 1d5c    Peb: 70e390f000  ParentCid: 0318
    DeepFreeze
        DirBase: 38993000  ObjectTable: ffff918511944600  HandleCount: 1106.
        Image: MicrosoftEdgeCP.exe

  Child jobs:
    
 機能強化されたJobオブジェクトはプロセスの動作制御やセキュリティー向上をはじめとするWindows搭載デバイスを使用する上で重要な役割を担っています。赤色の情報を見ると、Google ChromeはUser Interface (UI)を制限するとともに、プロセス内部から新規に起動できるプロセスの数を制限していることが分かります。一方、MicrosoftのEdgeは特別なUI制限を設定せず、何らかのチェックをダイナミックに行っていることを示唆しています。「Flags」値は、2つのブラウザの設計思想の違いを示してくれています。また、2つのブラウザが起動されていますが、ダンプ採取時には、Microsoft Edgeではなく、Google Chromeが使われていることなども分かります。

 Windows 10では、ビルド番号が上がるにつれ「svchost.exe」プロセスの数を大幅に増やしています。次に示す情報は「svchost.exe」プロセスとJobオブジェクトの関係を示しています。72個ある「svchost.exe」プロセスのほとんどはJobオブジェクトの制御下に置かれています。
[---]

+046: 0xffffdb8ccc66d640	EJob->0xffffdb8ccc69a060	Flags->01841000	ID->0760	svchost.exe
+047: 0xffffdb8ccc660080	EJob->0xffffdb8ccc69b060	Flags->01841000	ID->0768	svchost.exe
+048: 0xffffdb8ccc7df080	EJob->0xffffdb8ccae2c890	Flags->01841000	ID->0880	svchost.exe
+049: 0xffffdb8ccc88c080	EJob->0xffffdb8ccc8a0890	Flags->01841000	ID->0944	svchost.exe
+050: 0xffffdb8ccc8c7080	EJob->0xffffdb8ccc91e890	Flags->01841000	ID->0912	svchost.exe
+051: 0xffffdb8cccc75640	EJob->0xffffdb8cccc73890	Flags->01841000	ID->0968	svchost.exe
+052: 0xffffdb8cca222080	EJob->0xffffdb8cca84e890	Flags->01841000	ID->1008	svchost.exe
+053: 0xffffdb8cce5d5640	EJob->0xffffdb8cce5f1890	Flags->01841000	ID->0600	svchost.exe
+054: 0xffffdb8cc912b640	EJob->0xffffdb8cca756890	Flags->01841000	ID->0868	svchost.exe
+055: 0xffffdb8cc92e53c0	EJob->0xffffdb8cc982d430	Flags->01841000	ID->1092	svchost.exe
+056: 0xffffdb8cc951e080	EJob->0xffffdb8ccbbac060	Flags->01841000	ID->1168	svchost.exe
+057: 0xffffdb8cc959c640	EJob->0xffffdb8cc9591890	Flags->01841000	ID->1184	svchost.exe
+058: 0xffffdb8cc96dd640	EJob->0xffffdb8cc96ee060	Flags->01841000	ID->1312	svchost.exe
+059: 0xffffdb8cca8f9640	EJob->0xffffdb8cca09a060	Flags->01841000	ID->1388	svchost.exe
+060: 0xffffdb8cca0e5640	EJob->0xffffdb8cc973a890	Flags->01841000	ID->1412	svchost.exe
+061: 0xffffdb8cc9db8640	EJob->0xffffdb8ccc86f470	Flags->01841000	ID->0844	svchost.exe
+062: 0xffffdb8ccc2f8080	EJob->0xffffdb8cccee0060	Flags->01841000	ID->0184	svchost.exe
+063: 0xffffdb8cc987c640	EJob->0xffffdb8ccc5a8890	Flags->01841000	ID->1936	svchost.exe
+064: 0xffffdb8ccddc3080	EJob->0xffffdb8ccd107890	Flags->01841000	ID->1056	svchost.exe
+065: 0xffffdb8cca671640	EJob->0xffffdb8cc9cc7890	Flags->01841000	ID->1328	svchost.exe
	-005: 0xffffdb8ccd4ca640	EJobNotFound	Flags->01841000	svchost.exe
+066: 0xffffdb8ccbb67640	EJob->0xffffdb8cccd02200	Flags->01841000	ID->0204	svchost.exe
+067: 0xffffdb8ccd1b2500	EJob->0xffffdb8cc9fc1890	Flags->01841000	ID->1760	svchost.exe
Jobs->067	NoneJobs->005
 Jobオブジェクトはプロセス制御とセキュリティ確保の面で大変強力なメカニズムであり、今後さらに発展する可能性を示唆しています。この強力なJobオブジェクトをどのように活用するか?本稿で紹介したいくつかの実行結果を見ると、たとえば、72個の「svchost.exe」プロセスの内の5個は、Jobオブジェクトに組み入れられていません。なぜでしょう?このあたりの背景を解析するコードを独自に作成・実行し、背景を解析してみるのも一興でしょう。穿った見方にはなりますが、新規に導入される強力なシステムメカニズムには、強力であるが故の、"知られざる"、副作用が潜んでいることも否定できません。JobオブジェクトはWindows 10ではSiloやServer Siloと不可分の関係を持つようになりました。この方面の情報は本館の「この記事」で提供しています。



ビジネスメニュー




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

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