この記事はWindows Live Spaceで掲載したものです。
(一部加筆修正しています)
第1弾では、 イベントビューアのクエリをカスタマイズする方法としてXPathを使う方法を紹介しました。
XPathの書き方として、<QueryList>~</QueryList>の間に
*[EventData[Data[@Name=’LogonType’] = 2]]
のように記述すると紹介しましたね。
第2弾では、*[….]の部分のクエリの書き方について掘り下げてみたいと思います。
前回、イベントログはSystemタグの部分とEventDataの部分から構成されると話をしましたが、
両方の部分からクエリ条件を記述したいということであれば、 このように書けば良いと思います。
例1:イベントIDが4624で、ログオンタイプが2のログを抽出
*[System[(EventID=4624)] and EventData[Data[@Name=’LogonType’]=’2′]] |
Systemの部分はGUIでイベントIDで4624と指定しておけば、自動的にXPathクエリが生成されますから
あとは、and以降の部分だけ書いておけばよいですね。
では続けて、特定のユーザーがログオンしたログを抽出する場合は?というと…
例2:イベントIDが4624で、ログオンタイプが2のAdministratorによるログオンのログを抽出
*[System[(EventID=4624)] and EventData[Data[@Name=’TargetUserName’]=’Administrator’] and EventData[Data[@Name=’LogonType’]=’2′]] |
複数のEventDataの項目に対してクエリを実行する場合は、単純にEventData~を繰り返せばよいだけです。
ちなみに、イベントID4624でログオンしたユーザーはTargetUsernameというタグに記録されます。
くどいけれど、特定のコンピュータからログオンしたログを抽出する場合も紹介しておきます。
例3:イベントIDが4624で、ログオンタイプが2のPC01コンピュータからログオンしたログを抽出
*[System[(EventID=4624)] and EventData[Data[@Name=’WorkstationName’]=’PC01′] and EventData[Data[@Name=’LogonType’]=’2′]] |
ここまで見てきたように、XPathを書くときは、あらかじめイベントログでクエリ条件に組み込みたい属性の名前を調べておいて、
あとはEventData~と書いて、全部andでつなげるだけです。 では、複数の条件をandではなく、orを使いたい場合は?
もちろん使えますよ。
例4:イベントIDが4624または4625(←ログオン失敗のログ)で、ログオンユーザーがAdministratorのログを抽出
*[System[(EventID=4624 or EventID=4625)] and EventData[Data[@Name=’TargetUserName’]=’Administrator’]] |
EventDataの中でA and (B or C)のような条件を書くときは、単純に括弧( )でくくるだけでよいようです。
例4-1 ログオンユーザーがAdministratorまたはkuniiで、DC01コンピュータにログオンしたときのログを抽出
*[EventData[Data[@Name=’SubjectUserName’]=’DC01$’] and EventData[(Data[@Name=’TargetUserName’]=’Administrator’ or Data[@Name=’TargetUserName’]=’kunii’)]] |
このようにXPathを使えば、単なる「イベントID4624でフィルタ」だけではない、より現実的なイベントログのフィルタが
かけられるようになると思います。これにより、今まで非現実的と思われていた、イベントビューアの監査証跡としての利用も
ちょっとは現実的になったのではないでしょうか?(ホントにちょっとだけかもしれないけど…)
コメント
“get-winevent -logname Security -filterxpath” に例4のような形を渡してやれば、きちんとフィルタされているようなのは確認できるのですが、出力される内容が省略されませんか?
最終カラムが「An account was successfully logged on….」という形で省略され、LogonTypeなどが表示されません。これをきちんと「1イベント1行で」表示させる方法は無いものでしょうか?
Fujitaさん、こんにちは。
イベントログの最終カラムが1行で表示されないのは、そもそもMessageカラムが1行ではないからです。get-winevent -logname Security | Out-GridView で実行していただくとすべての行が表示されますが、1行にまとめるとなると簡単ではないような気がします。
わかりましたら、改めてお伝えしますね。
Out-GridView は初めて知りました。あと、fromat-list で全内容が表示されることもわかりました・・・確かに、”Message”の構造は複数行ですね。ありがとうございます。
get-winevent -logname Security -filterxpat “*[System[(EventID=4624 or EventID=4634)]]” | format-list | out-file hoge.txt
で出力されたファイルを地道にスクリプトなどで処理するしかないのだとしたら、大変そうですね・・・・