Перехват и анализ TLS-трафика
Утилита ecapture предназначена для перехвата и анализа TLS-трафика с использованием eBPF. Позволяет получать расшифрованное содержимое HTTPS-трафика без установки доверенного сертификата.
Основные сценарии использования:
-
Получение ключевого материала TLS. Ключи сохраняются в формате
SSLKEYLOGFILEи применяются для расшифровки трафика в Wireshark или tshark. -
Расшифровка TLS-трафика. Содержимое HTTPS-запросов и ответов становится доступным при наличии ключевого материала.
-
Анализ HTTPS-трафика в Wireshark или tshark. Выполняется разбор расшифрованного трафика, включая заголовки и содержимое HTTP/HTTP2.
Для корректной работы утилиты ecapture необходимо указать путь к библиотеке libssl.
Путь к библиотеке определяется командой:
openresty -V
Необходимо найти параметры --with-ld-opt или --with-cc-opt, содержащие путь к библиотеке.
По умолчанию библиотека может располагаться по пути:
/usr/local/openresty/openssl3/lib/libssl.so.3
Полученный путь необходимо указать в параметре --libssl.
Запись трафика в pcapng-файл:
sudo ecapture tls -m pcap -i eth0 --libssl=/PATH/TO/libssl.so --pcapfile=output.pcapng
Файл содержит встроенные данные для расшифровки и может быть открыт в Wireshark.
Логирование ключей TLS:
sudo ecapture tls -m keylog --keylogfile=/var/log/tls/tls_keys.log --libssl=/PATH/TO/libssl.so
Комбинированный сбор трафика и ключей:
# Terminal 1: захват трафика
sudo tcpdump -i any -w /tmp/traffic.pcap 'tcp port 443'
# Terminal 2: логирование ключей
sudo ecapture tls -m keylog --keylogfile=/tmp/keys.log
# Terminal 3: генерация трафика
curl https://www.google.com
curl https://www.github.com
Расшифровка трафика с помощью tshark:
tshark -r /tmp/traffic.pcap \
-o tls.keylog_file:/tmp/keys.log \
-Y http \
-T fields \
-e frame.number \
-e http.request.full_uri \
-e http.response.code
Расшифровка в реальном времени:
# Terminal 1: запуск логирования ключей
sudo ecapture tls -m keylog --keylogfile=ecapture_keys.log
# Terminal 2: расшифровка HTTP/1.x
tshark -o tls.keylog_file:ecapture_keys.log \
-Y http \
-T fields \
-e http.file_data \
-f "port 443" \
-i eth0
Для HTTP/2:
tshark -o tls.keylog_file:ecapture_keys.log \
-Y http2 \
-T fields \
-e http2.data.data \
-f "port 443" \
-i eth0
Расшифровка в Wireshark:
Открыть Wireshark, перейти в раздел Edit → Preferences → Protocols → TLS и в поле (Pre)-Master-Secret log filename указать путь к файлу с ключами. Затем открыть файл traffic.pcap или capture.pcapng и применить фильтры http или http2.