
GoogleのQUICプロトコルを検出するBroアナライザー
このアナライザは、以下で説明されているワイヤーフォーマットを使用して、Google による QUIC の実装(ここでは簡単のため GQUIC と呼びます)を解析および検出できます:
https://www.chromium.org/quic.
このアナライザを作成した時点で Chrome が使用していた GQUIC のバージョンは Q039 であり、一部の Google サーバー(およびおそらく Chrome カナリアビルド)も Q043 を使用できました。テスト中、このアナライザはこれらの両バージョンを検出できました。
当時(2018年5月4日〜5日)の GQUIC ドキュメントに記載されていたワイヤーフォーマットも、実際に使用されている実装と同期していないように見えました。
さらに、GQUIC を、以下で説明されている QUIC の IETF ドラフト標準に追従させるための定期的な取り組みがあるようです:
https://github.com/quicwg/base-drafts https://datatracker.ietf.org/wg/quic/documents/
そのドラフトは、このアナライザがテストした GQUIC 実装と大きく異なり、また最近ワイヤーフォーマットも変更されています。
要約すると、この GQUIC アナライザは、将来更新されない限り、QUIC プロトコルのその後の進化に対応し続けることは期待できません。
経由 zkg <https://docs.zeek.org/projects/package-manager/en/stable>_::
zkg install corelight/zeek-quic
そうでない場合は、自分でビルドしてインストールする必要があります(zeek-config が PATH 内にあると仮定して)::
./configure
make
make install
デフォルトでは、UDP 接続が QUIC プロトコルに見えるかどうかを単純に検出し、"guic" という文字列を conn.log の "service" フィールドに追加して、解析を停止します。
アナライザが提供する他のイベントを処理するカスタムスクリプトを作成したい場合は、プロトコルが確認された後もアナライザが接続を解析し続けるようにするとよいでしょう::
redef GQUIC::skip_after_confirm = F;
提供されるイベントは、パケットタイプ(Regular Packet と Version Negotiation と Public Reset)と、パブリックヘッダーの内容(Packet Number、QUIC Version、Connection ID、Diversification Nonce など)に関する大まかな情報を提供します。
ツール: https://github.com/quicwg/base-drafts/wiki/Tools
実装: https://github.com/quicwg/base-drafts/wiki/Implementations
Chromium: https://www.chromium.org/quic/playing-with-quic
Mike Dopheide による以前の QUIC アナライザの成果: https://github.com/dopheide-esnet/bro-quic