Octopress Blog

自分のためのまとめブログ

20130419 第14回「ネットワーク パケットを読む会(仮)」

第14回「ネットワーク パケットを読む会(仮)」に参加しましたので覚書です。 ネットワークキャプチャ関連の覚書はここのページに順次追記していきます。


フレッシャーズのためのパケット解析入門 (hebikuzure さん)

なんとなくフワッと使っていた単語をイメージで捉える。

パケット通信方式

連続データを一定量ずつ蓄積して1個の伝送単位にして、伝送路の開いているタイミングで送出、 受信したデータを元の連続データに復元する方式。

パケット

パケット通信方式における情報の伝送単位

イメージ

単語 例え
連続データ 水道から流れ出てている水
伝送単位(パケット) 水を入れたペットボトル

パケット通信は水道水をペットボトルに入れて運ぶみたいなイメージ


パケット解析とは

  1. パケットキャプチャをする
  2. キャプチャしたパケットを上位のプロトコルごとにその内容を解析する

パケットキャプチャ

パケット一つ一つに含まれるデータを記録する

パケットに含まれているデータ

  • 送信元
  • 送信先
  • サイズ(パケット長)
  • データの種類(上位プロトコル)

キャプチャされる場所(〜モデル)

OSI参照モデル

  • ネットワーク層
  • データリンク層

TCPモデル(IETF)

  • リンク層

パケットをキャプチャする場所(実際の場所)

  • 対象デバイス内? or デバイス外?

    • 実際の現場ではデバイス外でキャプチャすることが多い
      →Android、iOS、テレビ、ゲーム機などはそもそもデバイス内でキャプチャを取ることができないことがほとんど

    • 学習、研究、トラブルシューティングはデバイス内で行える

  • 対象デバイス内

    1. オペレーティング・システムに付属するツールを利用する
      • tcpdump (Linux / Unix環境)
    2. オペレーティング・システムベンダー提供のツール
      • WinPcap / Network Monitor (Windows環境)
    3. サードパーティのツールを利用する
      • Wireshark / OmniPeek / NetworkMiner / tshark
  • 対象デバイス外

    1. ミラーポート
      • あるポートが送受信するデータを、同時に別のポートから送出する機能
      • スイッチングハブやルータはMACアドレスを覚えて特定のPCのみとデータ通信をするようになっているのでミラーポートを利用してパケットキャプチャする
      • リピーターハブは接続しているPC全部にデータが送られているのでミラーポートを利用しなくてもデータを拾うことができる。
    2. タップ
      • タップを挟んでデータの通信を分岐させる
    3. プロキシやゲートウェイ
      • プロキシやゲートウェイ配下のサーバの通信が取得できる
    4. 通信対向側(サーバ側)でのキャプチャ
      • サーバ側で取得できているデータは、本当に目的のクライアントからの通信なのか確認する必要がある
        SSLアクセラレータ、プロキシ、ロードバランサなどの通信である可能性がある

* どこでキャプチャするのが適切なのか検討し、複数の場所でキャプチャするなど工夫が必要

パケットをキャプチャする方法

  • ハードウェア
    最近はソフトウェアでキャプチャすることがほとんど。キャプチャ用のハード機器はものすごく高価らしい。

  • ソフトウェア

    1. GUI

      • Wireshark / NetworkMiner / OmniPeek / Network Monitor
        • 設定がわかりやすい
        • 結果がすぐに確認できる
        • その場で解析が可能
    2. CUI

      • 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 さん)

私は何も聞いてないです。。

リンク