Windowsの運用管理を快適にする10の裏ワザ/表ワザ
[ テクニカルライター 山市 良 ]

テクニック.7 - 重大障害につながるイベントログを見逃さない

2021年12月10日配信
2023年09月28日更新

yamaichi_tec007_top_1800x540

 

 Windowsイベントログは、システムで発生するシステム、アプリケーション、セキュリティに関する膨大なイベントを記録し、提供するサービスです。Windowsイベントログを使用すると、ハードウェアの障害の予兆、容量不足、システムやアプリケーションの重大なエラー、セキュリティ侵害の痕跡などを調査することができます。Windowsに標準搭載されている[イベントビューアー](Eventvwr.msc)スナップインを使用すると、イベントログを参照したり、フィルター条件を設定して効率的に調査したりできます。しかしながら、[イベントビューアー](Eventvwr.msc)スナップインは現在進行中の問題を調査するのに快適なパフォーマンスを提供できるとは言えません。また、膨大なイベントに埋もれて、重大なイベントの発生を見逃してしまうこともあるでしょう。

 

■ 過去24時間に発生した重大/エラー/警告イベントをすばやく確認する

 WindowsはWindowsイベントログにコマンドラインからアクセスする複数の方法を用意しています。その中で共通のフィルター条件で利用できるPowerShellのGet-WinEventコマンドレットとWevtutilコマンドの2つを紹介します。

 次のコマンドラインの例はいずれも、過去24時間(86400000ミリ秒)にシステム(System)ログに記録された、警告レベル以上のイベント、すなわち警告(レベル3)、エラー(レベル2)、重大(レベル1)イベントをフィルターし、記録された順番に出力するものです(画面1)。

Get-WinEvent -LogName System -FilterXPath "*[System[(Level=1 or Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | Sort -property RecordId | Select

TimeCreated, LevelDisplayName, Message 

または

Wevtutil qe System /rd:true /f:text /q:"*[System[(Level=1 or Level=2 or Level=3) and

TimeCreated[timediff(@SystemTime) <= 86400000]]]" 

 

001

画面1 過去24時間に発生した警告レベル以上のイベントを確認する

 

構造化(XPath)クエリ式の簡単な作り方  

 Get-WinEventコマンドレットとWevtutilコマンドはどちらも、構造化(XPath)クエリ式でフィルター条件を設定します。クエリ式を作成するのが難しそうと思うかもしれませんが、実は非常に簡単です。  
 [イベントビューアー](Eventvwr.msc)スナップインを開いて、目的のログを選択し、[現在のログをフィルター…]をクリックします。[フィルター]タブのGUIでフィルター条件を設定したら、[XML]タブに切り替えます。すると、&lt;Select&gt;セクション内に目的のクエリ式が見つかります。なお、クエリの中にXMLの中でエスケープされている&amp;gt;と&amp;lt;が含まれる場合は、それぞれ>と<に置き換えて使用してください。目的のクエリ式を取り出したら、フィルター設定は破棄してかまいません。

 

002

画面2 GUIでフィルター条件を設定すると、XPathクエリが完成する 

 

■システムやアプリケーションの重大/エラー/警告イベントをリアルタイムに監視する

 現在進行中の問題をリアルタイムに追跡したい、あるいは再現テストをしながらのイベント発生をリアルタイムに監視したいという場合は、PowerShellで簡単なスクリプトを書くことで対応できます。例えば、次のコードは、過去1時間(3600000ミリ秒)にシステムログに記録された警告以上のイベントがあればそれを出力し、その後、10秒間隔で新たに記録される警告以上のイベントを出力し続けます。-LogNameパラメーターのSystemをApplicationに書き換えることで、アプリケーションログに対応させることができます(画面2)。

$lastRecordId = 0 

while ($true) { 

$events = Get-WinEvent -LogName System -FilterXpath "*[System[(Level=1 or Level=2 or Level=3) and TimeCreated[timediff(@SystemTime) <= 3600000]]]" -ErrorAction SilentlyContinue | Sort -property RecordId 

if ($events.Count -ne 0) { 

if ($lastRecordId -eq 0) { 

 foreach ($event in $events) { 

Write-Host $event.TimeCreated `t $event.LevelDisplayName `t $event.Message 
$lastRecordId = $event.RecordId

} else { 

foreach ($event in $events) { 

 if ($event.RecordId -gt $lastRecordId) { 

Write-Host $event.TimeCreated `t $event.LevelDisplayName `t $event.Message 
$lastRecordId = $event.RecordId

 } 
  } 



Start-Sleep -seconds 10 

 

003画面3 システムとアプリケーションログの警告以上のイベント発生をリアルタイムに監視する

 

■Sysmonで詳細なアクティビティを徹底的にログに記録し、調査する

 マイクロソフトが無料提供しているWindows Sysinternalsは、WindowsおよびWindows Serverのシステムを高度に監視、診断、およびトラブルシューティングするのに役立つユーティリティ群です。Windowsイベントログ関連のユーティリティとしては、System Monitor(Sysmon)があります。
 Sysmonは、個々のコンピューターやネットワーク上の、潜在的で悪質なアクティビティを追跡するために作成されたものですが、悪質なアクティビティだけでなく、トラブルシューティングの目的にも使用できます。
 SysmonはWindows SysinternalsのサイトからZIP(sysmon.ziip)としてダウンロードできるほか、Live Sysinternalsのサイトから実行可能ファイル(sysmon.exe)を直接ダウンロードすることもできます。
Windows Sysinternals|Sysmon
  https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon
Live Sysinternals
 https://live.sysinternals.com/sysmon.exe

 Sysmonは多数のルールを用いて、表2に示すイベントを検出します。Sysmonが検出したアクティビティはイベントログ(Microsoft-Windows-Sysmon/Operations)に記録され、[イベントビューアー](Eventvwr.msc)スナップインやその他の標準的なコマンドラインツールから参照できます。

表1 Sysmonのルールと検出可能なイベント(Sysmon v13.02、SchemaVersion 4.50の場合)

ルール名 イベント イベントID 既定 説明
ProcessCreate Process Create 1 include プロセスの作成
FileCreateTime File creation time changed 2   ファイル作成日時の変更
NetworkConnect Network connection detected 3   ネットワーク接続の検出
ProcessTerminate Process terminated 5 include プロセス終了
DriverLoad Driver loaded 6   ドライバーの読み込み
ImageLoad Image loaded 7   実行可能イメージの読み込み
CreateRemoteThread CreateRemoteThread detected 8   リモートスレッド作成の検出
RawAccessRead RawAccessRead detected 9   RAWリードアクセスの検出
ProcessAccess Process accessed 10   別のプロセスからアクセスの検出
FileCreate File created 11 exclude ファイルの作成、上書き検出
RegistryEvent Registry object added or deleted 12 exclude レジストリの作成、削除の検出
  Registry value set 13 exclude レジストリ値の設定の検出
  Registry object renamed 14 exclude レジストリのリネーム検出
FileCreateStreamHash File stream created 15 exclude ファイルストリームの作成検出
PipeEvent Pipe Created 17 exclude 名前付きパイプの作成検出
  Pipe Connected 18 exclude 名前付きパイプへの接続検出
WmiEvent WmiEventFilter activity detected 19 exclude WMIイベントフィルター登録の検出、マルウェアの挙動の可能性あり
  WmiEventConsumer activity detected 20 exclude WMIコンシューマーの登録検出
  WmiEventConsumerToFilter activity detected 21 exclude WMIコンシューマーのフィルターバンドの検出
DnsQuery Dns query 22 exclude DNSクエリの検出
FileDelete File Delete 23   ファイルの削除検出
ClipboardChange Clipboard changed 24   RDP接続でクリップボード共有を検出
ProcessTampering Process Tampering 25   プロセスのイメージの外部からの変更の検出
Sysmon service state changed 4 Sysmonサービスの状態変更(開始、停止)の検出
Sysmon config state changed 16 Sysmon構成の変更の検出、フィルタールールの更新など
Error report 255 Sysmonのエラーの検出

 

 インストールなしで利用できるWindows Sysinternalsの大多数のユーティリティとは異なり、Sysmonはシステムにインストールすることでサービスとして動作し、システムの起動直後からシャットダウンまで、長期にわたって(Sysmonをアンインストールするまで)監視を継続します。Sysmonは構成によっては膨大なイベントを記録し続けるため、フィルター条件を設定して、短期間に集中的に監視することをお勧めします。

 Sysmonをインストールするには-iパラメーターを指定して管理者として実行します。すると既定の構成でインストールされ、監視がスタートします。既定の構成では、表2のincludeとなっているプロセスの作成と終了イベント、およびSysmon関連のイベントです。また、ネットワーク接続の検出とイメージの読み込みイベントの監視機能は無効化されます。Sysmonのインストール後、-cパラメーターを指定して実行すると、現在の構成をダンプ出力できます(画面4)。
sysmon.exe -acceteula -i 
sysmon -c

 

004画面4 Sysmonを既定の構成でインストールし監視をスタート。既定の構成では、すべてのプロセスの作成と終了がログに記録される

 

 Sysmonによる監視を停止するには-uパラメーターを指定して実行してSysmonをアンインストールします。アンインストールすると記録済みのイベントログを解釈できなくなります。アンインストール後もイベントログを参照するためには-mパラメーターを指定して実行し、ログの解釈に必要なイベントマニュフェストのみをインストールします。

sysmon -u 
sysmon -m   

 特定のプロセスに対象を絞って、イメージの読み込みイベント、およびネットワーク接続(TCP/UDPポートへの接続)イベントを含めて監視するには、次のようなコマンドラインでインストールします。既にSysmonをインストールしてある場合は、いったんアンインストールしてから、再インストールしてください。次の例は、app.exeというプロセスに関連するイベントのみをログに記録します。複数のプロセスを指定する場合は、app.exe, app2.exeのようにカンマで区切って指定してください。

sysmon.exe -accepteula -i -l -n app.exe 

SysmonはXML構成ファイルを使用して複雑なフィルター条件を設定できます。例えば、HTTPS(443)およびRDP(3389)へのネットワーク接続のみを検出させたい場合は、次のようなmyconfig.xmlファイルを記述し、Sysmonをネットワーク接続イベントの検出を有効(-nパラメーター)にしてインストールしたあと、-cパラメーターを付けてXML構成ファイルを読み込ませます(画面5、画面6)。

sysmon.exe -accepteula -i -n 
sysmon -c myconfig.xml

 

myconfig.xml  

※SchemaVersionはSysmonのバージョンによって更新されることがあります。適切なのSchemaVersionはSysmon -sを実行して確認、変更してください。

<Sysmon schemaversion="4.50">

<EventFiltering> 
<ProcessCreate onmatch="include" /> 
<ProcessTerminate onmatch="include" /> 
<NetworkConnect onmatch="include"> 

<DestinationPort>443</DestinationPort> 
<DestinationPort>3389</DestinationPort> 
</NetworkConnect> 

</EventFiltering> 
</Sysmon>  

 

005

画面5   XML構成ファイルを使用してSysmonをインストール、構成する

 

006

画面6 Sysmonを使用してHTTPS(443)およびRDP(3389)ポートへの着信を監視する

 

 Sysmonをうまく使いこなすことで、知りたい情報に絞って効率よく監視することができます。しかし、複雑な条件を設定するのは難しいかもしれません。Sysmonのダウンロードサイトにある使用例や、以下の書籍の解説が参考になるでしょう。ただし、現在利用できるバージョンは、さらに機能が拡充されており、使用方法のすべてが説明されているわけではないことに留意してください。

Windows Sysinternals徹底解説 改訂新版(日経BP社)
  https://www.nikkeibp.co.jp/atclpubmkt/book/17/P98960/

 

※本ページは2022年6月22日現在の情報です。

 

■ ホワイトペーパーをダウンロードする

こちらのページの続きを含めた、全10テクニックをまとめたホワイトペーパーをご覧いただけます。以下のフォームよりお申込みください。

 

最新記事