
eBPFでSSL/TLSの平文をキャプチャ—MITMプロキシやカスタムCAのインストールは不要。x86_64とarm64のLinuxおよびAndroidをサポート。
eCapture (傍観者)
eBPFでSSL/TLSの平文をキャプチャ—MITMプロキシやカスタムCAのインストールは不要です。
English · 汉字
[!IMPORTANT] x86_64(カーネル4.18以降)、aarch64(カーネル5.5以降)、LoongArch64
loong64(カーネル6.6以降)のLinuxをサポートします。Androidは既存のカーネル最低要件でx86_64とaarch64をサポートします。 root権限または特定のLinuxケーパビリティが必要です。 WindowsとmacOSはサポートしていません。
[!TIP] x86_64、aarch64、LoongArch64のLinuxをサポートします。Androidはx86_64とaarch64をサポートします。
リリースページからELFバイナリパッケージをダウンロードし、展開して実行します:
sudo ecapture --help
[!TIP] Linux のみ。
# Pull the Docker image
docker pull gojue/ecapture:latest
# Run it
docker run --rm --privileged=true --net=host -v ${HOST_PATH}:${CONTAINER_PATH} gojue/ecapture ARGS
⚠️ セキュリティに関する注意:
--privileged=trueはホストへの完全なアクセス権を付与します。本番環境では、代わりに特定のケーパビリティを使用することを推奨します。詳細は最小権限ガイドを参照してください。
詳細については Docker Hub を参照してください。
sudo ecapture tls
eCaptureはシステムのOpenSSLライブラリを自動検出し、平文トラフィックのキャプチャを開始します。curl https://google.com などのHTTPSリクエストを行うと、キャプチャされたリクエストとレスポンスが表示されます:
...
INF module started successfully. moduleName=EBPFProbeOPENSSL
??? UUID:233851_233851_curl_5_1_172.16.71.1:51837, Name:HTTP2Request, Type:2, Length:304
header field ":method" = "GET"
header field ":path" = "/"
header field ":authority" = "google.com"
...
📄 完全な出力例については、docs/example-outputs.md を参照してください。
eCapture ツールには 8 つのモジュールがあり、OpenSSL、GnuTLS、NSS/NSPR、BoringSSL、GoTLS などの TLS/SSL ライブラリから平文データをキャプチャできます。また、Bash、MySQL、PostgreSQL アプリケーションからのコマンドやクエリの監査もサポートしています。
ecapture -h を使用すると、サブコマンドの完全なリストを表示できます。
eCapture は /etc/ld.so.conf のデフォルトライブラリパスを検索して共有ライブラリを特定し、OpenSSL ライブラリの場所を検出します。--libssl フラグを使用してライブラリパスを明示的に設定することもできます。
対象プログラムが静的リンクされている場合は、プログラムのパスを --libssl フラグの値として直接設定できます。
OpenSSL モジュールは 3 つのキャプチャモードをサポートしています:
pcap/pcapng モードは、キャプチャした平文データを pcap-NG 形式で保存します。keylog/key モードは、TLS ハンドシェイクキーをファイルに保存します。text モードは平文データを直接キャプチャし、ファイルに書き込むかコンソールに出力します。OpenSSL、GoTLS、GnuTLS では、--eventaddr が統一された主要イベント
送信先です。stdout、プレーンなパスまたは file:// URI、
tcp://host:port、および ws:///wss://(順序付きバイナリフレーム)を受け付けます。モードは
text、NSS Key Log、または pcapng 表現を選択し、アドレスはトランスポートのみを選択します。
--keylogfile と --pcapfile は、それぞれのモードで互換性のある主要ファイル
エイリアスとして残ります。--eventaddr を対応するエイリアスと
同時に設定するとエラーになります。pcapng モードでは、--keylogfile は別個の
オプションの keylog アーティファクトです。
--logaddr は eCapture のランタイムログのみを伝送します。コンソールのランタイムログは
stderr を使用し、キャプチャされた stdout にはイベントバイトのみが含まれます。eCaptureQ は追加的です:
有効にしても --eventaddr や --logaddr は置き換えられません。
TCP 上の TLS 暗号化 HTTP 1.0/1.1/2.0 および UDP 上の HTTP/3(QUIC)をサポートします。
-m pcap または -m pcapng を --pcapfile および -i とともに指定できます。--pcapfile の現在の互換デフォルト値は save.pcapng です。
sudo ecapture tls -m pcap -i eth0 --pcapfile=ecapture.pcapng tcp port 443
このコマンドは、キャプチャした平文パケットを pcapng ファイルとして保存します。このファイルは Wireshark で開くことができます。
📄 pcapng モードの完全な出力については、docs/example-outputs.md を参照してください。
-m keylog または -m key を --keylogfile オプションと一緒に指定できます。現在互換性のあるデフォルトの出力ファイルは ecapture_openssl_key.log です。
キャプチャした OpenSSL TLS マスターシークレットは --keylogfile に保存されます。また、tcpdump キャプチャを有効にしてから Wireshark でファイルを開き、マスターシークレットのパスを設定することで平文パケットを表示できます。
sudo ecapture tls -m keylog -keylogfile=openssl_keylog.log
tshark を使用して、リアルタイムの復号化と表示を行うこともできます:
tshark -o tls.keylog_file:ecapture_masterkey.log -Y http -T fields -e http.file_data -f "port 443" -i eth0
sudo ecapture tls -m text
これにより、すべての平文データパケットが出力されます。
OpenSSL モジュールと同様です。
gotls コマンドTLS の平文データをキャプチャします。
ステップ 1:
sudo ecapture gotls --elfpath=/home/cfc4n/go_https_client --hex
ステップ2:
/home/cfc4n/go_https_client
sudo ecapture gotls -h
bash、mysqld、postgres などのモジュールも使用できます。完全なリストは ecapture -h で確認できます。