Вопрос или проблема
Мы хотим расшифровать трафик веб-сокетов, чтобы проанализировать используемый протокол. Трафик идет между ПК (Windows) и встроенной системой. Все сертификаты доступны с частными ключами, и всё настроено в лабораторной среде.
Когда я захватываю трафик с помощью Wireshark, я могу увидеть обмен ключами и используемый набор шифров. В моем случае это TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
.
После поиска в Интернете я понял, что трафик с этим набором шифров можно расшифровать только с использованием SSLKEYLOGFILE в Wireshark.
Как первая идея, я хотел изменить набор шифров в своей системе Windows и использовать набор шифров, который менее безопасен и может быть расшифрован с использованием RSA-ключей. Это не сработало, и я не нашел способа это сделать.
Может кто-то подскажет, как установить набор шифров клиента в Windows? Всё, что я нашел, касается IIS.
Другой идеей было использовать sslsplit для создания файла SSLKEYLOG для использования в Wireshark. Я могу подключиться с помощью sslsplit. Файл SSLKEYLOG создается, но остается пустым. Я использовал следующую команду:
sslsplit -D -M sslkey.log -R tls12 -l conn.log -X capture.pcap -P -k ca-key.pem -c ca.crt ssl 192.168.40.130 8443 10.10.11.170 8443
У кого-нибудь есть идея, почему это не работает?
Я не знаю, почему это не работает, но обычными способами являются mitmproxy или burpsuite для перехвата и расшифровки трафика.
Сама Windows использует schannel, который имеет несколько вариантов конфигурации для предпочитаемых шифров: https://docs.microsoft.com/en-us/windows-server/security/tls/tls-ssl-schannel-ssp-overview
Также есть более сложные способы получения ключей, такие как перехват lsass: https://b.poc.fun/decrypting-schannel-tls-part-1/
Тем не менее, зависит от вашего приложения, используется ли действительно schannel. Внешние приложения могут использовать какую-то другую библиотеку ssl, такую как openssl, поэтому изменение настроек schannel в таких случаях не поможет. Возможно, вы также сможете расшифровать трафик на встроенной стороне в зависимости от системы.
Ответ или решение
Для расшифровки трафика WebSocket с использованием TLS 1.2 в вашем лабораторном окружении, где у вас есть все сертификаты и закрытые ключи, существуют несколько подходов. Рассмотрим их подробнее.
1. Использование SSLKEYLOGFILE для захвата ключей
Вы абсолютно правы в том, что использование переменной окружения SSLKEYLOGFILE
может помочь расшифровать трафик. Чтобы использовать эту переменную, вам нужно убедиться, что ваше приложение или веб-браузер поддерживает её. Это самый простой способ получить ключи для данного соединения. Если вы используете браузер, то вот как это сделать:
-
Если вы используете браузер, такой как Chrome или Firefox, установите переменную окружения перед запуском браузера:
Для Windows:
set SSLKEYLOGFILE=C:\path\to\sslkeylog.log start chrome
-
Привязав переменную, вы сможете видеть записи в файле
sslkeylog.log
, которые затем можно будет использовать в Wireshark для расшифровки трафика.
2. Изменение списка шифров на Windows
Вы можете изменить набор шифров, чтобы использовать менее защищенные шифры, но с этим могут возникнуть сложности, так как большинство современных приложений используют для своих соединений Schannel (API Windows для SSL/TLS).
Чтобы изменить предпочитаемые шифры, выполните следующие действия:
- Откройте Чистый редактор реестра (Registry Editor) через
regedit
. - Перейдите в следующий путь:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers
- В этой ветке вы можете добавлять или изменять параметры для определённых шифров.
Однако, если ваше приложение использует сторонние библиотеки SSL, такие как OpenSSL, то изменение этой настройки на Windows не принесёт результата.
3. Использование прокси-серверов, таких как mitmproxy или Burp Suite
Если настройки Schannel не дают нужных результатов или сложны для изменения, вы можете использовать инструменты для перехвата трафика. Mitmproxy и Burp Suite хорошо подходят для этой задачи:
- Установите mitmproxy или Burp Suite и настройте его как промежуточный прокси-сервер.
- Установите корневой сертификат данного прокси на клиентском устройстве (вашем ПК или встроенной системе), чтобы избежать ошибок сертификата.
- Настройте ваше приложение на использование этого прокси-сервера для всех соединений.
4. Использование sslsplit
Если использование sslsplit не приводит к созданию файла SSLKEYLOG, убедитесь, что у вас корректно настроены параметры командной строки. Также убедитесь, что вы используете правильные IP-адреса и порты для подключения.
Дополнительные варианты:
- Проверьте логи sslsplit на наличие ошибок или предупреждений, которые могут указывать на проблемы с настройками.
- Убедитесь, что у вашего серверного устройства установлен правильный маршрутизатор, который позволяет перенаправлять трафик к sslsplit.
Дополнительные ресурсы
Связанные темы и эксперименты, такие как перехват шифрованных соединений с помощью продвинутых методов, включая захват памяти (например, с помощью lsass), могут быть полезны, хотя они и требуют более глубокого понимания и условий настройки вашей системы.
Заключение
Для успешного декодирования WebSocket-трафика следует использовать несколько методов. Важно протестировать различные подходы, описанные выше, в зависимости от того, что лучше всего работает в вашем конкретном окружении. Удачи с расшифровкой!