毎晩恒例のWindowsパトロール(Cドライブ内のよくわからないファイルをパースして覗いてみる遊び)をしていたところ、オモシロアーティファクトがあったのでメモ。
WMI関係のログファイルをWindows標準コマンドでパースするだけで、過去のプライベートIPアドレスの履歴をサクッと調べることができるというもの。
ググってもこのアーティファクト関係の記事が見つからなかったのでメモ。
リアルタイムでのプライベートIPの調べかた
現在各ネットワークインターフェースがどんなIPアドレスを割り当てられているかを調べるのは以下のコマンド。
/allをつければ多くの情報が表示される。
>ipconfig
>ipconfig /all

これはあくまでリアルタイムの情報。
LwtNetLog.etlから過去プライベートIPアドレスを調べる方法
WMIとは
今回の解析対象etlファイルはWMI関係のログと思われる。
WMIについて簡記しておくと、WMI(Windows Management Instrumentation)とは、WBEM(WEB-BASED ENTERPRISE MANAGEMENT)に基づいてWindowsシステムを管理するための機能のこと。
WQLという独自のスクリプトで操作することも可能。
ただしアーキテクチャは超難解で私ごとき小人では到底理解不能な宇宙となっている。
興味があればこちら。
今回はこのWMI関係のログファイルをパースしてみる。
対象ログファイルのパス
以下のetlファイルが対象。
これを解析する。
C:\Windows\System32\LogFiles\WMI\LwtNetLog.etl
フォルダ内はこのように多数のetlファイルが保存されている。

LwtNetLog.etlのパース方法
そのままメモ帳で開いても実はある程度表示できる。

しかし、大変見づらいし、文字化けしてそうなところもある。
適切に処理する必要がありそうだ。
Windowsのetl形式ログファイルは、いつものnetshコマンドで変換できたりするのでチャレンジ!
>netsh trace convert input="C:\Windows\System32\LogFiles\WMI\LwtNetLog.etl" output="C:\Users\muchi\Documents\output.txt" dump=txt

作成されたテキストファイルを開いてみるといろいろな情報がある。
「Address addition」でフィルタリングしてみると、ネットワークインターフェースに付与されたIPアドレスやその日時がわかる。

このほかにも、サブネットマスクの設定ログであったり、DHCP関係の成功ログやエラーログ、DAD機能による復旧など様々なログがある。
宝の山よ。
InterfaceIDと実際のネットワークインターフェースの紐づけ
次はこのIPアドレスがどのネットワークインターフェースに紐づけられたのかを調べるが、それにはInterfaceの項目の番号とnetshでの出力結果を突合すればよい。
今回であれば、Interface=8となっているので、8番のネットワークインターフェースを調査する。
>netsh interface ipv4 show ipaddresses

Interface8として使われているのはWifiだとわかった。
もうちょっと細かくネットワークインターフェース情報を表示したければ以下のコマンド。
ネットワークインターフェースの名前とMACアドレスを表示する。
>route print

簡単だね。これらはリアルタイムの情報なのでNICをいじりまくっていたらもちろん対応しないこともあるが。
LwtNetLog.etlのログ保存期間
これは詳しく検証しないとわからないが、私の環境では約1週間前までさかのぼって調べられた。
短期的なネットワーク不具合の検証では十分だろう。
おまけテクニック
イベントビューアでの閲覧
netshでのパースの際に形式指定ができ、evtx形式を選べばイベントビューアでデータを確認することもできる。
ただし、デフォルトではイベントビューア上でIPアドレスのパースに失敗しているなど使い勝手の悪いところがあるので注意。
コマンドは以下のとおり。
>netsh trace convert input="C:\Windows\System32\LogFiles\WMI\LwtNetLog.etl" output="C:\Users\muchi\Documents\output.evtx" dump=evtx

おーい・・・3690から始まるIPアドレスって何よ・・・?
XMLで出していじくったらいいんかこれ?
IPv6アドレス(グローバルユニキャストアドレスなど)の調査
LwtNetLog.etlの特徴はネットワークインターフェース関係の生のログであること。
よって、グローバルユニキャストアドレスのフルアドレスも記録されている。
(当然リンクローカルなどもある)

レジストリに残るデータとの比較
過去のIPアドレスを調査するとなったとき、サイバーセキュリティ領域では割とレジストリに頼る発想が多い気がする。
ただ、あんまり使い勝手のいいものでもない。
一応SYSTEMハイブの以下のキーにそれらしいデータはある。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Parameter\Tcpip\Parameters\Interfaces\[GUID]
わざわざレジストリハイブを取ってきて、さらにはトランザクションログ(LOG1,LOG2)とマージする必要があるものの、取れるデータは限定的。
さらにはGUID経由でSOFTWAREハイブを見に行ったりしてネットワークインターフェース情報を結び付けたりする必要もあるが、最近の私の環境ではSOFTWAREハイブでログが取られていないこともあった。
このようにレジストリからの過去IPアドレス調査はなんだかイマイチ。
LwtNetLog.etlのほうがパースも簡単だし、情報量も多くてスキ。

LwtNetLog.etlのつかいみち
LwtNetLog.etl自体はかなり有用なアーティファクト。パースも簡単で内容も分かりやすい。
こちらのグローバルIPアドレス調査用アーティファクト(dosvc)に比べても充実度は段違い。
使いみちとしては、
- ヘルプデスク業務のサポート
- ネットワーク系不具合の調査(特にDHCP系はイベントログより詳細に出ている)
- セキュリティインシデント調査
- 法執行機関による犯罪捜査
などありそう。
まとめ
なんだかよくわからんetlファイルをパースしてみた話。
このetlを使ってログ表示する組み込みコマンドとかあるんじゃね・・・?って思うので、もちっと調べてみる。
コメント