
eBPFを使用してCA証明書なしでSSL/TLS平文をキャプチャする。amd64/arm64向けのLinux/Androidカーネルでサポートされています。
汉字 | 英語
[!IMPORTANT]
x86_64(カーネル4.18+)およびaarch64(カーネル5.5+)上のLinux/Androidをサポートします。カーネルバージョンの要件は、LinuxとAndroidの両方でCPUアーキテクチャごとに適用されます。 ROOT権限または特定のLinuxケイパビリティが必要です。 WindowsおよびmacOSシステムはサポートしていません。
[!TIP] Linux/Android x86_64/aarch64をサポート。
ELF zipファイルをリリースからダウンロードし、解凍してsudo ecapture --helpコマンドで使用します。
[!TIP] Linuxのみ。
# pull docker image
docker pull gojue/ecapture:latest
# run
docker run --rm --privileged=true --net=host -v ${HOST_PATH}:${CONTAINER_PATH} gojue/ecapture ARGS
⚠️ セキュリティ注意事項:
--privileged=trueはホストへの完全なアクセスを許可します。本番環境では、代わりに特定のケイパビリティを検討してください。最小権限ガイドを参照してください。
詳細はDocker Hubを参照してください。
sudo ecapture tls
eCaptureはシステムのOpenSSLライブラリを自動検出し、平文のキャプチャを開始します。HTTPSリクエスト(例:curl https://google.com)を行うと、キャプチャされたリクエストとレスポンスが表示されます:
...
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、NSPR、BoringSSL、GoTLSなどのTLS/SSL暗号化ライブラリの平文キャプチャをサポートします。さらに、Bash、MySQL、PostgreSQLアプリケーションのソフトウェア監査を容易にします。
ecapture -hを使用してサブコマンドのリストを表示できます。eCaptureはデフォルトで/etc/ld.so.confファイルを検索し、SOファイルのロードディレクトリを検索し、openssl共有ライブラリの場所を検索します。または、--libsslフラグを使用して共有ライブラリのパスを設定することもできます。
対象プログラムが静的にコンパイルされている場合、プログラムパスを直接--libsslフラグの値として設定できます。
OpenSSLモジュールは3つのキャプチャモードをサポートしています:
pcap/pcapngモードは、キャプチャした平文データをpcap-NG形式で保存します。keylog/keyモードは、TLSハンドシェイクキーをファイルに保存します。textモードは、平文データを直接キャプチャし、指定されたファイルに出力するか、コマンドラインに表示します。TLS暗号化HTTP 1.0/1.1/2.0(TCP上)およびhttp3 QUICプロトコル(UDP上)をサポートしています。
-m pcapまたは-m pcapngを指定し、--pcapfileおよび-iパラメータと組み合わせて使用できます。--pcapfileのデフォルト値はecapture_openssl.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_masterkey.log)と組み合わせて使用できます。
キャプチャされたOpenSSL TLS Master Secret情報は--keylogfileに保存されます。tcpdumpパケットキャプチャを有効にしてから、Wiresharkでファイルを開き、Master Secretパスを設定して平文データパケットを表示することもできます。
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はすべての平文データパケットを出力します。(v0.7.0以降、SSLKEYLOG情報はキャプチャしなくなりました。)
OpenSSLモジュールと同様です。
TLSテキストコンテキストをキャプチャします。
Step 1:
sudo ecapture gotls --elfpath=/home/cfc4n/go_https_client --hex
Step 2:
/home/cfc4n/go_https_client
sudo ecapture gotls -h
bash\mysqld\postgresモジュールなど、ecapture -hを使用してサブコマンドのリストを表示できます。
eCaptureQはeCaptureのクロスプラットフォームGUIクライアントであり、eBPF TLSキャプチャ機能を可視化します。Rust + Tauri + Reactテクノロジースタックで構築され、リアルタイムで応答性の高いインターフェースを提供し、CA証明書を必要とせずに暗号化トラフィックを簡単に分析できます。複雑なeBPFキャプチャ技術を簡素化し、使いやすくします。2つのモードをサポート:
https://github.com/user-attachments/assets/c8b7a84d-58eb-4fdb-9843-f775c97bdbfb
eCapture/eCaptureQで使用されるProtobufログスキーマの詳細については、以下を参照してください:
パッチの提出と貢献ワークフローの詳細については、CONTRIBUTINGを参照してください。
必要な機能をカスタマイズできます。例えば、静的にコンパイルされたOpenSSLライブラリをサポートするためにuprobeのオフセットアドレスを設定するなどです。コンパイル方法についてはコンパイルガイドを参照してください。
eCaptureの実行後、HTTPインターフェースを通じて動的に構成を変更できます。HTTP APIドキュメントを参照してください。
eCaptureは複数のイベント転送方法をサポートしています。イベントをBurp Suiteなどのパケットキャプチャソフトウェアに転送できます。詳細はイベント転送APIドキュメントを参照してください。