第14回「ネットワーク パケットを読む会(仮)」に参加しましたので覚書です。 ネットワークキャプチャ関連の覚書はここのページに順次追記していきます。
フレッシャーズのためのパケット解析入門 (hebikuzure さん)
なんとなくフワッと使っていた単語をイメージで捉える。
パケット通信方式
連続データを一定量ずつ蓄積して1個の伝送単位にして、伝送路の開いているタイミングで送出、 受信したデータを元の連続データに復元する方式。
パケット
パケット通信方式における情報の伝送単位
イメージ
単語 | 例え |
---|---|
連続データ | 水道から流れ出てている水 |
伝送単位(パケット) | 水を入れたペットボトル |
パケット通信は水道水をペットボトルに入れて運ぶみたいなイメージ
パケット解析とは
- パケットキャプチャをする
- キャプチャしたパケットを上位のプロトコルごとにその内容を解析する
パケットキャプチャ
パケット一つ一つに含まれるデータを記録する
パケットに含まれているデータ
- 送信元
- 送信先
- サイズ(パケット長)
- データの種類(上位プロトコル)
キャプチャされる場所(〜モデル)
- ネットワーク層
- データリンク層
- リンク層
パケットをキャプチャする場所(実際の場所)
対象デバイス内? or デバイス外?
実際の現場ではデバイス外でキャプチャすることが多い
→Android、iOS、テレビ、ゲーム機などはそもそもデバイス内でキャプチャを取ることができないことがほとんど学習、研究、トラブルシューティングはデバイス内で行える
対象デバイス内
- オペレーティング・システムに付属するツールを利用する
- tcpdump (Linux / Unix環境)
- オペレーティング・システムベンダー提供のツール
- WinPcap / Network Monitor (Windows環境)
- サードパーティのツールを利用する
- Wireshark / OmniPeek / NetworkMiner / tshark
- オペレーティング・システムに付属するツールを利用する
対象デバイス外
- ミラーポート
- タップ
- タップを挟んでデータの通信を分岐させる
- プロキシやゲートウェイ
- プロキシやゲートウェイ配下のサーバの通信が取得できる
- 通信対向側(サーバ側)でのキャプチャ
- サーバ側で取得できているデータは、本当に目的のクライアントからの通信なのか確認する必要がある
→SSLアクセラレータ、プロキシ、ロードバランサなどの通信である可能性がある
- サーバ側で取得できているデータは、本当に目的のクライアントからの通信なのか確認する必要がある
* どこでキャプチャするのが適切なのか検討し、複数の場所でキャプチャするなど工夫が必要
パケットをキャプチャする方法
ハードウェア
最近はソフトウェアでキャプチャすることがほとんど。キャプチャ用のハード機器はものすごく高価らしい。ソフトウェア
GUI
- Wireshark / NetworkMiner / OmniPeek / Network Monitor
- 設定がわかりやすい
- 結果がすぐに確認できる
- その場で解析が可能
- Wireshark / NetworkMiner / OmniPeek / Network Monitor
CUI
- tcpdump / WinPcap / tshark
- 動作が軽快
- バッチ処理向き
- tcpdump / WinPcap / tshark
ソフトウェアによるパケットキャプチャまとめ
ソフト | OS | CUI/GUI | 特徴 |
---|---|---|---|
tcpdump | Unix | CUI | Unix系のCUIでよく利用される。libpcapに含まれている。 |
netcat | Unix | CUI | - |
WinPcap | Windows | CUI | - |
tshark | Unix/Windows | CUI | WiresharkのCUI版 |
Wireshark | Unix/Windows | GUI | FreeのGUIツールでは一番有名 |
Network Monitor | Windows | GUI | プロセス単位で通信状態を確認できる |
OmniPeek | Unix/Windows | GUI | 商用ツール |
NetworkMiner | Unix/Windows | GUI | 画像やcookieなど、アプリケーションレベルの確認がしやすい |
データ形式
形式 | 拡張子 | 特徴 |
---|---|---|
libpcap形式 | pcap | 一番汎用的な形式 |
Wireshark新形式 | pcapng | pcapより詳細な情報が取れる。ngはNextGenerationの略 |
Network Monitor形式 | cap | Windowsで使う場合 |
※ とりあえずpcap形式にしておけば大概のソフトで読める
どんなデータが記録されるか
- パケット全体のバイナリデータ
- 記録した時刻
- キャプチャしたインターフェイス
- トラフィックを発生させたプロセス
パケット解析
基本的にはツールを利用する
Wireshark / NetworkMiner / OmniPeek / Network Monitor
力技で独自解析
pcap形式などのフォーマットは公開されているので独自にバイナリ解析をする
tcpdumpから始まるネットワークエンジニアの朝 (twovs さん)
tcpdumpとWireshark
tcpdump
軽い、低機能、とりあえず見る、サーバ側でキャプチャ、感じ取る、気づくWireshark
重い、高機能、じっくり見る、ローカルのPCで結果を見る、探しだす、確認する
パケット解析で大切なこと
正常系を知っておくこと
異常な状態を察知するには正常な状態を知っておくことが大切
何もしてないのに壊れましたー
IPv4だと問題なかったのにIPv6だとつながらない
IPv6アドレスにpingを打ってみたが反応がなかった
→IPv4はARPでMACアドレスを取得しているがIPv6はICMPでMACアドレスを取得している
→IPv6ではICMPをフィルタしちゃダメ!!
IPv6の通信で送り元と送り先でサイズが違う
送り先でパケットを見たら「padding」というのがひっついていた
→小さいデータを送るときは「0」を付加して64byteにしてから投げるようになっている設定があるらしい
MTU=1500にもかかわらずものすごい大きなデータを送ろうとしていた
送信元でものすごいでかいデータを送信先に投げている。でも送信先のキャプチャは正常
→ VMwareのGuestOSでキャプチャするとき、Virtual Switchに行く前のデータをキャプチャしていた
→ Virtual Switchを通過すると通常のサイズになるらしい。
まとめ
LANケーブルは刺さってる?
意外と多いらしい。お客様には「ケーブル刺さってるか確認してください」と言うと「馬鹿にしてるのか!」とお叱りを受けるので 「LANケーブルの抜き差しで直ることがありますので試してください」と言うと、双方ハッピー。
FireWallの設定とか大丈夫?
IPv6つかってるのにICMPをフィルタしてない?
どこのキャプチャを撮ってる?
内部?外部?内部でもどこ?VMwareだとVirtual Switchの前?後?
とある環境(3G回線)であるアプリのパケットを見てみた(totoromasaki さん)
私は何も聞いてないです。。