
eBPF를 사용하여 CA 인증서 없이 SSL/TLS 평문을 캡처합니다. amd64/arm64용 Linux/Android 커널에서 지원됩니다.
한자 | 영어
[!IMPORTANT]
Linux/Android의 x86_64(커널 4.18+) 및 aarch64(커널 5.5+)를 지원합니다. 커널 버전 요구 사항은 Linux와 Android 모두 CPU 아키텍처별로 적용됩니다. ROOT 권한 또는 특정 Linux capabilities가 필요합니다. Windows 및 macOS 시스템을 지원하지 않습니다.
[!TIP] Linux/Android x86_64/aarch64 지원.
ELF zip 파일 release를 다운로드하고 압축을 풀어 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는 전체 호스트 액세스를 허용합니다. 프로덕션 환경에서는 특정 capabilities 사용을 고려하세요. 최소 권한 가이드를 참조하세요.
자세한 내용은 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 모듈은 세 가지 캡처 모드를 지원합니다:
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 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 텍스트 콘텍스트를 캡처합니다.
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 명령어로 서브명령어 목록을 확인할 수 있습니다.
eCaptureQ는 eCapture의 크로스 플랫폼 그래픽 사용자 인터페이스 클라이언트로, eBPF TLS 캡처 기능을 시각화합니다. Rust + Tauri + React 기술 스택으로 구축되어 실시간 반응형 인터페이스를 제공하며, CA 인증서 없이도 암호화된 트래픽을 쉽게 분석할 수 있습니다. 복잡한 eBPF 캡처 기술을 단순화하여 사용하기 쉽게 만듭니다. 두 가지 모드를 지원합니다:
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 문서를 참조하세요.