
ecapture — Updated!
Захват открытого текста SSL/TLS без сертификата ЦС с помощью eBPF. Поддерживается на ядрах Linux/Android для amd64/arm64.
汉字 | English
eCapture (наблюдатель): перехват открытого текста SSL/TLS-трафика без CA-сертификата с помощью eBPF.
[!IMPORTANT] Поддерживает Linux и Android на x86_64 (ядро 4.18+) и aarch64 (ядро 5.5+). Требование к ядру применяется отдельно для каждой архитектуры CPU как в Linux, так и в Android. Требуются права root или определённые возможности Linux. Не поддерживает Windows и macOS.
Введение
- Перехватывает открытый текст TLS/SSL-трафика из библиотек OpenSSL, LibreSSL, BoringSSL, GnuTLS и NSS/NSPR.
- Поддерживает перехват открытого текста для программ на Go TLS, включая HTTPS/TLS-трафик в приложениях на Go.
- Проводит аудит истории команд bash и zsh для мониторинга безопасности хоста.
- Проводит аудит запросов MySQL и поддерживает MySQL 5.6/5.7/8.0 и MariaDB.
Начало работы
Загрузка
ELF-бинарный файл
[!TIP] Поддерживает Linux/Android на x86_64 и aarch64.
Скачайте пакет с 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 и начинает перехват открытого трафика. Когда вы выполняете 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 модулей, которые могут перехватывать открытые данные из библиотек TLS/SSL, таких как OpenSSL, GnuTLS, NSS/NSPR, BoringSSL и GoTLS. Он также поддерживает аудит команд и запросов из приложений Bash, MySQL и PostgreSQL.
- bash: перехватывает команды bash
- zsh: перехватывает команды zsh
- gnutls: перехватывает открытый текст из библиотек GnuTLS без необходимости в CA-сертификате
- gotls: перехватывает открытое взаимодействие из программ на Go, использующих TLS/HTTPS
- mysqld: перехватывает SQL-запросы из MySQL 5.6/5.7/8.0 и MariaDB
- nss: перехватывает открытый текст из библиотек NSS/NSPR без необходимости в CA-сертификате
- postgres: перехватывает SQL-запросы из PostgreSQL 10+
- tls: перехватывает открытый текст TLS/SSL-трафика без CA-сертификата (поддерживает OpenSSL 1.0.x/1.1.x/3.0.x и новее)
Вы можете использовать ecapture -h, чтобы просмотреть полный список подкоманд.
Модуль OpenSSL
eCapture выполняет поиск по путям библиотек по умолчанию из /etc/ld.so.conf, чтобы найти разделяемые библиотеки и определить расположение библиотеки OpenSSL. Вы также можете явно задать путь к библиотеке с помощью флага --libssl.
Если целевая программа скомпонована статически, вы можете указать путь к программе непосредственно в качестве значения флага --libssl.
Модуль OpenSSL поддерживает три режима перехвата:
- Режим
pcap/pcapngсохраняет перехваченные открытые данные в форматеpcap-NG. - Режим
keylog/keyсохраняет ключи TLS-рукопожатия в файл. - Режим
textперехватывает открытые данные напрямую, записывая их в файл или выводя в консоль.
Режим Pcap
Поддерживает TLS-шифрованный HTTP 1.0/1.1/2.0 поверх TCP и HTTP/3 (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.
Перехваченный master secret OpenSSL TLS сохраняется в --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
Режим 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