Анализ TCP-трафика с помощью функции «Следовать за TCP-потоком» в Wireshark

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

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

Введение

В этой лабораторной работе вы узнаете, как использовать функцию "Follow TCP Stream" (Отслеживание TCP-потока) в Wireshark для анализа TCP-трафика. Эта функция позволяет извлекать и просматривать данные (payload) определенного TCP-соединения (TCP conversation). Она очень полезна во многих сценариях кибербезопасности, таких как расследование подозрительного сетевого трафика и анализ протоколов приложений.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL wireshark(("Wireshark")) -.-> wireshark/WiresharkGroup(["Wireshark"]) 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/export_packets("Exporting Packets") wireshark/WiresharkGroup -.-> wireshark/packet_analysis("Packet Analysis") subgraph Lab Skills wireshark/packet_capture -.-> lab-415946{{"Анализ TCP-трафика с помощью функции «Следовать за TCP-потоком» в Wireshark"}} wireshark/display_filters -.-> lab-415946{{"Анализ TCP-трафика с помощью функции «Следовать за TCP-потоком» в Wireshark"}} wireshark/follow_tcp_stream -.-> lab-415946{{"Анализ TCP-трафика с помощью функции «Следовать за TCP-потоком» в Wireshark"}} wireshark/export_packets -.-> lab-415946{{"Анализ TCP-трафика с помощью функции «Следовать за TCP-потоком» в Wireshark"}} wireshark/packet_analysis -.-> lab-415946{{"Анализ TCP-трафика с помощью функции «Следовать за TCP-потоком» в Wireshark"}} end

Понимание TCP и захват сетевого трафика

В этом шаге мы начнем с изучения TCP (Transmission Control Protocol – протокол управления передачей), фундаментальной части сетевой коммуникации. Затем мы будем использовать мощный инструмент под названием Wireshark для захвата сетевого трафика. Понимание TCP и возможность захвата сетевого трафика являются важными навыками в области кибербезопасности, поскольку они позволяют вам видеть, что происходит в сети, и анализировать это на предмет потенциальных проблем.

Что такое TCP?

TCP, или Transmission Control Protocol (протокол управления передачей), является одним из важнейших протоколов в наборе протоколов Интернета (Internet Protocol suite). Internet Protocol suite – это набор правил, которые регулируют передачу данных через Интернет. TCP обеспечивает надежный способ отправки данных между приложениями, работающими на разных хостах, которые общаются через IP-сеть.

Надежность означает, что TCP гарантирует, что все пакеты данных, отправленные из одного приложения в другое, прибудут правильно и в правильном порядке. Это отличается от UDP (User Datagram Protocol – протокол пользовательских датаграмм), который является протоколом без установления соединения. UDP не устанавливает соединение перед отправкой данных и не гарантирует, что все пакеты прибудут или что они прибудут в порядке отправки. TCP, с другой стороны, является протоколом, ориентированным на соединение (connection-oriented). Он сначала устанавливает соединение между отправителем и получателем, а затем отправляет данные. Этот процесс помогает поддерживать целостность передаваемых данных.

Запуск Wireshark

Чтобы начать захват сетевого трафика, нам нужно запустить Wireshark. Вот как это можно сделать:

  1. Сначала откройте окно терминала. Это можно сделать, щелкнув значок терминала на панели задач или нажав Ctrl+Alt+T. Терминал – это текстовый интерфейс, который позволяет взаимодействовать с операционной системой вашего компьютера, вводя команды.

  2. После открытия терминала вам нужно ввести команду для запуска Wireshark. Введите следующую команду и нажмите Enter:

wireshark

Эта команда сообщает операционной системе о необходимости запуска приложения Wireshark.

  1. Когда Wireshark откроется, вы увидите основной интерфейс. В этом интерфейсе вы увидите список доступных сетевых интерфейсов. Сетевые интерфейсы – это точки соединения между вашим компьютером и сетью. Каждый интерфейс можно использовать для отправки и получения сетевого трафика.
Wireshark main interface

Захват сетевого трафика

Теперь, когда Wireshark открыт, мы готовы начать захват сетевого трафика. Вот шаги:

  1. В списке сетевых интерфейсов щелкните интерфейс eth1. Обычно это основной сетевой интерфейс для вашей виртуальной машины (virtual machine). Виртуальная машина – это как компьютер внутри вашего компьютера, и интерфейс eth1 – это то, как он подключается к сети.

  2. После выбора интерфейса eth1 нажмите кнопку Start capturing packets (Начать захват пакетов), которая представлена значком синего акульего плавника на панели инструментов. Это действие сообщает Wireshark о необходимости начать мониторинг выбранного сетевого интерфейса и захватывать все сетевые пакеты, проходящие через него.

Start capturing packets
  1. Когда Wireshark начнет захват, вы увидите пакеты, появляющиеся в главном окне Wireshark. Эти пакеты являются строительными блоками сетевого трафика. Каждый пакет содержит небольшой объем данных и некоторую информацию о том, откуда он идет и куда направляется.

  2. Чтобы сгенерировать некоторый TCP-трафик, который мы можем проанализировать, мы будем использовать команду curl. Откройте новое окно терминала и введите следующую команду:

curl https://labex.io

Команда curl используется для передачи данных с сервера или на сервер. В этом случае она извлекает содержимое веб-страницы с https://labex.io. Это действие сгенерирует TCP-трафик, потому что HTTP-запрос к веб-странице использует протокол TCP.

  1. После выполнения команды curl вы увидите содержимое веб-страницы, отображаемое в терминале. В то же время Wireshark захватит все TCP-пакеты, связанные с этим HTTP-запросом. Эти пакеты содержат информацию о запросе и ответе между вашим компьютером и веб-сервером.

  2. После захвата в течение примерно 10-15 секунд, чего обычно достаточно, чтобы получить хороший образец трафика, вернитесь в Wireshark и нажмите кнопку Stop capturing packets (Остановить захват пакетов), представленную значком красного квадрата на панели инструментов. Это остановит захват Wireshark любых дополнительных пакетов.

Stop capturing packets
  1. Чтобы сохранить захваченный трафик для будущего анализа, перейдите в меню File (Файл) и выберите Save (Сохранить) или нажмите Ctrl+S. Перейдите в каталог /home/labex/project/, дайте своему файлу имя capture.pcapng и нажмите Save (Сохранить). Формат файла .pcapng является стандартным форматом для хранения захваченных сетевых пакетов, и он позволяет открывать и анализировать захваченный трафик позже.

Теперь вы успешно захватили некоторый сетевой трафик, который содержит TCP-соединения (TCP conversations). В следующих шагах мы проанализируем этот захваченный трафик, чтобы узнать больше о TCP.

Фильтрация и отслеживание TCP-потоков

В этом шаге мы проанализируем трафик labex.io, который мы захватили на предыдущем шаге. Мы узнаем, как фильтровать сетевой трафик, чтобы изолировать определенные TCP-соединения (TCP conversations), и изучим мощную функцию Wireshark "Follow TCP Stream" (Отслеживание TCP-потока). Эта функция действует как увеличительное стекло для сетевых коммуникаций, позволяя вам видеть весь разговор между двумя конечными точками (endpoints).

Фильтрация TCP-трафика

Сначала отфильтруем трафик, чтобы сосредоточиться конкретно на нашей коммуникации с labex.io:

  1. В главном окне Wireshark посмотрите в верхнюю часть списка пакетов. Вы увидите текстовое поле фильтра отображения (display filter) с текстом-заполнителем "Apply a display filter" (Применить фильтр отображения).
  2. Введите tcp в поле фильтра и нажмите Enter или нажмите кнопку со стрелкой, чтобы применить фильтр.
  3. Теперь в списке пакетов отображаются только TCP-пакеты, но мы можем сузить его еще больше. Поскольку нас интересует трафик labex.io, который мы сгенерировали с помощью нашей команды curl, давайте уточним наш фильтр.
  4. Введите tcp contains "labex" в поле фильтра и примените его. Это покажет только TCP-пакеты, которые содержат "labex" в своем содержимом, помогая нам найти соответствующий трафик.
Apply TCP filter

Понимание TCP-соединений

Прежде чем мы начнем отслеживать TCP-потоки, важно понять, что такое TCP-соединение (TCP conversation). TCP-соединение состоит из всех пакетов, которыми обмениваются две конечные точки (комбинации IP-адресов и портов) во время TCP-сессии (TCP session). Каждое TCP-соединение имеет несколько ключевых компонентов:

  • IP-адрес источника и назначения: В нашем случае IP-адрес вашей машины и IP-адрес сервера labex.io
  • Порт источника и назначения: Для нашего HTTPS-соединения с labex.io порт назначения, вероятно, 443
  • Номера последовательности и подтверждения (sequence and acknowledgment numbers): Они отслеживают данные и обеспечивают правильную доставку
  • Различные флаги (SYN, ACK, FIN и т. д.): Они контролируют состояние соединения

В нашем захвате мы должны увидеть TCP-соединение между вашей машиной и сервером labex.io.

Отслеживание TCP-потока

Теперь давайте проанализируем TCP-поток для нашего запроса labex.io:

  1. В отфильтрованном списке пакетов найдите пакеты с IP-адресом назначения, который, вероятно, принадлежит labex.io. Вы должны увидеть пакеты с портом назначения 443 (HTTPS), который используется для безопасного веб-трафика.
  2. Щелкните один из этих пакетов, чтобы выбрать его.
  3. Щелкните правой кнопкой мыши выбранный пакет и выберите Follow (Отслеживать) > TCP Stream (TCP-поток) в контекстном меню.
Follow TCP Stream menu
  1. Откроется новое окно, показывающее весь TCP-разговор (TCP conversation) между вашей машиной и сервером labex.io.
TCP Stream content window
  1. В этом окне:

    • Текст красного цвета представляет данные, отправленные с вашей машины (клиента) на сервер labex.io
    • Текст синего цвета представляет данные, отправленные с сервера labex.io обратно на вашу машину
    • Весь разговор реконструирован в том порядке, в котором он произошел
  2. Поскольку мы получили доступ к labex.io через HTTPS, вы в основном увидите зашифрованные данные в потоке. Это нормально и ожидаемо, потому что HTTPS шифрует данные для защиты во время передачи. Вы можете идентифицировать TLS handshake (TLS-рукопожатие) в начале связи, но фактический HTTP-запрос и ответ будут зашифрованы.

  3. Изучите различные параметры просмотра, используя раскрывающееся меню "Show and save data as" (Показать и сохранить данные как):

    • ASCII: Показывает данные в виде текста (полезно для чтения любых незашифрованных частей)
    • Hex Dump: Показывает шестнадцатеричное и ASCII-представления (хорошо подходит для изучения зашифрованных данных)
    • C Arrays: Форматирует данные как массивы языка программирования C
    • Raw: Показывает только необработанные двоичные данные (raw binary data)
  4. Чтобы сохранить запись этого анализа, нажмите кнопку Print (Печать). Сохраните вывод печати как PDF-файл с именем print.pdf в каталоге /home/labex/project/.

Print button

Следуя TCP-потоку, вы можете увидеть всю коммуникацию между вашей машиной и сервером labex.io, не собирая вручную данные из отдельных пакетов. На следующем шаге мы узнаем, как сохранить и проанализировать эти данные более подробно.

Сохранение и анализ данных TCP-потока

В этом шаге мы сохраним данные TCP-потока labex.io, которые мы изучили на предыдущем шаге, для автономного анализа (offline analysis). Мы также узнаем, как интерпретировать эту сохраненную информацию, чтобы извлечь ценные сведения из зашифрованной HTTPS-коммуникации.

Сохранение данных TCP-потока

Давайте сохраним данные TCP-потока из нашего соединения с labex.io:

  1. У вас все еще должно быть открыто окно TCP Stream (TCP-поток) с предыдущего шага, показывающее связь между вашей машиной и labex.io. Если вы случайно закрыли его, просто повторите шаги, чтобы отследить TCP-поток одного из пакетов labex.io.

  2. В нижней части окна TCP Stream (TCP-поток) найдите кнопку Save As (Сохранить как).

Save As button location
  1. Нажмите кнопку Save As (Сохранить как), чтобы открыть диалоговое окно сохранения.

  2. Перейдите в каталог /home/labex/project/ и введите имя файла tcp_stream_data.txt.

  3. Нажмите кнопку Save (Сохранить). Это сохранит весь TCP-поток labex.io в текстовый файл с указанным именем.

  4. Содержимое будет сохранено в формате, выбранном в раскрывающемся меню "Show and save data as" (Показать и сохранить данные как). Если вы хотите сохранить его в другом формате (например, Hex Dump вместо ASCII), вы можете изменить формат в раскрывающемся меню перед сохранением.

Понимание сохраненных данных

Теперь, когда мы сохранили TCP-поток из нашего соединения с labex.io, давайте изучим его содержимое:

  1. Откройте терминал, чтобы просмотреть сохраненный файл:
head /home/labex/project/tcp_stream_data.txt

Или вы можете использовать cat для просмотра всего файла:

cat /home/labex/project/tcp_stream_data.txt
  1. Изучите содержимое файла. Поскольку наш трафик на labex.io проходил через HTTPS, большая часть данных будет зашифрована и будет отображаться как нечитаемые символы. Однако вы все еще можете наблюдать несколько важных элементов:

    • TLS handshake (TLS-рукопожатие) в начале связи, где ваш клиент и сервер labex.io согласовывают параметры шифрования
    • Сообщения Client hello и Server hello, которые являются частью TLS handshake (TLS-рукопожатия)
    • Зашифрованные данные приложения (encrypted application data), которые содержат ваш фактический HTTP-запрос и ответ сервера
  2. Обратите внимание на то, как данные организованы так же, как они отображались в окне TCP Stream (TCP-поток), с данными клиента (с вашей машины на labex.io), отделенными от данных сервера (с labex.io на вашу машину).

Практическое применение анализа TCP-потока

Навыки анализа TCP-потока, которые вы развиваете, ценны во многих сценариях кибербезопасности. Давайте соотнесем их с тем, что мы наблюдали с нашим трафиком labex.io:

  1. TLS/SSL Inspection (Инспектирование TLS/SSL): Анализируя TLS handshake (TLS-рукопожатие) в потоке labex.io, специалисты по безопасности могут проверить, что безопасные соединения используют надежные алгоритмы шифрования.
  2. Security Monitoring (Мониторинг безопасности): Даже с зашифрованным HTTPS-трафиком, таким как наше соединение с labex.io, аналитики могут идентифицировать шаблоны связи, не обязательно расшифровывая содержимое.
  3. Network Troubleshooting (Устранение неполадок в сети): Если бы наше соединение с labex.io не удалось, анализ TCP-потока мог бы помочь определить, возникла ли проблема во время установления TCP-соединения, TLS handshake (TLS-рукопожатия) или HTTP-обмена.
  4. Network Forensics (Сетевая криминалистика): В сценарии расследования TCP-потоки, такие как наше соединение с labex.io, помогут восстановить временную шкалу сетевых действий.
  5. Performance Analysis (Анализ производительности): Изучая время и последовательность пакетов в TCP-потоке labex.io, вы можете выявить потенциальные узкие места в сети.

Сохраняя TCP-потоки, как мы это сделали с нашим соединением с labex.io, вы создаете постоянную запись, которая может быть:

  • Передана членам команды для совместного анализа
  • Использована в качестве доказательства в расследованиях безопасности
  • Сравнена с другими захваченными потоками для выявления закономерностей
  • Проанализирована с помощью дополнительных инструментов, помимо Wireshark

Эта способность извлекать, сохранять и анализировать фактические данные сетевой коммуникации делает анализ TCP-потока таким мощным методом для специалистов по сетевой безопасности.

Продвинутые методы анализа TCP-потока

В этом заключительном шаге мы рассмотрим некоторые продвинутые методы анализа TCP-потоков в нашем захвате, сосредоточив внимание на нашем трафике labex.io и любых других TCP-соединениях (TCP conversations), которые могут присутствовать. Эти продвинутые навыки помогут вам стать более эффективными при работе со сложными захватами сетевого трафика.

Фильтрация нескольких TCP-потоков

Давайте научимся исследовать и фильтровать все TCP-соединения (TCP conversations) в нашем захвате, а не только трафик labex.io:

  1. Вернитесь в главное окно Wireshark. Если окно TCP Stream (TCP-поток) из нашего анализа labex.io все еще открыто, закройте его.
  2. Чтобы просмотреть все TCP-соединения (TCP conversations) в вашем захвате, перейдите в Statistics (Статистика) > Conversations (Соединения) в верхнем меню.
  3. В окне Conversations (Соединения) щелкните вкладку TCP, чтобы отфильтровать представление и показать только TCP-соединения.
Conversations window
  1. В этом представлении отображаются сведения обо всех TCP-соединениях (TCP conversations) в вашем захвате, в том числе:

    • Адреса и порты источника и назначения
    • Байты, переданные в каждом направлении
    • Продолжительность каждого соединения
    • Пакеты в каждом направлении
  2. Найдите соединение, соответствующее нашему соединению с labex.io. Оно должно включать те же IP-адреса, которые вы наблюдали на шаге 2. Вы также можете увидеть другие TCP-соединения, которые происходили во время вашего периода захвата.

  3. Выберите соединение labex.io и нажмите кнопку Follow Stream (Отслеживать поток) внизу. Это предоставляет еще один способ доступа к тому же TCP-потоку, который мы анализировали ранее.

Использование номеров TCP-потока

Каждый TCP-поток в вашем захвате имеет уникальный идентификатор, называемый номером "tcp.stream". Это обеспечивает точный способ фильтрации и анализа определенных потоков:

  1. Открыв главное окно Wireshark, посмотрите на сведения о пакете одного из пакетов labex.io, которые вы определили ранее. Разверните раздел "Transmission Control Protocol" (Протокол управления передачей) в средней панели и найдите поле с именем "Stream index" (Индекс потока) или аналогичное. Это число является уникальным идентификатором для TCP-потока labex.io.

  2. Чтобы отфильтровать пакеты, принадлежащие этому конкретному потоку, используйте фильтр отображения (display filter) следующим образом:

tcp.stream eq N

Замените N номером индекса потока, который вы нашли. Например, если поток labex.io имеет индекс 2, вы бы использовали:

tcp.stream eq 2
  1. Примените этот фильтр в поле фильтра отображения (display filter). Теперь Wireshark будет показывать только пакеты, принадлежащие TCP-потоку labex.io, обеспечивая более четкое представление только этого соединения.

  2. Этот фильтр особенно полезен, когда в вашем захвате много TCP-соединений (TCP conversations) и вы хотите сосредоточиться на конкретном, не находя и не щелкая правой кнопкой мыши пакет каждый раз.

Filtered packets

Освоив эти продвинутые методы анализа TCP-потока, вы значительно расширили свои возможности анализа сетевого трафика. Теперь вы можете эффективно изолировать, изучать и документировать TCP-соединения (TCP conversations) в сложных захватах сети, навык, который неоценим для специалистов по кибербезопасности.

Итог

В этой лабораторной работе вы научились использовать функцию Wireshark "Follow TCP Stream" (Отслеживать TCP-поток) для углубленного анализа сетевого трафика. Вы получили практический опыт в захвате сетевого трафика, фильтрации TCP-соединений (TCP conversations), интерпретации данных в различных форматах, сохранении данных потока для автономного использования и применении продвинутых методов анализа.

Эти навыки необходимы сетевым администраторам, аналитикам безопасности и ИТ-специалистам. Они позволяют вам устранять неполадки в сети, расследовать инциденты безопасности и понимать поведение приложений. По мере продвижения помните, что Wireshark имеет гораздо больше функций, и анализ TCP Stream (TCP-потока) - это всего лишь один ценный инструмент в вашем арсенале кибербезопасности.