
Stenographerは、すべてのパケットを迅速にディスクへスプールし、その後、それらのパケットのサブセットへのシンプルで高速なアクセスを提供することを目的としたパケットキャプチャソリューションです。議論・お知らせは [email protected]
Stenographerは、侵入検知およびインシデント対応を目的として、パケットをディスクにバッファリングするためのフルパケットキャプチャユーティリティです。NICからディスクへのパケット書き込みの高性能実装を提供し、ディスクがいっぱいになるとそれらのファイルを削除し、特定のパケットセットを迅速かつ簡単に読み戻すためのメソッドを提供します。
設計上の目的:
設計対象外:
複雑なパケット処理(TCPストリーム再構築など)
これを実行しないため高速である。私たちが行う非常に最小限のシングルパスパケット処理でも、インデックス作成だけで約1Gbpsの処理にシングルコアの75%以上を消費する可能性がある。
ディスクから読み戻してデータを処理することも機能しない:次の箇条書きを参照。
大量のパケット(書き込まれたパケットの1%以上)の読み戻し
ここでの重要な概念は、ディスク読み取りとディスク書き込みが競合することである...ディスク速度の90%で書き込み可能だが、読み取りに使えるディスク時間は10%しかない。また、非常にシーケンシャルなデータを書き込んでおり、ディスクはそれを高速に行うのが得意だが、一般的にシークが多いスパースデータの読み戻しはディスクが遅く行う。
詳細については、Stenographerの設計に関する議論は**DESIGN.mdを、マシンへのインストール方法はINSTALL.md**を参照してください。
ユーザーは非常にシンプルなクエリ言語を使用してStenographerにパケットを要求します。この言語はBPFの単純なサブセットであり、以下のプリミティブを含みます:
host 8.8.8.8 # Single IP address (hostnames not allowed)
net 1.0.0.0/8 # Network with CIDR
net 1.0.0.0 mask 255.255.255.0 # Network with mask
port 80 # Port number (UDP or TCP)
ip proto 6 # IP protocol number 6
icmp # equivalent to 'ip proto 1'
tcp # equivalent to 'ip proto 6'
udp # equivalent to 'ip proto 17'
# Stenographer-specific time additions:
before 2012-11-03T11:05:00Z # Packets before a specific time (UTC)
after 2012-11-03T11:05:00-07:00 # Packets after a specific time (with TZ)
before 45m ago # Packets before a relative time
after 3h ago # Packets after a relative time
注記: 相対時間は、上記のように時間または分の整数値で指定する必要があります。
プリミティブは and/&& および or/|| で組み合わせることができ、これらは同じ優先順位を持ち左から右に評価されます。括弧もグループ化に使用できます。
(udp and port 514) or (tcp and port 8080)
stenoread コマンドラインスクリプトは、Stenographerからパケットを取得し、アナリストが使用可能な形式で表示する処理を自動化します。Stenographerに生パケットを要求し、それらを tcpdump に通して、より多機能なフォーマット/フィルタリング体験を提供します。 stenoread の最初の引数はStenographerクエリ(上記の「クエリ言語」を参照)です。それ以外の引数は tcpdump に渡されます。例:
# Request all packets from IP 1.2.3.4 port 6543, then do extra filtering by
# TCP flag, which typical stenographer does not support.
$ stenoread 'host 1.2.3.4 and port 6543' 'tcp[tcpflags] & tcp-push != 0'
# Request packets on port 8765, disabling IP resolution (-n) and showing
# link-level headers (-e) when printing them out.
$ stenoread 'port 8765' -n -e
# Request packets for any IPs in the range 1.1.1.0-1.1.1.255, writing them
# out to a local PCAP file so they can be opened in Wireshark.
$ stenoread 'net 1.1.1.0/24' -w /tmp/output_for_wireshark.pcap
ソースコードをダウンロードするには、Goをローカルにインストールし、次のコマンドを実行します:
$ go get github.com/google/stenographer
Goはstenographerが依存するすべてのGoライブラリのダウンロードとインストールを処理します。 stenotype をビルドするには、stenotype ディレクトリに移動して make を実行します。以下のUbuntuパッケージ(または他のLinuxディストリビューションでの同等のパッケージ)をインストールする必要があるかもしれません:
これはGoogleの公式製品(実験的またはその他)ではなく、たまたまGoogleが所有しているコードです。
このコードはGoogleのユーザーを監視することを意図(または使用)していません。その目的は、内部監視機能を強化することにより、ネットワークのセキュリティを向上させることです。