
ecapture — Updated!
eBPFを使用してCA証明書なしでSSL/TLS平文をキャプチャする。amd64/arm64向けのLinux/Androidカーネルでサポートされています。
汉字 | English
eCapture (傍観者): eBPF を使用して CA 証明書なしで平文 SSL/TLS トラフィックをキャプチャします。
[!IMPORTANT] x86_64 (カーネル 4.18+) および aarch64 (カーネル 5.5+) の Linux と Android をサポートします。カーネルの要件は、Linux と Android の両方で CPU アーキテクチャごとに適用されます。 root 権限または特定の Linux ケイパビリティ が必要です。 Windows および macOS はサポートしていません。
はじめに
- OpenSSL、LibreSSL、BoringSSL、GnuTLS、NSS/NSPR ライブラリから平文 TLS/SSL トラフィックをキャプチャします。
- Go TLS プログラムの平文キャプチャをサポートし、Go アプリケーションの HTTPS/TLS トラフィックを含みます。
- ホストのセキュリティ監視のために bash および zsh のコマンド履歴を監査します。
- MySQL クエリを監査し、MySQL 5.6/5.7/8.0 および MariaDB をサポートします。
はじめかた
ダウンロード
ELF バイナリファイル
[!TIP] x86_64 および aarch64 の Linux/Android をサポートします。
リリースページ から ELF バイナリパッケージをダウンロードし、展開して実行します:
sudo ecapture --help
Docker イメージ
[!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 を参照してください。
OpenSSL 平文データのキャプチャ
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 アプリケーションからのコマンドとクエリの監査もサポートします。
- bash: bash コマンドをキャプチャします
- zsh: zsh コマンドをキャプチャします
- gnutls: CA 証明書を必要とせずに GnuTLS ライブラリから平文をキャプチャします
- gotls: TLS/HTTPS を使用する Go プログラムからの平文通信をキャプチャします
- mysqld: MySQL 5.6/5.7/8.0 および MariaDB から SQL クエリをキャプチャします
- nss: CA 証明書を必要とせずに NSS/NSPR ライブラリから平文をキャプチャします
- postgres: PostgreSQL 10+ から SQL クエリをキャプチャします
- tls: CA 証明書を必要とせずに平文 TLS/SSL トラフィックをキャプチャします (OpenSSL 1.0.x/1.1.x/3.0.x 以降をサポート)
ecapture -h を使用して、サブコマンドの完全なリストを表示できます。
OpenSSL モジュール
eCapture は /etc/ld.so.conf のデフォルトライブラリパスを検索して共有ライブラリを特定し、OpenSSL ライブラリの場所を検出します。--libssl フラグでライブラリパスを明示的に設定することもできます。
ターゲットプログラムが静的リンクされている場合は、--libssl フラグの値としてプログラムパスを直接設定できます。
OpenSSL モジュールは 3 つのキャプチャモードをサポートします:
pcap/pcapngモードは、キャプチャした平文データをpcap-NG形式で保存します。keylog/keyモードは、TLS ハンドシェイクキーをファイルに保存します。textモードは平文データを直接キャプチャし、ファイルに書き込むかコンソールに出力します。
Pcap モード
TCP 上の TLS 暗号化 HTTP 1.0/1.1/2.0 および UDP 上の HTTP/3 (QUIC) をサポートします。
-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 マスターシークレットは --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
Text モード
sudo ecapture tls -m text
すべての平文データパケットを出力します。
GoTLS モジュール
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 で完全なリストを表示できます。
動画
- YouTube 動画: How to use eCapture v0.1.0
- eCapture: supports capturing plaintext of Go TLS/HTTPS traffic
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 ログスキーマの詳細については、以下を参照してください:
時系列の Stargazers
セキュリティと運用
- セキュリティポリシー — 脆弱性の報告とサポート対象バージョン
- 最小権限 — 必要な Linux ケイパビリティと最小権限の設定
- 防御と検出 — 不正使用を検出して防御する方法
- パフォーマンスベンチマーク — オーバーヘッド測定方法と予想される特性
- リリース検証 — リリース成果物の整合性を検証する方法
コントリビューション
パッチの提出とコントリビューションワークフローの詳細については、CONTRIBUTING を参照してください。
コンパイル
カスタムコンパイル
静的にリンクされた OpenSSL ライブラリをサポートするために uprobe オフセットアドレスを設定するなど、必要な機能をカスタマイズできます。詳細な手順については コンパイルガイド を参照してください。