Расшифровка SSL/TLS трафика в Wireshark

WiresharkWiresharkBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы научитесь расшифровывать SSL/TLS-трафик с помощью Wireshark, хорошо известного анализатора сетевых протоколов. Шифрование SSL/TLS обычно используется для защиты интернет-коммуникаций. Однако в некоторых случаях, таких как устранение неполадок или анализ безопасности, расшифровка зашифрованного трафика становится обязательной.

В этом лабораторном занятии вы пройдете процесс настройки Wireshark для расшифровки SSL/TLS-трафика. Оно предоставляет вам практический опыт в контролируемой среде.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) wireshark/WiresharkGroup -.-> wireshark/installation("Installation and Setup") wireshark/WiresharkGroup -.-> wireshark/interface("Interface Overview") wireshark/WiresharkGroup -.-> wireshark/packet_capture("Packet Capture") wireshark/WiresharkGroup -.-> wireshark/display_filters("Display Filters") wireshark/WiresharkGroup -.-> wireshark/follow_tcp_stream("Follow TCP Stream") wireshark/WiresharkGroup -.-> wireshark/decrypt_ssl_tls("Decrypting SSL/TLS") subgraph Lab Skills wireshark/installation -.-> lab-415943{{"Расшифровка SSL/TLS трафика в Wireshark"}} wireshark/interface -.-> lab-415943{{"Расшифровка SSL/TLS трафика в Wireshark"}} wireshark/packet_capture -.-> lab-415943{{"Расшифровка SSL/TLS трафика в Wireshark"}} wireshark/display_filters -.-> lab-415943{{"Расшифровка SSL/TLS трафика в Wireshark"}} wireshark/follow_tcp_stream -.-> lab-415943{{"Расшифровка SSL/TLS трафика в Wireshark"}} wireshark/decrypt_ssl_tls -.-> lab-415943{{"Расшифровка SSL/TLS трафика в Wireshark"}} end

Настройка расшифровки SSL/TLS в Wireshark

На этом шаге мы настроим Wireshark для расшифровки SSL/TLS-трафика. Но сначала давайте немного разберемся, что мы будем делать. SSL/TLS - это протокол, используемый для обеспечения безопасности интернет-коммуникаций. Когда данные отправляются по интернету с использованием SSL/TLS, они шифруются для защиты их конфиденциальности. Чтобы расшифровать этот трафик и увидеть реальные данные, Wireshark должен иметь доступ к ключам шифрования. Эти ключи хранятся в специальном файле, называемом файлом журнала предварительного мастер - секрета (pre - master secret log file). Создадим этот файл сейчас.

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

  1. Откройте терминал. Терминал - это текстовый интерфейс, где вы можете вводить команды для взаимодействия с операционной системой вашего компьютера. После открытия терминала создадим новый файл с именем pre_master_secret.log в директории /home/labex/project/. Этот файл будет использоваться для хранения ключей сеанса TLS, необходимых для расшифровки. Чтобы создать файл, введите следующую команду в терминале:

    touch /home/labex/project/pre_master_secret.log

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

  2. Теперь, когда у нас есть готовый файл журнала, нам нужно настроить Wireshark для его использования. Сначала откройте Wireshark, введя следующую команду в терминале:

    wireshark

    После открытия Wireshark вы увидите меню в верхней части окна. Нажмите Edit > Preferences. Это откроет окно, где вы можете настроить различные параметры Wireshark. В окне настроек (Preferences) посмотрите на левую панель. Там есть раздел с названием Protocols. Нажмите на него, а затем прокрутите вниз, пока не найдете TLS.

    В настройках TLS есть поле с меткой (Pre)-Master-Secret log filename. Именно здесь мы сообщаем Wireshark о местоположении файла журнала предварительного мастер - ключа, который мы только что создали. Введите полный путь к файлу:

    /home/labex/project/pre_master_secret.log

    Окно должно выглядеть примерно так:

    ![Wireshark TLS Preferences](https://file.labex.io/namespace/33fa8aba-d546-42e9-9692-64968aeaf0cc/cybersecurity/ws_decrypt_ssl_tls/lab-cipher-quest-tls-decrypting-guide/ru/../assets/lab - CipherQuestTLSDecryptingGuide - step1 - image1.png)

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

Захват SSL/TLS-трафика

На этом шаге мы будем захватывать SSL/TLS-трафик с помощью Wireshark и генерировать защищенный трафик с использованием Python-скрипта. SSL/TLS - это протокол, обеспечивающий безопасную связь в сети. Захват этого трафика позволяет нам проанализировать его позже, что важно для таких задач, как отладка сетевых проблем или обнаружение угроз безопасности.

  1. Начнем с захвата сетевого трафика. В Wireshark сетевые интерфейсы - это соединения, через которые ваш компьютер отправляет и получает данные. Вам нужно выбрать подходящий интерфейс для захвата интересующего вас трафика. Найдите список доступных сетевых интерфейсов. Нажмите на интерфейс eth1, чтобы выбрать его. Именно через этот интерфейс пройдет трафик, который мы хотим захватить. Затем нажмите кнопку Start (синий значок акулы) на панели инструментов, чтобы начать захват пакетов.

    Теперь Wireshark будет захватывать весь сетевой трафик на выбранном интерфейсе. По мере захвата вы увидите, как пакеты начинают появляться в главном окне. Каждый пакет представляет собой небольшую единицу данных, передаваемую по сети.

  2. Теперь нам нужно сгенерировать некоторый SSL/TLS-трафик, который мы сможем проанализировать. Откройте новое окно терминала. Терминал - это командная строка, где вы можете запускать команды для взаимодействия с вашим компьютером. Перейдите в директорию проекта, используя следующую команду:

    cd /home/labex/project/

    Эта команда изменяет текущую рабочую директорию на директорию проекта. Мы создадим Python-скрипт, который установит безопасное соединение с веб-сайтом. Python - это язык программирования, который позволяет нам писать скрипты для выполнения различных задач. Создайте новый файл с именем tls_client.py с помощью текстового редактора nano:

    nano tls_client.py

    Текстовый редактор nano - это простой и удобный в использовании текстовый редактор в терминале. Скопируйте и вставьте следующий Python-код в редактор:

    #!/usr/bin/env python3
    
    import ssl
    import socket
    import os
    
    HOST = "example.com"
    PORT = 443
    
    ## Set the path for the pre-master secret log file
    os.environ['SSLKEYLOGFILE'] = '/home/labex/project/pre_master_secret.log'
    
    ## Create an SSL/TLS context
    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    
    ## Create a socket and wrap it with SSL/TLS
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        with context.wrap_socket(sock, server_hostname=HOST) as ssock:
            ssock.connect((HOST, PORT))
    
            ## Send a simple HTTP GET request
            request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
            ssock.sendall(request.encode())
    
            ## Receive the response and print all the received data
            data = ssock.recv(4096)
            print(data.decode())

    Этот скрипт выполняет следующие действия:

    • Устанавливает переменную окружения, чтобы указать, куда сохранять ключи сеанса TLS. Эти ключи являются важными для последующей расшифровки SSL/TLS-трафика.
    • Устанавливает безопасное соединение с example.com. Библиотеки ssl и socket используются для установки этого соединения.
    • Отправляет простой HTTP-запрос. Этот запрос запрашивает у сервера главную страницу example.com.
    • Получает и отображает ответ сервера.

    Сохраните файл, нажав Ctrl+O, затем Enter, и выйдите из nano, нажав Ctrl+X.

    Теперь запустите скрипт, чтобы сгенерировать TLS-трафик:

    python3 tls_client.py

    Вы должны увидеть HTTP-ответ от example.com, что подтверждает, что скрипт успешно установил безопасное соединение. Скрипт также записал ключи сеанса TLS в наш файл журнала предварительного мастер - секрета, который Wireshark будет использовать для расшифровки.

    Вывод будет выглядеть примерно так:

    HTTP/1.1 200 OK
    Age: 558804
    Cache-Control: max-age=604800
    Content-Type: text/html; charset=UTF-8
    Date: ...
    ...
  3. Теперь, когда мы сгенерировали TLS-трафик, вернитесь в Wireshark и остановите захват, нажав красную кнопку Stop на панели инструментов. Остановка захвата необходима, чтобы мы могли сохранить захваченный трафик.

    Чтобы сохранить захваченный трафик для анализа, нажмите на File в меню, затем выберите Save As.... В диалоговом окне сохранения перейдите в /home/labex/project/, дайте файлу имя tls_traffic.pcapng и нажмите Save. Формат файла .pcapng - это стандартный формат для сохранения захватов сетевого трафика.

    Save Captured Traffic

    Теперь ваш захваченный трафик сохранен и готов к анализу на следующем шаге.

Анализ расшифрованного SSL/TLS-трафика

На этом шаге мы проанализируем расшифрованный SSL/TLS-трафик с использованием инструментов фильтрации и анализа Wireshark. Эти инструменты являются важными для извлечения значимой информации из большого объема данных сетевого трафика.

  1. Сначала применим фильтр, чтобы сосредоточиться на определенных частях рукопожатия TLS (TLS handshake). Рукопожатие TLS - это важный начальный процесс при установке безопасного соединения между клиентом и сервером. Во время этого процесса клиент и сервер обмениваются информацией, чтобы договориться о алгоритмах шифрования, ключах и других параметрах безопасности.

    В панели фильтра (текстовое поле ввода в верхней части окна Wireshark) введите следующее выражение:

    tls.handshake.type == 1

    Это выражение фильтра используется для выбора пакетов на основе типа рукопожатия TLS. Значение 1 соответствует пакетам Client Hello. Нажмите Enter, чтобы применить фильтр. После применения фильтра Wireshark будет отображать только пакеты Client Hello, которые являются начальными пакетами, отправляемыми клиентом для начала рукопожатия TLS.

    Теперь вы должны видеть только пакеты, соответствующие этому фильтру. Уменьшив количество отображаемых пакетов, становится легче сосредоточиться на начале соединения TLS и понять, как начинается безопасная связь.

    Чтобы просмотреть расшифрованное содержимое, следуем за потоком TLS. Щелкните правой кнопкой мыши по любому пакету в отфильтрованном списке и выберите Follow > TLS Stream из контекстного меню. Это действие сообщает Wireshark реконструировать весь сеанс TLS на основе выбранного пакета и отобразить расшифрованные данные.

    Откроется новое окно, показывающее расшифрованные данные. Эти данные представляют собой фактическую HTTP - связь, которая была передана по безопасному соединению. Благодаря ключам сеанса TLS, хранящимся в нашем файле журнала предварительного мастер - секрета, Wireshark может расшифровать и отобразить эти данные, которые обычно были бы зашифрованы.

    Расшифрованные данные покажут как HTTP - запрос, отправленный нашим Python - скриптом, так и HTTP - ответ от сервера. Вы можете увидеть заголовки, типы содержимого и фактическое HTML - содержимое ответа. Эта информация ценна для понимания связи между клиентом и сервером, например, какие данные запрашиваются и что возвращается.

  2. Сохраним эти расшифрованные данные для дальнейшего анализа. В окне "Follow TLS Stream" нажмите кнопку Save as.... Сохранение данных позволяет вам просмотреть их позже, поделиться с другими или провести дополнительный анализ.

    В диалоговом окне сохранения перейдите в /home/labex/project/, дайте файлу имя decrypted_data.txt и нажмите Save.

    Save Decrypted Data

    Теперь вы успешно захватили, расшифровали и сохранили TLS - трафик для анализа. Файл с расшифрованными данными содержит полную HTTP - связь, которая изначально была зашифрована с использованием TLS.

    Вы можете закрыть окно "Follow TLS Stream", когда закончите. Если вы хотите провести дальнейшее исследование, попробуйте разные фильтры Wireshark, чтобы изучить другие аспекты захваченного трафика. Например, фильтр http покажет вам только HTTP - трафик после расшифровки. Таким образом, вы можете углубиться в конкретные типы данных, передаваемых по сети.

Резюме

В этом лабораторном занятии вы научились расшифровывать SSL/TLS - трафик с помощью Wireshark. Вы создали файл журнала предварительного мастер - секрета для хранения ключей сеанса TLS, настроили Wireshark на использование этого файла для расшифровки и сгенерировали SSL/TLS - трафик с помощью Python - скрипта. Затем вы проанализировали расшифрованный трафик, используя функции фильтрации и отслеживания потоков в Wireshark.

Эти навыки являются важными для устранения неполадок в сети, анализа безопасности и понимания безопасной связи. Расшифровка и анализ TLS - трафика в контролируемой среде помогает вам лучше понять сетевые протоколы и выявить проблемы в зашифрованной связи. Помните, что в реальных условиях расшифровка TLS - трафика требует соответствующего разрешения и должна выполняться только в авторизованных сетях, чтобы избежать нарушения законов о конфиденциальности.