В современных сетях защита передачи данных имеет первостепенное значение, и протоколы Secure Sockets Layer (SSL) и Transport Layer Security (TLS) широко используются для обеспечения конфиденциальности и безопасности данных. Однако бывают случаи, когда вам может потребоваться анализ зашифрованного трафика для устранения неполадок, судебно-медицинского анализа или мониторинга сети. Эта техническая статья проведет вас через расшифровку трафика SSL/TLS с помощью Wireshark и tcpdump, двух мощных инструментов сетевого анализа. Мы рассмотрим, что такое Wireshark и tcpdump, объясним шифрование SSL и TLS и покажем, как расшифровать трафик SSL с помощью секретного ключа pre-master или закрытого ключа RSA.
Что такое Wireshark и tcpdump? #
Wireshark #
Wireshark — это анализатор сетевых протоколов с открытым исходным кодом, который позволяет пользователям захватывать и интерактивно просматривать трафик, проходящий по компьютерной сети. Он позволяет вам проверять данные на гранулярном уровне, обеспечивая видимость передаваемых протоколов и пакетов данных. Wireshark широко используется для устранения неполадок в сети, разработки протоколов и анализа безопасности.
ТСРйитр #
tcpdump — это инструмент анализа пакетов командной строки, который захватывает сетевой трафик и отображает его в режиме реального времени. Он очень эффективен для захвата данных из работающих сетей, позволяя сохранять пакеты в файл (известный как файл захвата) для последующего анализа. Хотя tcpdump не имеет графического интерфейса Wireshark, он является мощным инструментом для быстрого анализа, фильтрации пакетов и сбора данных на удаленных системах.
Что такое SSL-шифрование? #
SSL (Secure Sockets Layer) — это протокол, разработанный Netscape для передачи личных документов через Интернет. SSL использует алгоритмы шифрования, чтобы гарантировать, что данные, передаваемые между клиентом (например, веб-браузером) и сервером, не могут быть прочитаны тем, кто перехватит передачу.
TLS (Transport Layer Security) является преемником SSL и более безопасен. Хотя TLS технически отличается от SSL, термин SSL часто используется для обозначения обоих протоколов.
SSL/TLS работает путем установления безопасного канала связи между двумя системами. Ключевые концепции шифрования SSL/TLS включают:
- Симметричное шифрование: для шифрования и дешифрования данных используется один ключ.
- Асимметричное шифрование: используются два ключа (открытый и закрытый); данные, зашифрованные с помощью открытого ключа, могут быть расшифрованы только с помощью соответствующего закрытого ключа.
- Сертификаты: SSL/TLS использует сертификаты для проверки подлинности сервера, а иногда и клиента.
- Рукопожатие: процесс, при котором клиент и сервер устанавливают безопасное соединение, обмениваются ключами и согласовывают методы шифрования.
Расшифровка SSL с помощью предварительного главного секретного ключа #
Pre-master secret key — это важный компонент в процессе установления связи SSL/TLS. Этот ключ используется для генерации ключей сеанса, которые затем используются для шифрования фактических данных, передаваемых по сети. Получив pre-master secret key, вы можете расшифровать данные сеанса.
Основные шаги для расшифровки SSL с помощью предварительного главного секретного ключа #
Чтобы расшифровать SSL-трафик с помощью предварительного секретного ключа, выполните следующие действия:
1. Установите переменную среды файла журнала
2. Захват с помощью tcpdump и проверка файла журнала
3. Настройте Wireshark для расшифровки SSL
Установите переменную среды файла журнала #
настройка SSLKEYLOGFILE в Windows #
В системах Windows вам нужно будет задать переменную окружения для сохранения pre-master secret ключей в файле журнала. Эта переменная, названная SSLKEYLOGFILE, определяет путь, по которому сохраняются эти ключи.
1. Начните с щелчка правой кнопкой мыши по Мой компьютер и выбор Основные свойства из меню, чтобы открыть меню «Система».
2. Нажмите на Дополнительные параметры системы в левом списке, чтобы открыть окно «Свойства системы».
3. В Фильтр На вкладке «Переменные среды» нажмите кнопку «Переменные среды».
4. Под Пользовательские переменные, Нажмите Новое… кнопку. Вы также можете создать эту переменную под Системные переменные если вы хотите регистрировать ключи SSL для всех пользователей в системе. Однако, обычно лучше ограничить это своим профилем.
5. В Имя переменной поле введите SSLKEYLOGFILE.
В Значение переменной поле, введите путь, где вы хотите сохранить файл журнала. Либо вы можете нажать Просмотреть файл… выбрать путь с помощью средства выбора файлов.
Если вы устанавливаете это как общесистемную переменную, убедитесь, что файл доступен всем пользователям, или используйте подстановочные знаки. Например, вы можете использовать %USERPROFILE%\AppData\ssl-keys.log or C:\ssl-keys.log .
6. Как только вы закончите, нажмите OK чтобы применить изменения и перейти к следующим шагам.
настройка SSLKEYLOGFILE на Linux или Mac #
На Linux и Mac вам нужно будет установить SSLKEYLOGFILE переменная среды с использованием экспорт. В том же терминале вы можете выполнить ТСРйитр и он сгенерирует указанный файл журнала ключей при обнаружении SSL-соединения.
root@noid-01:~# экспорт SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump ...
Чтобы сохранить постоянную конфигурацию переменных среды, отредактируйте профиль пользователя с помощью текстового редактора, например: карликовый. Для Linux эта переменная хранится в ~ / .bashrc, а на Mac он создается в ~ / .bash_profile. Затем добавьте экспорт команда для SSLKEYLOGFILE переменную в конце файла и сохраните изменения.
Захват с помощью tcpdump и проверка файла журнала #
Чтобы проверить генерацию файла журнала, попробуйте открыть браузер, ТСРйитр или запустите команду curl на HTTPS-сервере, чтобы подтвердить, что файл создан правильно.
Например, в том же терминале, где были созданы переменные среды, ТСРйитр для захвата трафика и запуска curl для HTTPS-сервиса для расшифровки:
root@noid-01:~# export SSLKEYLOGFILE=~/.ssl-key.log root@noid-01:~# tcpdump -i любой порт 443 -w ~/capture.pcap & root@noid-01:~# curl https://(затем закройте команду tcpdump)
Убедитесь, что файл журнала ~/.ssl-ключ.log и захват трафика на ~/capture.pcap генерируются. Наконец, см. последний шаг, чтобы увидеть зашифрованный трафик с помощью wireshark.
Если вы откроете ssl-ключ.log файл, вы увидите что-то вроде следующего:
root@noid-01:~# cat ~/.ssl-key.log CLIENT_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a db6f3d27b40b7c8e10ed415281b39e45ca6ef2b59468f943dbe6e81e1f82e0f0 SERVER_HANDSHAKE_TRAFFIC_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a d819660e194d9439e7152ceac2a439b41584afbeb5d719663cecb3c63b5c2eb1 CLIENT_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 71d4806141cb1b247c1d1f3f7747a804fcc5e06c4192d8f53fc763a27b92316c SERVER_TRAFFIC_SECRET_0 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 2ca17b0f7ff708fb3001be17a1c85163219221a4595462415e9e9e6653daf1fa EXPORTER_SECRET 83ac6b24496f208daee39dfdfcbd36b7c428245af5e3775e42099dbd48741d4a 3f74b0cbe802d3e3dd3b5f6dee4114f928ec936a0cd388643d146cfb606f62a4
Настройте Wireshark для расшифровки SSL #
После того как система захвата начнет регистрировать предварительные мастер-ключи, вы сможете использовать файл журнала ключей вместе с захваченными пакетами для расшифровки трафика SSL в Wireshark.
1. Загрузите файлы журнала и захвата ключей в систему, где установлен Wireshark.
2. Откройте файл захвата трафика с помощью Wireshark.
3. Настройте протокол SSL. Нажмите на Редактировать, А затем выберите Настройки. Откроется диалоговое окно «Настройки», в котором слева будет показан список элементов. Разверните протоколы раздел, прокрутите вниз и нажмите на SSL. В SSL параметры протокола, найдите поле с надписью Имя файла журнала (Pre)-Master-Secret. Перейдите к файлу журнала, который вы настроили ранее, или вставьте путь непосредственно в это поле.
4. Применить конфигурацию. После настройки Имя файла журнала (Pre)-Master-Secret, нажмите OK чтобы сохранить изменения и вернуться в Wireshark. Теперь вы готовы расшифровать захваченный трафик. Когда вы выбираете зашифрованный кадр данных, проверьте представление Packet byte. Под представлением вы должны увидеть вкладку для Расшифрованные данные SSL и другие.
Если данные сеанса по-прежнему нечитаемы и вы не видите HTML, это может быть связано с компрессией GZIP, которая обычно используется веб-серверами, такими как Apache. В этом случае щелкните Несжатое тело сущности вкладка, которая доступна только при включенной расшифровке SSL. Здесь вы можете просмотреть несжатый исходный код сайта, например, элемент заголовка страницы Apache по умолчанию в виде открытого текста.
Использование ключа RSA для расшифровки SSL #
Wireshark предлагает функцию, которая позволяет вам загружать ключи RSA для расшифровки трафика SSL, но на практике расшифровка ключей RSA устарела.
Это снижение использования связано с принятием Perfect Forward Secrecy (PFS), которая сделала традиционную расшифровку ключей RSA устаревшей. С PFS сеансы, согласованные с использованием Diffie-Hellman, не полагаются на ключ RSA напрямую. Вместо этого они генерируют одноразовый ключ, который хранится только в оперативной памяти и шифруется с использованием ключа на диске.
Если вы ранее использовали ключ RSA для расшифровки трафика и обнаружили, что он больше не работает, целевая машина, скорее всего, использует обмен ключами Диффи-Хеллмана. Вы можете подтвердить это, включив ведение журнала SSL в Wireshark.
Чтобы включить ведение журнала:
1. Нажмите на Редактировать в меню панели инструментов и выберите Настройки.
2. Развернуть протоколы раздел слева, прокрутите вниз и нажмите на SSL.
3. Укажите местоположение файла журнала SSL, нажав кнопку Вставить .
После включения ведения журнала запишите сеанс с вашим хостом с поддержкой SSL и проверьте журналы. Найдите фрейм согласования рукопожатия TLS; вы, скорее всего, увидите запись DHE (или ECDHE, для ключей эллиптической кривой) в строке шифра, что указывает на использование обмена ключами Диффи-Хеллмана.
Если вы видите сообщение о том, что главный секрет не может быть найден, и расшифровка ключа RSA не удалась, вам необходимо переключиться на метод предварительного главного секрета для расшифровки.
Поскольку PFS становится все более распространенным, особенно с появлением TLS 1.3, традиционное расшифровывание ключей RSA устарело и на него больше не следует полагаться.
Узнать больше #
Формат SSLKEYLOGFILE для TLS #
SSLKEYLOGФАЙЛ format — текстовый файл, используемый для хранения pre-master secret ключей для расшифровки соединений TLS. Файл закодирован в UTF-8, каждая строка содержит секрет, идентифицированный меткой, случайное значение клиента и сам секрет, все разделенные пробелами. Формат принимает различные окончания строк (CRLF, CR, LF) и строки, начинающиеся с # рассматриваются как комментарии.
Для TLS 1.3 несколько меток соответствуют различным этапам ключевого графика, например: CLIENT_HANDSHAKE_TRAFFIC_SECRET и SERVER_TRAFFIC_SECRET_0. Для TLS 1.2 и более ранних версий КЛИЕНТ_СЛУЧАЙНЫЙ этикетка идентифицирует мастер секрет.
Соображения безопасности:
Доступ к SSLKEYLOGФАЙЛ позволяет расшифровывать трафик TLS, что представляет собой существенную угрозу безопасности. Надлежащий контроль доступа необходим для предотвращения несанкционированного доступа или повышения привилегий. Ведение журнала должно быть включено только авторизованными пользователями, и должны применяться строгие разрешения на доступ к файлам. Зарегистрированные секреты не только позволяют расшифровывать, но и могут позволить злоумышленникам изменять или внедрять данные в активные соединения, а в некоторых случаях выдавать себя за конечные точки или подделывать сообщения.
Как работает двустороннее SSL-рукопожатие? #
Двустороннее SSL-рукопожатие аутентифицирует как сервер, так и клиента. Вот как разворачивается процесс:
1. Клиент привет: Клиент инициирует рукопожатие, отправляя сообщение «Client Hello» на сервер. Это сообщение включает поддерживаемые клиентом наборы шифров и совместимость версий TLS.
2. Сервер Привет: Сервер отвечает сообщением «Server Hello», которое содержит открытый сертификат сервера и запрос на сертификат клиента.
3. Проверка клиентского сертификата: Клиент проверяет сертификат сервера. Если он действителен, клиент отправляет свой собственный сертификат обратно на сервер.
4. Проверка сертификата сервера: Сервер проверяет сертификат клиента. Если сертификат клиента действителен, сеанс устанавливается, обеспечивая безопасную связь между обеими сторонами.
Возможно ли расшифровать пассивно прослушиваемый трафик SSL/TLS? #
Да, возможно расшифровать пассивно прослушанный трафик SSL/TLS, но для этого вам понадобится ключ RSA. Этот ключ можно получить законными способами с соответствующей авторизацией или, что менее этично, перехватив его с помощью атаки «man-in-the-middle».