<img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=1678611822423757&amp;ev=PageView&amp;noscript=1">

PowerShellを使用したWindowsイベントログの検索とトラブルシューティング

Dan Franciscus| May 27 2019

| monitoring, PowerShell, ネットワークセキュリティ, ネットワーク監視

Windows-Event-Log-image

Windows のイベントログは、サイバーセキュリティ担当者やIT管理者が大いに活用すべきツールです。トラブルシューティングのためにローカルで使用することも、ネットワークの状況を把握するために集中管理することもできます。集中管理のために利用する場合、セキュリティ情報イベント管理(Security Information Event ManagementSIEM)として知られる強力なソフトウェアを利用してログファイルを分析したり検索したりすることができます。同様のことをローカルで効率よく行うのに、Microsoft PowerShell を使うことができます。

Windows イベントログとは?

Windows イベントログには、オペレーティングシステムによって作成および保存されたシステム、セキュリティ、アプリケーションに関する詳細な記録が含まれます。一般的なよく知られたログに加えて、Microsoft AppLockerPowerShellSysmon など、システム上の特定のアプリケーションに対して追加のイベントログを有効にすることもできます。Windows イベントログは、イベントビューアから入手できます。イベントビューアを開くには、コントロールパネル内で検索するか、実行コマンドで eventvwr と入力します。Windows イベントログは、C:\WINDOWS\system32\config\ フォルダにあります。

Windows イベントログにも、他のログ記録と同様、標準的なフォーマットがあります。各イベントには、日付、時刻、ユーザー、コンピュータ、イベント ID、ソース、タイプが含まれます。PowerShell Get-WinEvent コマンドを利用して、ログを簡単に検索できます。

Get-WinEvent

Get-WinEvent は、Windows Vista 以降で利用可能な PowerShell コマンドレットです。ローカルまたはリモートのコンピュータでイベントログを収集して検索することができます。検索可能なログには、古典的なログ、Windows Vista で導入された新しいログ、および Event Tracing for Windows で生成されたログファイルがあります。単一のコマンドで複数のログを指定できます。パラメータを指定しないと、Get-WinEvent はコンピュータ上のすべてのイベントログからすべてのイベントを取得します。Get-WinEvent Windows Vista 2008 R2 以降でのみ利用可能で、Microsoft .NET Framework 3.5 以降が必要です。次のテーブルは、このコマンドに関連するパラメータの概要です。

パラメータ フォーマット 説明
ListLog ストリング
  • このパラメータは、イベントログ名をンマで区切ったリストを取ります。ワイルドカードは使用可能で、* を使うとすべてのログを検索します。
LogName ストリング
  • このパラメータも、イベントログ名をコンマで区切ったリストを取ります。
ListProvider  
  • コンマで区切ったプロバイダのリスト、イベントをイベントログに書き込むプログラムまたはサービスを指定します。ワイルドカードは使用可能で、* を使うとすべてのログを検索します。
ProviderName  
  • コンマで区切ったプロバイダのリスト、イベントをイベントログに書き込むプログラムまたはサービスを指定します。
Path ストリング
  • .evt、.evtx、.etl ファイルへのパスをコンマで区切って指定します。
MaxEvents Int64
  • Get-WinEvent が返すイベントの最大数を指定します。デフォルトではすべてのログイベントを返します。
ComputerName ストリング
  • NetBIOS 名、IPアドレス、または FQDN を指定します。 デフォルトはローカルコンピュータです。
  • 複数のコンピュータ上のイベントログやイベントを検索するには、ForEach ステートメントを使います。イベントログにアクセスするためにファイアウォールを開いて、イベントログへのリモート処理を許可してください。
Credential PSCredential
  • このパラメータは、イベントログを検索する権限を持つユーザーアカウントを指定します。デフォルトは現在のユーザーです。
  • 資格情報を要求するか、PSCredential オブジェクトを使用します。
FilterXPath ストリング
  • XPath クエリを使用して、1つ以上のログからイベントを選択します。
FilterXML XMLDocumentt
  • 構造化 XML クエリを指定します。
  • 有効な XML クエリを生成するには、イベントビューアの [Create Custom View] と [Filter Current Log] 機能を使用します。
  • 複数の XPath ステートメントを含む複雑なクエリに使用されます。
FilterHashTable ハッシュテーブル
  • 1つ以上の大/小文字を区別しないキーと値のペアのリストを指定します。
  • 有効なキーと値のペアは次のとおりです。
    • LogName=String[]
    • ProviderName=String[]
    • Path=String[]
    • Keywords=Long[]
    • ID=Int32[]
    • Level=Int32[]
    • StartTime=DateTime
    • EndTime=DateTime
    • UserID=SID
    • Data=String[]
    • *=String[]
Force ブール値
  • デバッグログと分析ログを取得するには、設定が必要です。
Oldest ブール値
  • True なら、イベントを最も古いものから順に返します。.etl ファイルと .evt ファイル、およびデバッグログと分析ログからイベントを取得する必要があります。

いくつかの例

まず、どのログを選択するべきかを確認するのに、ListLog パラメータを使用してみます。ワイルドカードですべてのログを表示するようにすると、非常に長いリストが表示されます。

PS C:\> Get-WinEvent -ListLog *

AppLocker など、特定のトピックに関するログに絞り込むことが可能です。

PS C:\> get-winevent -listlog *AppLock*

アプリケーションログなど、単一のログに関するすべての利用可能な情報を取得するには、次のコマンドを利用します。

ローカルマシン上のイベントを含むすべてのログを一覧表示するには、次のようにします。

PS C:\> Get-WinEvent -listlog * | where {$_.Recordcount}

複数のコンピュータのログを、foreach を使って同時に検索することもできます。

PS C:\> $hosts = "Server1", "Server2", "Server3"
PS C:\> foreach ($server in $hosts) 
{$server; get-winevent -listlog "Windows PowerShell" -computername $server}

総当たり攻撃の識別

ドメインコントローラ上のログで複数の失敗インスタンスを監視することで、総当たり攻撃を識別できる可能性があります。ドメインコントローラは、ログイベント4771で失敗した Kerberos チケットをログに記録します。潜在的な総当たり攻撃を調査する方法として、ドメインコントローラで以下のコマンドを実行して、最近1時間以内に失敗したすべてのログインを検索することが考えられます。

Get-WinEvent -Filterhashtable @{LogName='Security';id=4771;starttime=(Get-Date).AddHours(-1);endtime=(Get-Date)  }

Windows イベントトレーシングの利用

Windows イベントトレーシングは、開発者がアプリケーションをデバッグするために利用するツールです。シャットダウンやブートプロセスの追跡や、アプリケーションの電力効率の決定などの診断に利用できます。イベントトレースログは拡張子 .etl のファイルに保存されます。PowerShell は、これらのトレースログを開いたり分析したりするための追加の方法を提供します。Get-WinEvent を使用してイベントトレースログを解析するときは、必ず -Oldest パラメータを使用してください。

PS C:\>Get-WinEvent -Path "C:\Tracing\TraceLog.etl" -Oldest

Windows イベントログは、PowerShell を使用すると、簡単に検索や分析が可能です。特定の失敗イベントや特定の種類の攻撃を監視したい場合は、特に有益です。PowerShell は、様々なサイバー攻撃を防御するための便利なツールです。

New call-to-action

Topics: monitoring, PowerShell, ネットワークセキュリティ, ネットワーク監視

Default HTML block

コメントをどうぞ

メールアドレスは公開されません。アスタリスクマーク*のついたフィールドは必須項目です。

THIS POST WAS WRITTEN BY Dan Franciscus

Dan Franciscus is a systems engineer and VMware Certified Professional (VCP) specializing in VMware, PowerShell, and other Microsoft-based technologies. You can reach Dan at his blog (http://www.winsysblog.com/) or Twitter at @dan_franciscus.

無料試用版

無料試用版をお気軽にお試しください。

無料試用版を試す

コンタクト

ご質問、ご意見をお寄せください。

連絡先

ブログの定期メール便

ブログを定期的にメール配信いたします。