
ecapture v2.5.2
eBPFを使用してCA証明書なしでSSL/TLS平文をキャプチャする。amd64/arm64向けのLinux/Androidカーネルでサポートされています。
汉字 | 英語
eCapture(旁观者): eBPFを使用してCA証明書なしでSSL/TLSテキストコンテンツをキャプチャ
[!IMPORTANT]
x86_64(カーネル4.18+)およびaarch64(カーネル5.5+)上のLinux/Androidをサポートします。カーネルバージョンの要件は、LinuxとAndroidの両方でCPUアーキテクチャごとに適用されます。 ROOT権限または特定のLinuxケイパビリティが必要です。 WindowsおよびmacOSシステムはサポートしていません。
はじめに
- SSL/TLS平文キャプチャ、openssl\libressl\boringssl\gnutls\nspr(nss)ライブラリをサポート。
- GoTLS平文サポート:Go言語で書かれたhttps/tlsプログラムの暗号化通信を対象とするgo tlsライブラリ。
- Bash監査:ホストセキュリティ監査のためのbashコマンドのキャプチャ。
- Zsh監査:ホストセキュリティ監査のためのzshコマンドのキャプチャ。
- MySQLクエリSQL監査:mysqld 5.6\5.7\8.0およびMariaDBをサポート。
開始する
ダウンロード
ELFバイナリファイル
[!TIP] Linux/Android x86_64/aarch64をサポート。
ELF zipファイルをリリースからダウンロードし、解凍してsudo ecapture --helpコマンドで使用します。
Dockerイメージ
[!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を参照してください。
OpenSSLテキストコンテンツのキャプチャ
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アプリケーションのソフトウェア監査を容易にします。
- bash bashコマンドをキャプチャ
- zsh zshコマンドをキャプチャ
- gnutls CA証明書なしでgnutlsライブラリの暗号化テキストコンテンツをキャプチャ
- gotls TLS/HTTPSで暗号化されたGolangプログラムからの平文通信をキャプチャ
- mysqld mysqld 5.6/5.7/8.0からのSQLクエリをキャプチャ
- nss CA証明書なしでnss/nsprライブラリの暗号化テキストコンテンツをキャプチャ
- postgres postgres 10+からのSQLクエリをキャプチャ
- tls CA証明書なしでTLS/SSLテキストコンテンツをキャプチャするために使用(openssl 1.0.x/1.1.x/3.0.x以降をサポート)
ecapture -hを使用してサブコマンドのリストを表示できます。
OpenSSLモジュール
eCaptureはデフォルトで/etc/ld.so.confファイルを検索し、SOファイルのロードディレクトリを検索し、openssl共有ライブラリの場所を検索します。または、--libsslフラグを使用して共有ライブラリのパスを設定することもできます。
対象プログラムが静的にコンパイルされている場合、プログラムパスを直接--libsslフラグの値として設定できます。
OpenSSLモジュールは3つのキャプチャモードをサポートしています:
pcap/pcapngモードは、キャプチャした平文データをpcap-NG形式で保存します。keylog/keyモードは、TLSハンドシェイクキーをファイルに保存します。textモードは、平文データを直接キャプチャし、指定されたファイルに出力するか、コマンドラインに表示します。
Pcapモード
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を参照してください。
Keylogモード
-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情報はキャプチャしなくなりました。)
GoTLSモジュール
OpenSSLモジュールと同様です。
gotlsコマンド
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 GUIアプリケーション
eCaptureQはeCaptureのクロスプラットフォームGUIクライアントであり、eBPF TLSキャプチャ機能を可視化します。Rust + Tauri + Reactテクノロジースタックで構築され、リアルタイムで応答性の高いインターフェースを提供し、CA証明書を必要とせずに暗号化トラフィックを簡単に分析できます。複雑なeBPFキャプチャ技術を簡素化し、使いやすくします。2つのモードをサポート:
- 統合モード:Linux/Androidの統合実行
- リモートモード:Windows/macOS/LinuxクライアントがリモートeCaptureサービスに接続
イベント転送
ビデオデモ
https://github.com/user-attachments/assets/c8b7a84d-58eb-4fdb-9843-f775c97bdbfb
Protobufプロトコル
eCapture/eCaptureQで使用されるProtobufログスキーマの詳細については、以下を参照してください:
スターゲイザーの推移
セキュリティと運用
- セキュリティポリシー — 脆弱性報告とサポートバージョン
- 最小権限 — 必要なLinuxケイパビリティと最小権限構成
- 防御と検出 — 不正使用を検出・防御する方法
- パフォーマンスベンチマーク — オーバーヘッド測定手法と期待特性
- リリース検証 — リリースアーティファクトの整合性を検証する方法
貢献
パッチの提出と貢献ワークフローの詳細については、CONTRIBUTINGを参照してください。
コンパイル
カスタムコンパイル
必要な機能をカスタマイズできます。例えば、静的にコンパイルされたOpenSSLライブラリをサポートするためにuprobeのオフセットアドレスを設定するなどです。コンパイル方法についてはコンパイルガイドを参照してください。
構成のリモート更新
eCaptureの実行後、HTTPインターフェースを通じて動的に構成を変更できます。HTTP APIドキュメントを参照してください。
イベント転送
eCaptureは複数のイベント転送方法をサポートしています。イベントをBurp Suiteなどのパケットキャプチャソフトウェアに転送できます。詳細はイベント転送APIドキュメントを参照してください。