Ремонт компьютеров

Мастер ☎ +7(495) 748-95-08

Ремонт компьютеров, выезд мастера в течении часа!

Расшифровка трафика SSL с помощью Wireshark

Отличная особенность Wireshark - возможность расшифровывать трафик SSL. Почему вы можете захотеть сделать это, как это сделать, почему это работает и как уменьшить вероятность того, что другие люди смогут расшифровать ваш «безопасный» трафик.

Зачем расшифровывать SSL?

Помимо явного злонамеренного использования, расшифровка SSL имеет такие применения, как:

  • Отладка приложений, работающих по протоколу SSL (HTTP, SMTP, POP3, IMAP, FTP и т. Д.).
  • Подача расшифрованного потока трафика в IDS. Наличие лучших в мире подписей не поможет, если все ваши датчики увидят зашифрованный трафик.
  • Узнав о SSL. Что может быть лучше, чтобы понять что-то, чем разобрать и снова собрать все вместе?

Как расшифровать SSL с помощью Wireshark

Шаг первый - настроить защищенный SSL-сервер для использования в качестве испытательного стенда

Чтобы проиллюстрировать этот процесс, мы собираемся использовать OpenSSL для генерации сертификата и выступать в качестве веб-сервера, работающего по протоколу HTTP через SSL (он же HTTPS) - это довольно просто.

Для начала нам нужно получить самозаверяющий сертификат, который может использовать наш HTTPS-сервер. Мы можем сделать это с помощью одной команды:

openssl req -x509 -nodes -newkey rsa: 1024 -keyout testkey.pem -out testcert.pem

OpenSSL попросит вас ввести данные для заполнения вашего сертификата; После того , как вы ответите на все вопросы, результатом этой команды будет два файла:

testkey.pem (содержащий 1024-битный закрытый ключ RSA) и testcert.pem (содержащий самозаверяющий сертификат). Файлы формата PEM (Privacy Enhanced Mail) имеют открытый текст и состоят из тела в кодировке BASE64 с верхним и нижним колонтитулами. Вы можете посмотреть содержимое вашего ключа и файлов сертификатов более подробно, например:

openssl rsa -in testkey.pem -text -noout openssl x509 -in testcert.pem -text -noout (вывод здесь ) (вывод здесь ; дополнительная информация здесь )

Нам нужно выполнить одну крошечную настройку формата файла закрытого ключа (Wireshark будет использовать это позже, и он не будет работать должным образом, пока мы не сделаем это):

openssl rsa -in testkey.pem -out testkey.pem

Теперь мы готовы запустить наш HTTPS-сервер:

openssl s_server -key testkey.pem -cert testcert.pem -WWW -шифр RC4-SHA -принимать 443

Параметры -key и -cert для команды s_server ссылаются на только что созданные файлы, а параметр -WWW (этот регистр учитывает регистр) заставляет OpenSSL действовать как простой веб-сервер, способный извлекать файлы в текущем каталоге (в примере тестовый файл myfile.html для Цели теста).

Параметр -cipher указывает серверу использовать определенный набор шифров - используем RC4-SHA, потому что именно это используется при переходе на https://www.google.com . Набор шифров RC4-SHA будет использовать ключи RSA для аутентификации и обмена ключами, 128-битный RC4 для шифрования и SHA1 для хеширования.

После того, как наш сервер запущен и работает, мы можем указать браузеру по адресу https: //myserver/myfile.html и получить наш тестовый файл по протоколу SSL (вы можете игнорировать любые предупреждения о действительности сертификата). Если у вас это работает, мы можем перейти к ...

Шаг второй - захватить трафик с помощью Wireshark

Запустите Wireshark на серверном компьютере, в идеале с фильтром захвата, например, «tcp port 443», чтобы мы не захватывали ненужный трафик. После того, как мы запишемся, наведите ваш браузер (работающий на другом компьютере) на https: //myserver/myfile.html и остановите захват, как только он будет завершен.

Щелкните правой кнопкой мыши на любом из захваченных фреймов и выберите «Следовать по TCP-потоку» - появится всплывающее окно, в основном заполненное гоббедом, защищенным SSL:

Шаг третий - настройка Wireshark для расшифровки

Закройте окно TCP Stream и выберите «Настройки» в меню «Правка» Wireshark. Разверните узел «Протоколы» в дереве слева и прокрутите вниз до SSL (в более новых версиях Wireshark вы можете открыть узел и ввести SSL, и он перенесет вас туда).

После выбора SSL справа появляется опция для ввода «списка ключей RSA». Введите что-то вроде этого:

10.16.8.5.443, http, c: \ openssl-win32 \ bin \ testkey.pem

Вам необходимо отредактировать IP-адрес сервера и путь к testkey.pem в зависимости от ситуации. Если это сработало, мы заметим две вещи:

SSL-анализатор Wireshark может просматривать иным образом зашифрованные SSL-пакеты и анализировать протокол внутри:

Мы можем щелкнуть правой кнопкой мыши по любому из захваченных кадров, которые перечислены как SSL или TLS, и выбрать «Следить за потоком SSL»:

Почему это работает

Итак, почему это работает? Наш тестовый сервер, как и очень большая часть веб-серверов HTTP-over-SSL, использует RSA для обмена симметричным ключом сеанса, который будет использоваться алгоритмом шифрования (в данном случае RC4). Ниже выписка из RFC2246 :

F.1.1.2. Обмен ключами RSA и аутентификация

С RSA, обмен ключами и аутентификация сервера объединены. Открытый ключ может содержаться либо в сертификате сервера, либо может быть временным ключом RSA, отправленным в сообщении обмена ключами сервера.

После проверки сертификата сервера клиент шифрует pre_master_secret с открытым ключом сервера.

Сервер, конечно, может расшифровать pre_master_secret, переданный ему клиентом (используя закрытый ключ сервера в testkey.pem ), и впоследствии и клиент, и сервер получают из него master_secret - это симметричный ключ, который обе стороны будут использовать с RC4 для шифрования сеанса.

Но сервер не единственный с закрытым ключом, который соответствует открытому ключу в сертификате сервера - он есть и у Wireshark. Это означает, что он может расшифровать pre_master_secret на пути от клиента к серверу, а затем получить master_secret, необходимый для расшифровки трафика.

SSL-cертификат

SSL-сертификат подтверждает, что домен принадлежит реальной компании и что его владелец вправе пользоваться секретным ключом на законных основаниях. Разница между HTTP и HTTPS. HTTPS (HyperText Transfer Protocol Secure) – это расширение протокола HTTP, поддерживающее шифрование.

Данные, передаваемые по протоколу HTTP, «упаковываются» в криптографический протокол SSL или TLS. По умолчанию HTTPS использует 443 TCP-порт (для незащищенного HTTP – 80)