オンサイトセミナー
豊田孝の「IT談話館」 Windowsメモリダンプ解析を依頼する Windowsクラッシュダンプ解析技術




メモリ解析サービス



Windows 10 1703から1709へのカーネル内部遷移と分岐予測


 バージョン1709からは、プロセスオブジェクトにMitigationフラグという名称の32ビットのフラグが導入されています。このフラグには、Windows 8から導入された「SetProcessMitigationPolicy」API関数のパラメータがセットされ、各種セキュリティー保護機能を制御できるようになっています。このAPI関数の仕様はMicrosoft社の「このページ」から公開されています。どちらかといえば、カーネル内部のプロセスオブジェクトの仕様が先に変更され、その変更に同期して「SetProcessMitigationPolicy」API関数が公開された、と考えられます。
 セキュリティーの観点からは、状況に応じてセキュリティー保護機能を制御できる利点は大きいといってよろしいと思います。本稿では、Windows 10 1709 Creators Update環境で採取されたActive Memory Dumpを本「IT談話館」の「独自解析コード」で解析し、Windows 10 1703環境のセキュリティー保護機能との相違点を調査しています。

 バージョン1709システム環境におけるMitigationフラグのデフォルト値と各プロセスオブジェクトの関係概要は次のようになっています。
MitigationFlags->0x00000060	System
MitigationFlags->0x00000121	smss.exe
MitigationFlags->0x00000121	csrss.exe
MitigationFlags->0x00000021	wininit.exe
MitigationFlags->0x000001a1	services.exe
MitigationFlags->0x00000021	lsass.exe
MitigationFlags->0x00000021	WUDFHost.exe
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x00004039	fontdrvhost.ex
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x01000821	svchost.exe
[---]
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x00000040	MemCompression
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x01000821	svchost.exe
[---]
MitigationFlags->0x00000021	SecurityHealth
MitigationFlags->0x00000000	armsvc.exe
MitigationFlags->0x008800a1	MsMpEng.exe
[---]
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x00000121	csrss.exe
MitigationFlags->0x00000021	winlogon.exe
MitigationFlags->0x00004039	fontdrvhost.ex
MitigationFlags->0x00000021	dwm.exe
MitigationFlags->0x00000021	sihost.exe
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x00000021	taskhostw.exe
MitigationFlags->0x00000001	explorer.exe
MitigationFlags->0x00000039	ShellExperienc
MitigationFlags->0x00000039	SearchUI.exe
MitigationFlags->0x000000b1	RuntimeBroker.
MitigationFlags->0x000000b1	RuntimeBroker.
MitigationFlags->0x00000021	ctfmon.exe
MitigationFlags->0x00000021	MSASCuiL.exe
[---]
MitigationFlags->0x00000021	chrome.exe
MitigationFlags->0x00000021	chrome.exe
MitigationFlags->0x00000021	chrome.exe
MitigationFlags->0x00a900a1	chrome.exe
MitigationFlags->0x00a910a1	chrome.exe
MitigationFlags->0x0cad01bd	dllhost.exe
MitigationFlags->0x00000021	ApplicationFra
MitigationFlags->0x00800539	MicrosoftEdge.
MitigationFlags->0x00000021	browser_broker
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x00a80039	Windows.WARP.J
MitigationFlags->0x000000b1	RuntimeBroker.
MitigationFlags->0x00a8c03b	MicrosoftEdgeC
MitigationFlags->0x000000b1	RuntimeBroker.
MitigationFlags->0x00a8053b	MicrosoftEdgeC
MitigationFlags->0x00a8c53b	MicrosoftEdgeC
MitigationFlags->0x000000b1	RuntimeBroker.
MitigationFlags->0x00a8053b	MicrosoftEdgeC
MitigationFlags->0x00a8c53b	MicrosoftEdgeC
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x00a8c53b	MicrosoftEdgeC
MitigationFlags->0x00000021	ImeBroker.exe
MitigationFlags->0x1c000021	SystemSettings
[---]
 Mitigationフラグは、2017年秋に公開されたCreatorsと一般に呼ばれているWindows 10 1709で導入されたフラグであり、Windows 10 1703には存在しません。ただし、フラグを構成する個々のビットは以前のWindows 10のプロセスオブジェクトにも存在していましたが、どちらかといえば、取り急ぎ追加された印象があり、あちこちに散乱している状態でした。Mitigationフラグは散乱していた複数ビットを一か所にかき集め、整理する方向で構成されています。この整理はちょっとした散乱状態の解消といった意味合いも否定できませんが、将来の仕様変更や保守の効率化と費用軽減に寄与することは間違いないところでしょう。

 上の情報の中には、「MitigationFlags->0x00000000 armsvc.exe」などのデータが含まれ、セキュリティー保護機能が一切有効となっていないプロセスも複数存在していることが分かります。そのようなプロセスの多くは、旧式の32ビットプロセスです。外部からの攻撃の入り口になる恐れもありますから、アプリケーションの導入時には注意したいところです。
 また、重要なプロセスであるSystemプロセスは「MitigationFlags->0x00000060」というフラグ値を持ち、多くの(余分な)保護機能を有効としていません。このプロセスに何らかの不具合が発生した場合は、「Idleプロセス」に制御が移り、基本的には、システムがクラッシュすると考えてよいでしょう。赤色で強調されている数値は、現在のブラウザ市場を二分しているGoogle社のChromeとMicrosoft社のEdgeそれぞれにおけるWin32k入力機能を抑制制御するフラグの値です。フラグ値をビット分解してみますと、2つのブラウザはWin32k入力機能を次のように制御していることが分かります。


無料登録申し込みメールの送信
閲覧情報は自動返信されます。



0: kd> vertarget
Windows 10 Kernel Version 16299 MP (2 procs) Free x64
Product: WinNt, suite: TerminalServer SingleUserTS
Built by: 16299.15.amd64fre.rs3_release.170928-1534
Machine Name:
Kernel base = 0xfffff802`e5a99000 PsLoadedModuleList = 0xfffff802`e5dfafb0
Debug session time: Thu Nov 30 09:08:09.753 2017 (UTC + 9:00)
System Uptime: 1 days 1:29:36.413

Disabled->0	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	chrome.exe
Disabled->0	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	chrome.exe
Disabled->0	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	chrome.exe
Disabled->0	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	chrome.exe
Disabled->1	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	chrome.exe
Disabled->0	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	MicrosoftEdge.
Disabled->0	AuditDisabled->0	EnableFilter->1	AuditFiltered->1	MicrosoftEdgeC
Disabled->0	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	MicrosoftEdgeC
Disabled->0	AuditDisabled->0	EnableFilter->1	AuditFiltered->1	MicrosoftEdgeC
Disabled->0	AuditDisabled->0	EnableFilter->0	AuditFiltered->0	MicrosoftEdgeC
Disabled->0	AuditDisabled->0	EnableFilter->1	AuditFiltered->1	MicrosoftEdgeC
Disabled->0	AuditDisabled->0	EnableFilter->1	AuditFiltered->1	MicrosoftEdgeC
 赤色のデータは次のようなことを示しています。  ご覧のように、2つのブラウザの設計思想は一目瞭然です。「このブログ」を読んでみると、Google社とMicrosoft社の2つのブラウザチームはお互いの開発姿勢を強く意識しながら作業していることが分かります。Win32k入力機能の無効化は、CFG、DEP、フォントロード抑制制御、ダイナミックコード展開制御などともにセキュリティー保護オプションを構成し、Windows 10カーネル層におけるオプション構成と実装はビルド単位で異なっています。つまり、一口にWindows 10といいましても、出荷されるカーネルはビルド単位で(時には、劇的に)異なります。たとえば、2018年1月に発生した「Meltdown and Spectre」問題への更新パッチを当てると、Systemプロセスの「MitigationFlags->0x00000060」は次のように変化します。
MitigationFlags->0x40000060	System
MitigationFlags->0x00000121	smss.exe
MitigationFlags->0x00000121	csrss.exe
MitigationFlags->0x00000021	wininit.exe
MitigationFlags->0x00000121	csrss.exe
MitigationFlags->0x000001a1	services.exe
MitigationFlags->0x00000021	lsass.exe
MitigationFlags->0x00000021	WUDFHost.exe
MitigationFlags->0x01000821	svchost.exe
MitigationFlags->0x00004039	fontdrvhost.ex
MitigationFlags->0x01000821	svchost.exe
[---]
 Systemプロセスのフラグは、「MitigationFlags->0x00000060」から「MitigationFlags->0x40000060」へ変更されています。この変更は、間接分岐予測を抑制する対策がSystemプロセスレベルで(こっそりと)とられたことを示しています。この例のように、Windowsのカーネル内部は、時代の要請を受けながら敏感に変化しています。そして、変化の技術的な背景が説明されることはありません。本「IT談話館」のこの「Windows XP/7/8/10のプロセス間親子関係解析とサンドボックス」記事では、Windows XPからWindows 10までのプロセス間親子関係の変遷を紹介しています。セキュリティーを向上させるため、プロセス間の親子関係を変更し、サンドボックス化を推し進めている様子がはっきり見て取れます。その分野に関心のある場合には、目を通されるとよろしいかもしれません。

 本「IT談話館」は、高度な内部解析技術を保有し、Windowsクラッシュダンプ、中でもカーネルメモリダンプとWindows 10 Active Memory Dumpの「メモリダンプ解析ビジネス」を展開しています。新しく導入されたAPI関数とカーネルとの本質的な関係やシステムへの影響の評価なども解析工程の一部として行っています。


サービスメニュー
Windowsクラッシュダンプ解析サービス Windowsメモリフォレンジック

Copyright©豊田孝 2004- 2018
本日は2018-01-23です。