47
パケットキャプチャの勘どころ @UNKN0WNBIT 2015/1/22 SSMJP 2015/01

パケットキャプチャの勘どころ Ssmjp 201501

  • Upload
    -

  • View
    3.400

  • Download
    2

Embed Size (px)

Citation preview

Page 1: パケットキャプチャの勘どころ Ssmjp 201501

パケットキャプチャの勘どころ@UNKN0WNBIT 2015/1/22 SSMJP 2015/01

Page 2: パケットキャプチャの勘どころ Ssmjp 201501

ABOUT ME

• 名前:小林 稔

• Twitter:@unkn0wnbit

• 所属:Internet Initiative Japan Inc.

• 調査したりレポート書いたり。

• Internet Infrastructure Review (IIR)

• http://www.iij.ad.jp/company/development/report/iir/

Page 3: パケットキャプチャの勘どころ Ssmjp 201501

AGENDA

1. パケットキャプチャの目的

2. パケットキャプチャの仕方

3. パケットキャプチャの問題

4. 問題の対策

5. 安全にパケットキャプチャする

6. まとめ

Page 4: パケットキャプチャの勘どころ Ssmjp 201501

1.パケットキャプチャの目的

Page 5: パケットキャプチャの勘どころ Ssmjp 201501

1.パケットキャプチャの目的

•大まかに分類すると…

1. デバッグ

2. トラブルシューティング

3. コンプライアンス対応

4. セキュリティ対策(IPSなど)

5. Forensics / インシデント対応

6. 気になるあの娘のユーザIDとパスワードが知りたい!

Page 6: パケットキャプチャの勘どころ Ssmjp 201501

2.パケットキャプチャの仕方

Page 7: パケットキャプチャの勘どころ Ssmjp 201501

•突然ですが、ここでパケットキャプチャの仕方をおさらいしましょう。

•とても簡単です!

Page 8: パケットキャプチャの勘どころ Ssmjp 201501

パケットキャプチャ ステップ1

• 空いているポートにおもむろにLANケーブルをつなぐ!

Page 9: パケットキャプチャの勘どころ Ssmjp 201501

パケットキャプチャ ステップ2

• 間髪入れずにtcpdumpを実行!

Page 10: パケットキャプチャの勘どころ Ssmjp 201501

パケットキャプチャ ステップ3

• やったぜ!

Page 11: パケットキャプチャの勘どころ Ssmjp 201501

ね、簡単でしょう?

Page 12: パケットキャプチャの勘どころ Ssmjp 201501

でも、ちょっと待って!

• ケーブル挿すだけじゃ、ネットワーク上のすべてのパケットをキャプチャできません。

• ケーブルを接続する方法もいろいろあるんです。

1. Vampire tap(10BASE-5)

2. リピータハブ

3. L2スイッチングハブ

4. ネットワークタップ

5. アグリゲーションタップ/リジェネレーションタップ

6. L1スイッチ

7. Linux / BSD

Page 13: パケットキャプチャの勘どころ Ssmjp 201501

VAMPIRE TAP

• 10BASE-5の同軸ケーブルのアレ

• バス型トポロジなので挿すだけで全部キャプチャできる

参照:http://flylib.com/books/en/1.408.1.35/1/http://en.wikipedia.org/wiki/Vampire_tap

Page 14: パケットキャプチャの勘どころ Ssmjp 201501

リピータハブ

•バカハブと呼ばれる不幸なデバイス

•ケーブルを挿すだけなので省略

Page 15: パケットキャプチャの勘どころ Ssmjp 201501

L2スイッチングハブ

• MACアドレスを基にポートをスイッチングするので、ケーブルを挿しただけだと、自分宛のパケットしかキャプチャできない。

• すべてのパケットをキャプチャするには、以下のいずれかの手段が必要。

• ミラーポート(SPANポート)を設定する。

• ARP Poisoningして、すべてのパケットをキャプチャデバイスを経由させる。

Page 16: パケットキャプチャの勘どころ Ssmjp 201501

ネットワークタップ

• 遅延なし、(機器内の)パケットドロップなし。

• 使いにくい点としては、2つのポートでキャプチャをしなければならないところ。

• Linuxでキャプチャするなら、bondingが必要かな。

参照:http://www.comworth.co.jp/products/network-taps

Page 17: パケットキャプチャの勘どころ Ssmjp 201501

アグリゲーションタップ/リジェネレーションタップ

• 基本的に、ネットワークタップと同じ機能を持っている。

• 内部にバッファを持ち、送受信混ぜたパケットを単一のポートに送出できる。

• モニターポートは1つ以上設定できる。

• 製品によっては、1:1、1:N、N:1、Any:Anyなどの設定が可能。

参照:http://www.bitrieve.co.jp/products/lan_tap/100

Page 18: パケットキャプチャの勘どころ Ssmjp 201501

L1スイッチ

• L1以上の各種条件で設定ができるスイッチ

参照:http://www.bitrieve.co.jp/products/hard/?page=info-gigamon

Page 19: パケットキャプチャの勘どころ Ssmjp 201501

LINUX / BSD

• Linux

• bridgeを作って、iptablesでミラーリング。

• ミラーポートとキャプチャポートには、IPアドレスとルーティングが必要。

• # brctl addbr br0

• # brctl addif br0 eth0

• # brctl addif br0 eth1

• # ifconfig eth2 192.168.10.1/24 →eth2がミラーポート

• # route add -net 192.168.19.0 netmask 255.255.255.0 dev eth2

• # iptables -t mangle -A PREROUTING -i br0 -j TEE --gateway 192.168.10.2 →gatewayにキャプチャポートのIPアドレス

• BSD

• bridgeを作って、spanポートを追加。

• # ifconfig bridge0 create

• # brconfig bridge0 add rl0 add rl1 up

• # brconfig bridge0 addspan vr0

参照:http://okacl.hatenablog.com/entry/2013/06/11/034906http://nsmwiki.org/OpenBSD_Network_Tap

Page 20: パケットキャプチャの勘どころ Ssmjp 201501

3.パケットキャプチャの問題

Page 21: パケットキャプチャの勘どころ Ssmjp 201501

パケットキャプチャをする時の一番大きな問題

• それは…

• 様々な要因でパケットドロップが発生する。

pi@raspberrypi ~ $ sudo tcpdump -i br0 -w /pcap/test.pcap -c 3000tcpdump: listening on br0, link-type EN10MB (Ethernet), capture size 65535 bytes3000 packets captured3189 packets received by filter186 packets dropped by kernel

Page 22: パケットキャプチャの勘どころ Ssmjp 201501

パケットドロップが発生する箇所と原因

• 箇所1

• パケットキャプチャデバイス

• 原因1

• NIC、CPU、メモリ、ストレージ、OSの何れかのキャパシティが足りていない。

• アプライアンスの性能が低い。

Page 23: パケットキャプチャの勘どころ Ssmjp 201501

パケットドロップが発生する箇所と原因

• 箇所2

• ミラーポートを設定したスイッチ

• 原因2

• ミラー元ポートの送受信合計トラフィック量 < ミラー先ポートリンクアップ速度になっている。

• 全部のパケットをキャプチャさせようとして、ミラー元ポート数:ミラー先ポート数が、N:1になりやすい。

• スイッチのバッファが足りなくなる。

• スイッチが捌ける以上のパケット数(pps)を処理している。

Page 24: パケットキャプチャの勘どころ Ssmjp 201501

パケットドロップによって発生する問題

• パケットドロップが発生する

• セッション再構築ができない

• 正しくデバッグできなくなる

• トラブルシューティングに必要な情報を取りこぼす

• コンプライアンス対応で必要な情報が確認できない

• セキュリティ対策製品(IPSなど)の性能が落ちる

• Forensics / インシデント対応で必要な情報が確認できない

Page 25: パケットキャプチャの勘どころ Ssmjp 201501

4.問題の対策1. PAUSEフレーム 2. キャプチャデバイス 3.パケットミラーリング設計

Page 26: パケットキャプチャの勘どころ Ssmjp 201501

1. PAUSEフレーム

• フロー制御を行うEthernet Frame

• IEEE 802.3xで規定されている。

• NICのバッファがあふれそうになると、相手にPAUSEフレームを送信して、指定した時間だけフレーム送信を待つように依頼する。

• 半二重通信の場合は規格化されていないが、「バックプレッシャ(Back Pressure)輻輳制御」が広く利用されている。

• CSMA/CDの応用

• サンプルフレーム

• http://wiki.wireshark.org/SampleCaptures

• http://wiki.wireshark.org/SampleCaptures?action=AttachFile&do=get&target=Ethernet_Pause_Frame.cap

Page 27: パケットキャプチャの勘どころ Ssmjp 201501

1. PAUSEフレーム

参照:http://wiki.networksecuritytoolkit.org/nstwiki/index.php/LAN_Ethernet_Maximum_Rates,_Generation,_Capturing_%26_Monitoring#Ethernet_Flow_Control_Pause_Frame_.28IEEE_802.3x.29

Page 28: パケットキャプチャの勘どころ Ssmjp 201501

1. PAUSEフレーム

• PAUSEフレームを受信したポートは、そのポートの送信フレームを指定された時間が経過するまでバッファにためる。

• バッファのしきい値を超えると、フレームを受信しているポートからPAUSEフレームを送信する(PAUSEフレームはサーバからクライアントに直接伝達しない)。

参照:http://humairahmed.com/blog/?p=5316

Page 29: パケットキャプチャの勘どころ Ssmjp 201501

1. PAUSEフレームの注意点

• ネットワーク全体のパフォーマンスを下げてしまうので、デフォルトで無効になっているネットワーク機器もある。

• 主にCiscoなどインテリジェンスな製品

• PAUSEフレームの受信は有効でも送信は無効だったり

• 製品やモジュールによっては完全に無効化

• 個人向けの安いL2スイッチは大体有効っぽい

• WindowsはNICのプロパティで設定

• Linuxはethtoolで設定

• 物理ポート単位の制御ではなく、アプリケーション単位のフロー制御として、PFC(Priority-based Flow Control : IEEE 802.1Qbb)、ETC(Enhanced Transmission Selection : IEEE 802.1Qaz)が標準化されている。

Page 30: パケットキャプチャの勘どころ Ssmjp 201501

1. PAUSEフレームの注意点

• そもそも、キャプチャポートでは有効化しておくメリットがないので、無効化しておく方が良いかも。

• ネットワーク全体のパフォーマンスを下げてしまう可能性

• ミラーポートを持つデバイス側で無効化されている可能性

• フレームの送出を待っている間にバースト通信によって、バッファが上書きされる可能性

Page 31: パケットキャプチャの勘どころ Ssmjp 201501

2. キャプチャデバイスの見直し

• アプライアンスを使用している場合

• 基本的に機種のアップグレードしかない。

• PCでキャプチャしている場合

• とにかく速いNIC

• とにかく速いCPU

• 積めるだけのMemory

• I/Oが高速なStorage

• 一次保存はRAMディスクがベスト。

• 最新のOS(Firmware)

• Linux : TPACKET v3をサポートしているkernelとアプリケーション(libpcap, netsniff-ngなど)

• FreeBSD : netmapが取り込まれている 参照:http://www.tcpdump.org/http://netsniff-ng.org/http://yuuki.hatenablog.com/entry/2013/08/03/162715

Page 32: パケットキャプチャの勘どころ Ssmjp 201501

3. パケットミラーリング設計の見直し

• ミラーポートを高速なインターフェースにする

• 1Gbpsの複数のポートをミラーリングするなら、10Gbpsのミラーポートが必要となる。

• 理論的には、1つの1Gbpsをミラーリングする場合も2Gbpsのミラーポートが必要になる。

• おおよその送受信トラフィックは非対称なので、実際にはそこまで必要でないが、NetFlow/IPFIXなどでなるべく正確な通信量を把握すべき。

• SNMPはリクエストした瞬間の値しか取得できないので、バースト的なトラフィックはわからない。

• MRTGで生成されるグラフは平均値。

Page 33: パケットキャプチャの勘どころ Ssmjp 201501

5.安全にパケットキャプチャする

Page 34: パケットキャプチャの勘どころ Ssmjp 201501

パケットキャプチャ時のセキュリティ

• パケットキャプチャをするときの実行権限どうしてます?

• 大体の人が管理者権限でキャプチャしてますよね?

• 管理者権限で実行するのは最小限にするのが大原則

• パケットキャプチャツールの脆弱性が攻撃されたら、システム乗っ取られるかも。

• でも、パケットキャプチャツール動かすのに管理者権限って必須でしょ?

Page 35: パケットキャプチャの勘どころ Ssmjp 201501

管理者権限が必須だって?

ヘ(^o^)ヘ いいぜ|∧

/ /(^o^)/ てめえが何でも

/( ) rootが必要だって思い込んでるってなら(^o^) 三 / / >

\ (\\ 三(/o^) < \ 三( // く まずはそのふざけた

幻想をぶち殺す

Page 36: パケットキャプチャの勘どころ Ssmjp 201501

本当に管理者権限いらないの?

• とまでは言いませんが、ツールやOSによって対応範囲が異なります。

•管理者権限が必要な処理範囲を最小化することは可能です。

* ** + うそです

n ∧_∧ n+ (ヨ(* ´∀`)E)

Y Y *

Page 37: パケットキャプチャの勘どころ Ssmjp 201501

どの処理が危ないのか

• パケットキャプチャの処理を大きく分けると

1. パケットをキャプチャ

2. パケットを解析

3. ファイルに書き込み

• 管理者権限が必要なのは「パケットキャプチャ」

• Promiscuousモードにしたりするので、一般ユーザでは無理。

• 一番バギーな処理は「パケット解析」

• Wiresharkのchangelogを読むと、毎回大量のdissectorの修正が入っている。

• 機能追加・改善も多いから、余計にバギーな状況に。

• この2つの処理の権限をどうにかしたい。

Page 38: パケットキャプチャの勘どころ Ssmjp 201501

解決方法:PRIVILEGE SEPARATION / DROP PRIVILEGE

• 特権分離とは

• rootの特権が必要な操作を行うプロセスと非特権(一般ユーザ権限)で操作を行うプロセスを分離する考え方。

• 非特権プロセスの脆弱性が攻撃されても、特権昇格につながらない。

• OpenSSHで10年くらい前から実装されてるアレ。

• Wiresharkに実装されている。

• 権限降格とは

• 特権が必要な処理を終えたあとに、非特権に降格する考え方。

• tcpdumpに実装されている。

Page 39: パケットキャプチャの勘どころ Ssmjp 201501

WIRESHARKのPRIVILEGE SEPARATION

• 説明の前に、Wiresharkのプロセス構成を見てみましょう。

Wireshark

dumpcap

①パケットキャプチャ開始の操作をすると起動

②パケットをキャプチャ

③パケットデータを渡す

④パケットを解析ユーザインターフェースと

パケット解析

ひたすら、パケットをキャプチャして受け渡す

※イメージです

Page 40: パケットキャプチャの勘どころ Ssmjp 201501

WIRESHARKのPRIVILEGE SEPARATION

• Windowsの場合、dumpcapの代わりにWinPcapがサービスとして動作しているので、普通に使っても特権分離できている。

• Linuxの場合、Linux Capabilitiesという機能を使って、dumpcapコマンドに一般ユーザでもネットワークカードを操作できる権限を付与する。

• 実行できるユーザを限定するために、wiresharkグループユーザのみがdumpcapコマンドを実行できるようにする。

• BSD(include MacOS X)の場合は、キャプチャするユーザが「/dev/bpf*」デバイスの読み取り権限があればよい。

• 詳細な設定手順は、以下を参照。

• http://wiki.wireshark.org/CaptureSetup/CapturePrivileges

Page 41: パケットキャプチャの勘どころ Ssmjp 201501

DEBIAN GNU/LINUXは簡単

• 以下の操作で完了

1. # apt-get install wireshark

2. # dpkg-reconfigure wireshark-common

• 設定ダイアログで「YES」を選択

• dumpcapコマンドにLinux Capabilitiesの設定など

• wiresharkグループの追加

3. wiresharkグループにWiresharkを使うユーザを追加

Page 42: パケットキャプチャの勘どころ Ssmjp 201501

TCPDUMPのDROP PRIVILEGE

• キャプチャデバイスまたはキャプチャファイルを読み込んだ後に、一般ユーザに権限降格する。

• tcpdump実行時に「-Z(大文字)」オプションで一般ユーザを指定する。

• 指定する一般ユーザはログイン可能である必要は無い。

• コンパイル時にデフォルトでこのオプションが有効になるように指定することが可能。

• システムによっては、デフォルトでpcapユーザやtcpdumpユーザが指定されている模様。

Page 43: パケットキャプチャの勘どころ Ssmjp 201501

ところで、なんでみんな管理者権限で実行するの?

• 多くの記事で「rootで実行する」と解説されているのが原因…かな?

• 実行権限について、触れられているのを見たことがない。

Page 44: パケットキャプチャの勘どころ Ssmjp 201501

6.まとめ

Page 45: パケットキャプチャの勘どころ Ssmjp 201501

それで結局どうするのがよいのか

• ミラーリング

• ミラーリングデバイスはタップ系デバイスがお勧めだが高いので、何だかんだスイッチングハブでミラーリングすることが多い。

• ただし、安易にスイッチングハブで大量のポートのミラーリングをしない。

• スイッチングハブのミラーポートは一段高速なネットワークインターフェースにするのが望ましい。

• ミラー元ポートの送受信合計トラフィック量 < ミラーポートのリンクアップ速度

• トラフィック量(bps)、パケット量(pps)の見積もりはなるべく正確に行う。

• バースト的なトラフィックはミラーリングされる前にパケットドロップする可能性があるので、そこは異常値としてあきらめる。

• クライアント-サーバ間の通信が不完全であれば再送されるので、それがミラーリングされればOKと考える。

Page 46: パケットキャプチャの勘どころ Ssmjp 201501

それで結局どうするのがよいのか

• キャプチャ

• FWやIPSなど、トラフィックをセッションとして解析するデバイスの場合、トラフィック量だけで機器を選定するとパフォーマンスが足りなくなることがある(セッションテーブルの不足など)。

• TPACKET v3やnetmapはかなり高速なので、パケットキャプチャだけであればオープンソースソフトウェアで十分かも。

• 10Gbpsを処理できるという話も。

• Wireshark/tcpdumpのPrivilege Separation機能を使う。

• 用法・容量を守って、安全で楽しいパケットキャプチャライフを送りましょう!

Page 47: パケットキャプチャの勘どころ Ssmjp 201501

Q & A

• ご清聴ありがとうございました。

• 質問等あればお願いします。