重要
Linux/Android カーネル バージョン x86_64 4.18 以降、 aarch64 5.5以降をサポートします。 ROOT権限が必要です。 WindowsおよびmacOSシステムには対応しておりません。
導入
はじめる
OpenSSLモジュール
GoTLS モジュール
その他のモジュール
ELFバイナリファイル
Dockerイメージ
ダウンロード
openssl テキスト コンテンツをキャプチャします。
モジュール
動画
貢献する
編集
SSL/TLS プレーンテキスト キャプチャ、openssllibresslboringsslgnutlsnspr(nss) ライブラリをサポートします。
GoTLS 平文サポート go tls ライブラリ。golang 言語で記述された https/tls プログラムの暗号化通信を指します。
bash 監査、ホスト セキュリティ監査用の bash コマンドをキャプチャします。
mysql クエリ SQL 監査、mysqld 5.65.78.0、および mariadDB をサポートします。
ヒント
Linux/Android x86_64/aarch64 をサポートします。
ELF zip ファイル リリースをダウンロードし、解凍し、コマンドsudo ecapture --help
で使用します。
ヒント
Linux のみ。
# pull docker imagedocker pull gojue/ecapture:latest# rundocker run --rm --privileged=true --net=host -v ${HOST_PATH}:${CONTAINER_PATH} gojue/ecapture ARGS
詳細については、「Docker Hub」を参照してください。
sudo ecapture TLS 2024-09-15T11:51:31Z INF AppName="eCapture(旁观者)"2024-09-15T11:51:31Z INF HomePage=https://ecapture.cc 2024-09-15T11:51:31Z INF リポジトリ=https://github.com/gojue/ecapture 2024-09-15T11:51:31Z INF Author="CFC4N <[email protected]>"2024-09-15T11:51:31Z INF description="eBPF を使用した CA 証明書なしの SSL/TLS プレーンテキストのキャプチャ。Linux でサポートされています。 /Android カーネルamd64/arm64."2024-09-15T11:51:31Z INF バージョン=linux_arm64:0.8.6-20240915-d87ae48:5.15.0-113-generic 2024-09-15T11:51:31Z INF リッスン=ローカルホスト:28256 2024-09-15T11:51:31Z INF eCapture 実行ログ logger= 2024-09-15T11:51:31Z INF キャプチャされたイベントを受け取るファイル ハンドラーeventCollector= 2024-09-15T11:51:31Z INF listen=localhost:28256 2024-09-15T11:51:31Z INF https サーバーを開始しています...HTTP インターフェイス経由で構成ファイルを更新できます。 2024-09-15T11:51:31Z WRN ========== モジュールを開始しています。 ========== 2024-09-15T11:51:31Z INF カーネル情報 = 5.15.152 Pid = 233698 2024-09-15T11:51:31Z INF BTF バイトコード モード: CORE。 btfモード=0 2024-09-15T11:51:31Z INF マスター キー キーロガーが設定されました。 eBPFProgramType=テキストキーロガー= 2024-09-15T11:51:31Z INF モジュールの初期化。 isReload=false moduleName=EBPFProbeOPENSSL 2024-09-15T11:51:31Z INF モジュール.Run() 2024-09-15T11:51:31Z WRN OpenSSL/BoringSSL バージョンが共有ライブラリ ファイルから見つかりません。デフォルト バージョンが使用されました OpenSSL Version=linux_default_3_0 2024-09-15T11:51:31Z INF フック masterKey 関数 ElfType=2 Functions=["SSL_get_wbio","SSL_in_before","SSL_do_handshake"] binrayPath=/usr/lib/aarch64-linux-gnu/libssl.so.3 2024-09-15T11:51:31Z INF はすべてのプロセスを対象としています。 2024-09-15T11:51:31Z INF はすべてのユーザーを対象としています。 2024-09-15T11:51:31Z INF setupManagers eBPFProgramType=Text 2024-09-15T11:51:31Z INF BPF バイトコード ファイルが一致しました。 bpfFileName=user/bytecode/openssl_3_0_0_kern_core.o 2024-09-15T11:51:32Z INF perfEventReader が作成した mapSize(MB)=4 2024-09-15T11:51:32Z INF perfEventReader が作成した mapSize(MB)=4 2024-09-15T11:51:32Z INF モジュールが正常に開始されました。 isReload=false moduleName=EBPFProbeOPENSSL 2024-09-15T11:51:53Z ??? UUID:233851_233851_curl_5_1_172.16.71.1:51837、名前:HTTP2Request、タイプ:2、長さ:304 フレームタイプ => 設定 フレームタイプ => WINDOW_UPDATE フレームタイプ => ヘッダー ヘッダー フィールド ":method" = "GET"ヘッダー フィールド ":path" = "/"ヘッダー フィールド ":scheme" = "https"ヘッダー フィールド ":authority" = "google.com"ヘッダー フィールド "user-agent" = 「curl/7.81.0」ヘッダーフィールド「accept」=「*/*」フレームタイプ=>設定 2024-09-15T11:51:53Z ??? UUID:233851_233851_curl_5_0_172.16.71.1:51837、名前:HTTP2Response、タイプ:4、長さ:1160 フレームタイプ => 設定 フレームタイプ => WINDOW_UPDATE フレームタイプ => 設定 フレームタイプ => ヘッダー ヘッダー フィールド ":status" = "301"ヘッダー フィールド "location" = "https://www.google.com/"ヘッダー フィールド "content-type" = "text/html; charset=UTF-8"ヘッダー フィールド " content-security-policy-report-only" = "object-src 'none';base-uri 'self';script-src 'nonce-qvZZ0XreBfeqRnUEV1WoYw' 'strict-dynamic' 'report-sample' 'unsafe-eval' 'unsafe-inline' https: http:;report-uri https://csp.withgoogle.com/csp/gws/other-hp "header field "date" = "Sun, 15 Sep 2024 11:51:52 GMT"ヘッダー フィールド "expires" = "火曜日、2024 年 10 月 15 日 11:51:52 GMT"ヘッダー フィールド "cache-control" = "public, max-age=2592000"ヘッダー フィールド "server" = "gws"ヘッダー フィールド " content-length" = "220"ヘッダー フィールド "x-xss-protection" = "0"ヘッダー フィールド "x-frame-options" = "SAMEORIGIN" ヘッダー フィールド "alt-svc" = "h3=":443"; ma=2592000,h3-29=":443"; ma=2592000"フレーム タイプ => PING フレーム タイプ => DATA<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8"><TITLE>301 移動しました</TITLE></HEAD>< BODY><H1>301 移動</H1>ドキュメントは<A HREF="https://www.google.com/">ここ</A>に移動しました。</BODY></HTML>
eCapture ツールは、OpenSSL、GnuTLS、NSPR、BoringSSL、GoTLS などの TLS/SSL 暗号化ライブラリの平文キャプチャをそれぞれサポートする 8 つのモジュールで構成されています。さらに、Bash、MySQL、PostgreSQL アプリケーションのソフトウェア監査も容易になります。
bash キャプチャ bash コマンド
gnutls は、gnutls ライブラリの CA 証明書なしで gnutls テキスト コンテンツをキャプチャします。
gotls TLS/HTTPS で暗号化された Golang プログラムからの平文通信をキャプチャします。
mysqld は、 mysqld 5.6/5.7/8.0 から SQL クエリをキャプチャします。
nss nss/nspr ライブラリの CA 証明書を使用せずに、nss/nspr 暗号化テキスト コンテンツをキャプチャします。
postgres は postgres 10 以降から SQL クエリをキャプチャします。
tls は、CA 証明書なしで tls/ssl テキスト コンテンツをキャプチャするために使用します。 (openssl 1.0.x/1.1.x/3.0.x 以降をサポート)。 ecapture -h
使用すると、サブコマンドのリストを表示できます。
eCapture は、デフォルトで/etc/ld.so.conf
ファイルを検索し、 SO
ファイルのロード ディレクトリを検索し、 openssl
シャード ライブラリの場所を検索します。または、 --libssl
フラグを使用してシャード ライブラリのパスを設定することもできます。
ターゲットプログラムが静的にコンパイルされる場合、プログラムパスを--libssl
フラグ値として直接設定できます。
OpenSSL モジュールは 3 つのキャプチャ モードをサポートしています。
pcap
/ pcapng
モードは、キャプチャされた平文データをpcap-NG
形式で保存します。
keylog
/ key
モードは、TLS ハンドシェイク キーをファイルに保存します。
text
モードは、プレーンテキスト データを直接キャプチャし、指定されたファイルに出力するか、コマンド ラインに出力します。
TCP 経由の TLS 暗号化 http 1.0/1.1/2.0
、および UDP 経由の http3 QUIC
プロトコルをサポートしました。 -m pcap
または-m pcapng
を指定し、 --pcapfile
および-i
パラメーターと組み合わせて使用できます。 --pcapfile
のデフォルト値はecapture_openssl.pcapng
です。
sudo ecapture tls -m pcap -i eth0 --pcapfile=ecapture.pcapng tcp ポート 443
このコマンドは、キャプチャされた平文データ パケットを pcapng ファイルとして保存し、 Wireshark
使用して表示できます。
sudo ecapture tls -m pcap -w ecap.pcapng -i ens160 2024-09-15T06:54:12Z INF AppName="eCapture(旁观者)"2024-09-15T06:54:12Z INF HomePage=https://ecapture.cc 2024-09-15T06:54:12Z INF リポジトリ=https://github.com/gojue/ecapture 2024-09-15T06:54:12Z INF Author="CFC4N <[email protected]>"2024-09-15T06:54:12Z INF description="eBPF を使用して CA 証明書なしで SSL/TLS プレーンテキストをキャプチャします。Linux でサポートされています/Android カーネルamd64/arm64."2024-09-15T06:54:12Z INF バージョン=linux_arm64:0.8.6-20240915-d87ae48:5.15.0-113-generic 2024-09-15T06:54:12Z INF リッスン=ローカルホスト:28256 2024-09-15T06:54:12Z INF eCapture 実行ログ logger= 2024-09-15T06:54:12Z INF キャプチャされたイベントを受け取るファイル ハンドラーeventCollector= 2024-09-15T06:54:12Z WRN ========== モジュールを開始しています。 ========== 2024-09-15T06:54:12Z INF カーネル情報 = 5.15.152 Pid = 230440 2024-09-15T06:54:12Z INF BTF バイトコード モード: CORE。 btfモード=0 2024-09-15T06:54:12Z INF listen=localhost:28256 2024-09-15T06:54:12Z INF モジュールの初期化。 isReload=false moduleName=EBPFProbeOPENSSL 2024-09-15T06:54:12Z INF モジュール.Run() 2024-09-15T06:54:12Z INF https サーバーを開始しています...HTTP インターフェイス経由で構成ファイルを更新できます。 2024-09-15T06:54:12Z WRN OpenSSL/BoringSSL バージョンが共有ライブラリ ファイルから見つかりません。デフォルト バージョンが使用されました OpenSSL Version=linux_default_3_0 2024-09-15T06:54:12Z INF HOOK タイプ:Openssl elf ElfType=2 IFindex=2 IFname=ens160 PcapFilter= binrayPath=/usr/lib/aarch64-linux-gnu/libssl.so.3 2024-09-15T06:54:12Z INF フック masterKey 関数 Functions=["SSL_get_wbio","SSL_in_before","SSL_do_handshake"]2024-09-15T06:54:12Z INF はすべてのプロセスを対象とします。 2024-09-15T06:54:12Z INF はすべてのユーザーを対象としています。 2024-09-15T06:54:12Z INF setupManagers eBPFProgramType=PcapNG 2024-09-15T06:54:12Z INF BPF バイトコード ファイルが一致しました。 bpfFileName=user/bytecode/openssl_3_0_0_kern_core.o 2024-09-15T06:54:12Z INF パケットが pcapng ファイルに保存されました。 pcapng パス=/home/ecapture/ecap.pcapng 2024-09-15T06:54:12Z INF perfEventReader が作成した mapSize(MB)=4 2024-09-15T06:54:12Z INF perfEventReader が作成した mapSize(MB)=4 2024-09-15T06:54:12Z INF モジュールが正常に開始されました。 isReload=false moduleName=EBPFProbeOPENSSL 2024-09-15T06:54:14Z INF パケットが pcapng ファイルに保存されました。カウント=4 2024-09-15T06:54:16Z INF 非 TLSv1.3 暗号スイートが見つかりました CLientRandom=f08e8d784962d1693c042f9fe266345507ccfaba58b823904a357f30dbfa1e71 CipherId=0 2024-09-15T06:54:16Z INF 非 TLSv1.3 暗号スイートが見つかりました CLientRandom=f08e8d784962d1693c042f9fe266345507ccfaba58b823904a357f30dbfa1e71 CipherId=0 2024-09-15T06:54:16Z INF パケットが pcapng ファイルに保存されました。カウント=183 2024-09-15T06:54:16Z INF CLIENT_RANDOM 保存成功 CLientRandom=f08e8d784962d1693c042f9fe266345507ccfaba58b823904a357f30dbfa1e71 TlsVersion=TLS1_2_VERSION バイト=176 2024-09-15T06:54:18Z INF パケットが pcapng ファイルに保存されました。カウント=65 ^C2024-09-15T06:54:18Z INF モジュールを閉じます。 2024-09-15T06:54:18Z INF パケットが pcapng ファイルに保存されました。カウント=3 2024-09-15T06:54:18Z INF パケットが pcapng ファイルに保存されました。カウント=255 2024-09-15T06:54:18Z INF モジュールが閉じられました。コンテキストからメッセージを受信しました 2024-09-15T06:54:18Z INF iModule モジュールを閉じます 2024-09-15T06:54:18Z INF さようなら。
Wireshark
使用してecap.pcapng
ファイルを開いて、平文データ パケットを表示しました。
-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 フィールド -e http.file_data -f "ポート 443" -i eth0
sudo ecapture tls -m text
すべての平文データ パケットを出力します。 (v0.7.0 以降、SSLKEYLOG 情報はキャプチャされなくなりました。)
OpenSSL モジュールに似ています。
TLS テキスト コンテキストをキャプチャします。
ステップ 1:
sudo ecapture gotls --elfpath=/home/cfc4n/go_https_client --hex
ステップ 2:
/home/cfc4n/go_https_client
sudo ecapture gotls -h
bashmysqldpostgres
モジュールなどの場合、 ecapture -h
使用してサブコマンドのリストを表示できます。
Youtube ビデオ: eCapture v0.1.0 の使用方法
eCapture:Golang TLS/HTTPS トラフィックのプレーンテキストのキャプチャをサポート
パッチの送信と貢献ワークフローの詳細については、「貢献」を参照してください。
eCapture ソース コードのコンパイルの詳細については、「コンパイル」を参照してください。