連載
» 2010年06月28日 00時00分 公開

セキュリティ・ダークナイト(4):パケットキャプチャ術で秘密もちょっぴりこぼれた? (3/5)

[辻 伸弘(ソフトバンク・テクノロジー株式会社),@IT]

ファイル出力関連のオプション

 では、ファイル出力方法を指定しよう。

オプション 説明
-b <opt>
duration:N 指定した秒数経過で次のファイルへ保存
filesize:N 指定したファイルサイズ(KB)に達したら次のファイルへ保存
files:N 指定した保存ファイル数に達したらファイルを置き換える

 「-b」は、ファイルへの出力に関する条件を指定することができるオプションである。ここでは、条件に合致した場合に、現在保存しているファイルから次のファイルに出力するという制御が可能である。

 例えば、ファイルサイズが1MB(1000KBとした場合)に達したら次のファイルに保存すると設定する場合は以下のように指定する。

# tshark -i N -b filesize:1000-w output

 上記のようにキャプチャを開始すると、約1MBごとに新しいファイルへとキャプチャ結果が保存されていく。保存されるファイル名については

[-wで指定したファイル名] + [_] + [五けたの連番] + [_] +[作成時間](yyyyMMddHHmmss)

という形で順番に保存されていく。上記コマンドの場合は「output_00001_20100502231938」といったようなものである。

図11 保存された出力ファイル 図11 保存された出力ファイル

 実行してみれば分かるのだが、指定する値によっては、どんどんファイルが保存されていく。そこで活用したいのは、「-b files:N」である。

 このオプションでは、保存するファイル数を指定することができる。保存したファイルは、指定したファイル数に達すると一番古いものから上書きされていくというもので「-a files:N」のように停止するのではない。

 例えば、ファイルサイズが50MBのファイルを10個まで保存するというのであれば

# tshark -i N -b filesize:50000 -b files:10 -w output

とする。こうすることにより、50MBのファイルが10ファイル以上増えることなく最新の10ファイル(最新の上限ファイル合計サイズ約500MB)が保存されることとなる。

図12 -b files:10とすると最大10ファイルが保存され、最も古いものが削除される 図12 -b files:10とすると最大10ファイルが保存され、最も古いものが削除される

 保存するサイズや個数に関しては、保存するストレージの容量に応じて決める必要がある。「-b filesize:N」に関しては、あまり大きなサイズにしないほうがいいだろう。マシンスペックにもよるが、保存したファイルを分析する際に、あまり大きなサイズにするとロードするだけでも相当時間がかかるからである。

保存ファイルの読み出し

 次に、読み出しのオプションを紹介する。

オプション 説明
-r <file> キャプチャによってパケットを保存したファイルを指定して読み出し

 保存ファイルを単純に読み出すには「-r」オプションに読み出したいファイルを指定する。

図13 -rオプションでファイルを指定する 図13 -rオプションでファイルを指定する

 上図の例では単純に読み出しただけだが、「出力関連のオプション」で紹介した「-V」を付加することによるツリー表示や「-x」を付加することによりHEX(16進)、ASCIIダンプ表示を行うことも可能である。

フィルタ関連のオプション

 読み出しの際に指定できるフィルタも覚えておくべきだろう。

オプション 説明
-f <filter> Libpcapフィルタによるフィルタ方法を指定。キャプチャを行う際に指定する
ファイル保存内容に影響
-R <filter> WireShark互換ディスプレイフィルタを指定
読み込み・出力を行う際のフィルタ

 実際にパケットキャプチャをしてみると分かるが、1回のHTTPアクセス(GET)だけでも軽く数百ほどのパケットが流れてくる。リアルタイムに目で追うことは不可能だ。また、パケットを保存したあとから追いかけるにしても、すべての通信内容から目的の通信を見つけるために目でgrepするのは骨が折れる作業だ。もちろんtsharkには、それを回避するためのフィルタオプションが用意されている。

 tsharkのフィルタオプションと呼べるものは「-f」と「-R」の2つだ。フィルタ記述方法は、「-f」では、libpcapフィルタにより記述し、「-R」では、Wiresharkディスプレイフィルタによる記述を行うことが可能である。

 この2つのオプションの挙動には、決定的に異なる点がある。その違いを見るために、以下のように「-f」と「-R」指定した2つのキャプチャを開始し、適当にHTTP通信を行ってみてほしい。

▼1.

# tshark -i N -a filesize:10 -w output_f -f "icmp"

▼2.

# tshark -i N -a filesize:10 -w output_R -R "icmp"

 おそらく2.はすぐに停止したのではないだろうか。一方、1.にはほとんど変化がない。その状態のまま、以下のようにpingを実行してほしい。

# ping -l 1250 XXX.XXX.XXX.XXX 
(「XXX.XXX.XXX.XXX」の部分は、自身の管理下にあるルータの内部アドレスなど、ping応答を返すIPアドレスを入力)

 上記のように、pingを実行することにより1.のキャプチャも停止する。

 この違いは何だろうか。キャプチャしたファイルを「-r」オプションで読み出してみよう。

図14 ▼1.tshark -i N -a filesize:10 -w output_f -f 図14 ▼1.tshark -i N -a filesize:10 -w output_f -f "icmp"の結果
図15 ▼2. # tshark -i N -a filesize:10 -w output_R -R 図15 ▼2. # tshark -i N -a filesize:10 -w output_R -R "icmp"の結果

 図14は純粋にICMPパケットのみをキャプチャしており、先に発生させたHTTP通信は保存していない。それに対して図15は、HTTP通信のみをキャプチャして「-a filesize:10」の条件を満たして終了したことが分かる。

 これでお分かりいただけただろう。「-f」はフィルタ条件に合致したパケットのみをキャプチャしており、保存内容もそれに準じたものとなる。それに対して「-R」はすべてのパケットを保存しており「-R」で指定したもの以外の通信も保存しているのである。

 さらに、以下のような実験を行っていただきたい。

  1. ping -t XXX.XXX.XXX.XXX を実行する
  2. tshark -i N -a filesize:100 -w output_R -S -R "icmp" でキャプチャを開始
  3. 適当なサイトへアクセスしHTTP通信を発生させる

 上記、3アクションを実行した結果を見てみよう。「-R」の条件に合致した通信のみが表示されたはずである。そして、次に保存ファイルを「-r」で読み出してほしい。実行時には表示されなかったパケットも読み出されたのではないだろうか。

図16 すべてのキャプチャが保存されていたことが確認できる 図16 すべてのキャプチャが保存されていたことが確認できる

 「-R」はオプションの説明にも書いてある通り「ディスプレイフィルタ」であり「-f」のようにキャプチャの内容そのものに影響を与えるものではなく、あくまで、その出力に関してのみ影響を与えるものなのである。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。