netshとMicrosoft Message Analyzerでパケット解析を行う
いつの間にかGWに突入してます。ひよです。会社は連休だけど休んだ分の仕事はなくならないので、役に立つ勉強をこの期間にやろうと思ってます。そのあとはKindleでCTFの本が安かったので、その本で技術力の底上げを目論んでいます。
はじめに
パケットキャプチャするならWiresharkなど有名なツールが世間には多く出回っています。みなさんWireshark使われているのではないでしょうか。今回はWiresharkがインストールできない環境でパケット解析しなければならない要件だったので、Windows標準機能で頑張ってみたいと思います。netshでのキャプチャ取得はいろいろな方のブログ等ありますので、知っている人は飛ばしていただいていいかと思います。Micorosoft Message Analyzerはワンポイント新しい発見があればと思います。
■環境
- OS: Windows 10 Home 64bit
- Microsoft Message Analyzer: Version 1.4 (Build 4.0.8112.0)
- curl 7.55.1 (Windows) ※テストに利用
■アウトライン
- netshでキャプチャを取得する。
- Message Analyzerでパケット解析する。
1. netshでキャプチャを取得する。
netshはWindows標準のパケットキャプチャでWindows Server 2008以降であればインストールされているはずです。今回の要件ではパケットキャプチャソフトを対象サーバにインストールできなかったのでnetshで情報を収集します。 まずは、管理者権限でコマンドプロンプトを起動します。特に難しいことせず何でも取得するには、下記コマンドを実行することでキャプチャが開始されます。
netsh trace start capture=yes
実際に実行した画面が下記となります。ログインしているユーザのホームディレクトリ配下にトレースファイルが保存されます。デフォルトのファイルサイズは250MBでログは循環で保存していることがわかります。ファイルサイズなどを変更する場合はオプションで変更ができます。
次に後続の工程でパケットキャプチャできているか確認するため、はてなブログ(hatenablog.com)に対して、DNS名前解決でIP調べること、pingでICMPパケットを作成すること、curlでhttp通信を作成して観察します。
IPアドレスの特定ができました。
- pingを行う
pingはタイムアウトしているので、echoの応答は行わない設定になっているものと思います。※yahoo.co.jpなどは応答があるので、はてなブログの設定と思います。echo応答がないパターンを観察できそうです。
- curlでhttp通信を行う
nginxの応答が来ているので、httpリクエスト自体は成功していそうです。
このように実験はできたので、パケットキャプチャを停止します。上記情報が循環されずにトレースファイルに残っていることを祈るばかりです。停止する場合は下記コマンドを実行します。
netsh trace stop
実際の実行画面は下記となり、トレースファイルは拡張子が、.etlのものとなります。追加情報としてWindowsのログ一式が.cabファイルとして生成されます。 .etlのファイルはおよそ4MBだったので循環されずに残っていそうです。
2. Message Analyzerでパケット解析する。
netshで作成したファイルは、.etl形式で保存されます。この形式のファイルを開くためにMicrosoft Message Analyzerを利用します。Microsoft Message Analyzerをインストールされていない場合は、こちらからダウンロードしてインストールしてください。今回のゴールは、1で実施したはてなブログ(hatenablog.com)へのping通信とcurl通信のパケットをトレースファイルから見つけることまでとします。実際はその通信がどうだったのか迄調べる必要がありますが別途勉強が必要なので次回あったら記事作成します。
まずはMessage Analyzerを起動し、先ほどのトレースファイルを開きます。 今回調査したいのは特定の宛先(hatenablog.com)への通信がどうなっているかを調べたく、このままだと宛先のIPアドレスが表示されていないので表示のレイアウトを変更します。 レイアウト変更は、「Layout」>「Network」>「Network monitor」を選択します。 「Network monitor」を選択すると、ページ中ほどに表示されている情報が変わり宛先の情報が表示される「Destination」というカラムが出現しわかりやすくなります。 そうしましたら、あとはページ上部のFilterを記載するテキストエリアにフィルタ条件を設定します。 今回は、hatenablog.comへの通信を確認したいので宛先のIPアドレスの情報をフィルタ条件として入力して、「Apply」をクリックします。 ページ中ほどの情報が調べたいもののみとなりました。 上位4つのICMPはタイムアウトしたpingの情報となり、MessageNumberが590がcurlコマンドの情報となり特定ができました!
おわりに
Microsoft Message Analyzerについてはあまり参考になるサイトもなく、リファレンスも英語なのでいきなり使いこなすのは難しいと個人的に思いました。本記事がみなさんのお役に立てたら幸いです。本記事について不明点や誤りなどありましたらコメントお願いします。