連載
» 2017年03月01日 05時00分 公開

山市良のうぃんどうず日記(85):トラブルシューター泣かせのイベントログメッセージ(その2)──「システム時刻の変更」に脆弱性あり? (3/3)

[山市良,テクニカルライター]
前のページへ 1|2|3       

また日本語固有の問題? それとも?

 このような問題を発見したとき、まず疑うのが「言語固有の問題ではないか」ということです。特に、Windows 10以降、日本語環境でこうした問題が多いような気がします(気がするだけかもしれませんが)。

 そこで、Windows 10 Anniversary Updateの同じビルドを実行する英語版の環境で確かめてみました。すると、英語版でもGet-EventLogコマンドレットは「Possible detection of CVE(CVEの検出の可能性)」と出力しました(画面5)。

画面5 画面5 Windows 10 Anniversary Update英語版のGet-EventLogコマンドレットの出力結果。英語版でもメッセージがおかしい

 次に疑うのが「Windowsのバージョン固有の問題ではないか」ということです。そこで、Windows 10 November Update(バージョン1511)とWindows 8.1でGet-EventLogコマンドレットを実行してみました。すると、Windows 10 November Update以前(Windows 8.1を含む)は、次のようなメッセージを表示しました(画面6)。

ソース'Microsoft-Windows-Kernel-General'のイベントID'1'の説明が見つかりません。必要なレジストリ情報またはメッセージを表示するメッセージDLLファイルがローカルコンピュータに存在しない可能性があります……

画面6 画面6 Windows 10 バージョン1511以前(Windows 8.1を含む)のGet-EventLogコマンドレットは、システム時刻の変更イベントをメッセージに変換できないという別の問題があるらしい

 「CVEの検出の可能性」問題は再現しませんでしたが、問題のイベントを“人間向けの(人が読みやすい)メッセージに変換できていない”という別の問題があるようです。

 Windowsのイベントログは、ログそのものには人間向けのメッセージは含まれず、人間向けのメッセージに差し込むデータだけを保持しています。そして、人間向けのメッセージはというと、「メッセージDLLファイル(マニフェスト)」として別ファイルに用意されており、システムに登録されます(wevtutilコマンドには、マニフェストの登録/削除のオプションが用意されています)。これにより、ログのサイズを抑制するとともに、多言語対応が可能になっているのです。

 Windows SysinternalsのProcess Monitor(Procmon)や「Strings」を使って調べてみると、Windows 10 Anniversary UpdateのGet-EventLogコマンドレットとGet-WinEventコマンドレットは、どちらもソース「Microsoft-Windows-Kernel-General」のマニフェストとして、システムに登録されている「C:\Windows\System32\Microsoft-Windows-System-Events.dll」と「言語(ja-jp)\Microsoft-Windows-System-Events.dll.mui)を参照していました。

 そして、「Microsoft-Windows-System-Events.dll.mui」には、「CVEの検出の可能性」と「システム時刻は……に変更されました」両方のメッセージが含まれていることを確認しました(画面7)。

画面7 画面7 ProcmonとStringsでイベントマニフェストを特定し、文字列を検索した(Stringsは日本語に対応していないため、英語言語パックの環境で英語版の「.dll.mui」を検索して確認)

最後に、きちんとマイクロソフトにご報告を

 さて、今回はGet-EventLogコマンドレットの問題が、Windows 10 Anniversary Update以降(Insider Previewビルドでも、筆者が確認した少なくとも2017年2月初めのビルドではそうでした)およびWindows Server 2016の問題であることを特定しました。筆者ができるのはここまでです。マイクロソフトのフィードバックチャネルの1つを通じてフィードバックしたので、今後、修正されることを期待します。

 そもそも、イベントログを取得するならGet-EventLogコマンドレットよりも、より新しいGet-WinEventコマンドレットがお勧めです。筆者がGet-EventLogコマンドレットを使っていたのは、シンプルで使い慣れているのと、古い形式のイベントログ(Application、セキュリティ、システム)を高速に処理できるからです。Get-EventLogコマンドレットは、Setupログや「アプリケーションとサービスログ」(Microsoft-Windows-WindowsUpdateClient/Operationalなど)を検索することができません。

 最後に、トラブルシューティングには、Windows Sysinternalsのユーティリティーが大いに役立ちます。ただし、Windows Sysinternalsには「PsLogList」というユーティリティーがありますが、実はPsLogListもまた、Get-EventLogと同じように「CVEの検出の可能性」と出力するのです。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門−完全版』(日経BP社)。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。