そもそもパケットとは?
そのままデータを送付するとネットワークに負荷がかかる上で時間もかかるので大変。パケットという小さい単位に分割して送付します。
「情報(データ本体)」と「ヘッダ(制御情報)」の二つを組み合わせた塊。
ヘッダ
「どのコンピュータ間の通信であるか」がこれを見ればわかる。
パケットのイメージ
パケットと一言で言っても「HTTPパケット」、「TCPパケット」、「IPパケット」などたくさんの種類がある。
MACフレーム
パケットと同じ意味合いで使われる。ネットワークインターフェース層で見た時の呼び方。伝送エラーが起こっていないか確認するために、パケットの後ろにエラー検証用のデータがつくことが多い。
トレイラ
パケットの最後尾に付く制御情報。
TCPヘッダ
ヘッダーの長さは、最低でも20バイト(160ビット)ある。
送信元ポート番号/宛先ポート番号
UDPとほぼ同じです。
シーケンス番号
TCPセグメントを正しい順序に並べるために使用される32ビットのフィールドです。送信側がアプリケーションから受け取ったデータを元に通し番号を付与します。(接続を開始したタイミングでランダムな番号が割り振られます。)その後、受信側の端末は受け取ったデータを確認して番号順に並び替えてアプリケーションに渡します。
確認応答番号
「次はここからデータをください」と相手に伝えるために使用される32ビットのフィールド。コントロールビットのACKフラグが「1」になっている場合のみだけ有効になるフィールド。
データオフセット
TCPヘッダーの長さを表す4ビットのフィールド。Wiresharkでは「Header Length」と表示される。
コントロールビット
コネクションの状態を制御するフィールド。6ビットのフラグで構成されている。
ウィンドウサイズ
TCPを使用している端末は送信データを一時的に格納する「送信バッファ」と、受信データを一時的に格納する「受信バッファ」という固定サイズのバッファ領域を持っている。
チェックサム
受け取ったTCPが壊れていないか壊れていないか整合性のチェックに使用される16ビットのフィールドです。
IPヘッダ
「IPヘッダ」と「IPペイロード」に分かれます。
バージョン
IPのバージョンを表す4ビットのフィールド。IPv4なら「4」、IPv6なら「6」です。
ヘッダー長
IPヘッダーの長さを表す4ビットのフィールドです。「IHL(Internet Header Length)」と呼んだりもします。
ToS(Type of Service)
IPパケットの優先度を表す8ビットのフィールド。Wiresharkでは「Differentiated Services Field」と表示される。優先制御や帯域制御などQoSで利用されます。
IPプレジデンス
先頭3ビット。8段階で優先度が決めれて値が大きければ大きいほど優先度が高くなる。
DSCP
先頭6ビット。IPプレジデンスのパワーアップバージョン。
パケット長
IPヘッダーとIPペイロードを合わせたパケット全体の16ビットのフィールド。
識別子
IPパケットの「フラグメンテーション(断片化)」に関するフィールド。MTUに収まりきらないサイズのIPペイロードをMTUに収まりきるように分割するネットワーク層の機能です。
パケット解析とは?
ネットワーク上に流れる実データのパケットをキャプチャして解析すること。
パケット解析の利点
アプリケーションのログを読み解くよりも、正確で事実しかない。アプリ側のログだと実装がミスっていたら間違ったログ内容が出力されてしまう。
パケット解析のユースケース
主に開発の工程においてパケット解析が効果を発揮するのは以下の2つのフェーズです。
試験フェーズ
試験がNGになった時にパケットの流れや状態を確認することで失敗の原因を追求しやすくなります。
運用管理フェーズ
また、試験の際に正常なパケットキャプチャデータを保存しておき、運用時に障害が発生した時の原因の切り分けにも役立てることができます。
無料ソフト
- Wireshark
- Microsoft Network Monitor
Wiresharkのメリット
- Windows、Linux、Mac全てに対応している。
- パケット内容を詳細表示でき、画面上でグラフィカル表示できる。
- キャプチャしたデータを様々な形式で保存できる。
- パケットを様々な条件でフィルタできる。
- 重要なパケットに色をつけることができる。
- 様々な統計情報を取得できる。
有償ソフト
メリット
IDS(侵入検知システム)にも対応しており通信内容を監視して、攻撃を検知して報告する機能もある。
パケット解析の仕組み
パケットキャプチャはWireshark単体では動かない。「パケットキャプチャドライバ」が別途必要になる。(WIndowsで言えば「WInPcap、Npcap」など。UNIX/Linuxの場合は、「libpcap」)
パケットキャプチャドライバ
通常の方法では取得できないパケットを取得するための特殊なデバイスドライバ。パケっトキャプチャソフトを使用するだけではプログラミングインターフェースである「ソケット」しか使用できず自身のアプリ向けのパケットしか取得できないですが、パケットキャプチャドライバを使用することで自身のアプリ向けのパケット以外に、ネットワークに流れるパケット全てを取得することが可能になります。
プロミスキャスモード
NICが持つ動作モードの一つです。パケットキャプチャドライバはこの特殊なモードにすることで動作します。これに切り替えることで自分宛のパケットじゃないものも処理できる。(標準モードのNICだと自分宛のパケットを受信した時のみ上位レイヤーに受け渡すようになっているが、これを使えば自分宛以外も受信できる。)
ただ、プロミスキャスモードは使い方によっては悪意のある盗聴の手段になってしまうので、公開はされていない。
パケットキャプチャの流れ
基本情報の収集
パケットを取得したい端末のネットワーク情報(IPアドレス、DNSサーバ、メールサーバーのIP)などをネットワーク構成図などを確認して収集します。
ツール選定
どのパケットキャプチャツールを使うか決定します。どれを使うかは使用しているOSの持っている機能やセキュリティポリシーによって変わります。
Wireshark(旧 Etheral)
Linux、WIndows、Macなど幅広く使えます。パケットキャプチャツールの域を越えて「プロトコルアナライザツール」となりつつあります。
tcpdump
LinuxやMacなどのCLIで使えるツールです。CLIしか利用できない環境でよく使われています。これでパケット情報を取得してSCPやFTPでWindowsに移してWiresharkで本格的なパケット解析をするという使い方をしている人も多いです。
機能
- キャプチャするだけでは十分なフィルタリング機能がある。
Microsoft Message Analyzer
マイクロソフト純正の無料パケットキャプチャツールです。WIndows7、WindowsServer2008R2以降なら動作します。WiresharkなどのOSSは本番環境にはすぐに導入すると言ったことはさせてもらえなかったりするのでこれでキャプチャしてローカルでWiresharkで解析するという使い方をしている人が多いです。
キャプチャ方法の検討
パケットキャプチャ端末におけるパケットキャプチャ処理は、やりとりされるパケットの量によってはかなり負荷はかなりかかってきます。以下のようにフィルタ条件を適宜追加するようにしましょう。
フィルタ条件例
- 送信元IPが「xx.xx.xx.xx」
- プロトコルが「xxx」
- 宛先ポートが「xxx」
キャプチャ対象のNICを通るようにする。
パケットキャプチャツールは特定のNICに対して通過するパケットを処理する。なのでこれからキャプチャしたいNICに対してパケットを意図的に流し込む必要がある。以下二つの手法がよく使われています。
リピータハブ
受け取ったパケットのコピーを、そのまま他のポート全てに流す機器。ただ、必要なパケットまで増えることになるので処理負荷の増大は注意。
ミラーポート
スイッチの機能の一つで、指定したポートでやりとりしているパケットを別ポートにリアルタイムコピーする。
時刻を合わせる。
NTPサーバーや、Active DIrectoryなど時刻同期を行い、絶えず正しい時刻を刻むようにする。
キャッシュをクリアする。
ARPキャッシュ、DNSキャッシュ、HTTPプロキシキャッシュなどキャッシュがあることによりネットワーク上のトラフィック量が減る。パケットをキャプチャする前にキャッシュをクリアするようにする。
パケットキャプチャの実施
そんなに難しいことじゃないです。注意点としてはファイル量が大きくなりすぎないようにすることや、一次記憶領域(メモリ)を逼迫しすぎないようにすることです。
パケット解析の実施
以下の流れを繰り返し行います。
- 色々な条件でフィルタ
- 気になるパケット、パケットシーケンスをピックアップ
- パケットの中身を確認
この記事へのコメントはありません。