Troubleshoot windows event logs

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

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

Windows イベントログとは?

Windows イベントログには、オペレーティングシステムによって作成および保存されたシステム、セキュリティ、アプリケーションに関する詳細な記録が含まれます。一般的なよく知られたログに加えて、Microsoft AppLocker、PowerShell、Sysmon など、システム上の特定のアプリケーションに対して追加のイベントログを有効にすることもできます。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 ファイルへのパスをコンマで区切って指定します。
MaxEventsInt64
  • Get-WinEvent が返すイベントの最大数を指定します。デフォルトではすべてのログイベントを返します。
ComputerNameストリング
  • NetBIOS 名、IPアドレス、または FQDN を指定します。 デフォルトはローカルコンピュータです。
  • 複数のコンピュータ上のイベントログやイベントを検索するには、ForEach ステートメントを使います。イベントログにアクセスするためにファイアウォールを開いて、イベントログへのリモート処理を許可してください。
CredentialPSCredential
  • このパラメータは、イベントログを検索する権限を持つユーザーアカウントを指定します。デフォルトは現在のユーザーです。
  • 資格情報を要求するか、PSCredential オブジェクトを使用します。
FilterXPathストリング
  • XPath クエリを使用して、1つ以上のログからイベントを選択します。
FilterXMLXMLDocumentt
  • 構造化 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 は、様々なサイバー攻撃を防御するための便利なツールです。

Tags