Введение
В этой лабораторной работе вы узнаете, как использовать функцию "Follow TCP Stream" (Отслеживание TCP-потока) в Wireshark для анализа TCP-трафика. Эта функция позволяет извлекать и просматривать данные (payload) определенного TCP-соединения (TCP conversation). Она очень полезна во многих сценариях кибербезопасности, таких как расследование подозрительного сетевого трафика и анализ протоколов приложений.
К концу этой лабораторной работы вы поймете, как использовать этот мощный инструмент для получения информации о сетевых коммуникациях. Это значительно расширит ваши возможности анализа сети.
Понимание 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. Вот как это можно сделать:
Сначала откройте окно терминала. Это можно сделать, щелкнув значок терминала на панели задач или нажав
Ctrl+Alt+T. Терминал – это текстовый интерфейс, который позволяет взаимодействовать с операционной системой вашего компьютера, вводя команды.После открытия терминала вам нужно ввести команду для запуска Wireshark. Введите следующую команду и нажмите Enter:
wireshark
Эта команда сообщает операционной системе о необходимости запуска приложения Wireshark.
- Когда Wireshark откроется, вы увидите основной интерфейс. В этом интерфейсе вы увидите список доступных сетевых интерфейсов. Сетевые интерфейсы – это точки соединения между вашим компьютером и сетью. Каждый интерфейс можно использовать для отправки и получения сетевого трафика.

Захват сетевого трафика
Теперь, когда Wireshark открыт, мы готовы начать захват сетевого трафика. Вот шаги:
В списке сетевых интерфейсов щелкните интерфейс
eth1. Обычно это основной сетевой интерфейс для вашей виртуальной машины (virtual machine). Виртуальная машина – это как компьютер внутри вашего компьютера, и интерфейсeth1– это то, как он подключается к сети.После выбора интерфейса
eth1нажмите кнопкуStart capturing packets(Начать захват пакетов), которая представлена значком синего акульего плавника на панели инструментов. Это действие сообщает Wireshark о необходимости начать мониторинг выбранного сетевого интерфейса и захватывать все сетевые пакеты, проходящие через него.

Когда Wireshark начнет захват, вы увидите пакеты, появляющиеся в главном окне Wireshark. Эти пакеты являются строительными блоками сетевого трафика. Каждый пакет содержит небольшой объем данных и некоторую информацию о том, откуда он идет и куда направляется.
Чтобы сгенерировать некоторый TCP-трафик, который мы можем проанализировать, мы будем использовать команду
curl. Откройте новое окно терминала и введите следующую команду:
curl https://labex.io
Команда curl используется для передачи данных с сервера или на сервер. В этом случае она извлекает содержимое веб-страницы с https://labex.io. Это действие сгенерирует TCP-трафик, потому что HTTP-запрос к веб-странице использует протокол TCP.
После выполнения команды
curlвы увидите содержимое веб-страницы, отображаемое в терминале. В то же время Wireshark захватит все TCP-пакеты, связанные с этим HTTP-запросом. Эти пакеты содержат информацию о запросе и ответе между вашим компьютером и веб-сервером.После захвата в течение примерно 10-15 секунд, чего обычно достаточно, чтобы получить хороший образец трафика, вернитесь в Wireshark и нажмите кнопку
Stop capturing packets(Остановить захват пакетов), представленную значком красного квадрата на панели инструментов. Это остановит захват Wireshark любых дополнительных пакетов.

- Чтобы сохранить захваченный трафик для будущего анализа, перейдите в меню
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:
- В главном окне Wireshark посмотрите в верхнюю часть списка пакетов. Вы увидите текстовое поле фильтра отображения (display filter) с текстом-заполнителем "Apply a display filter" (Применить фильтр отображения).
- Введите
tcpв поле фильтра и нажмите Enter или нажмите кнопку со стрелкой, чтобы применить фильтр. - Теперь в списке пакетов отображаются только TCP-пакеты, но мы можем сузить его еще больше. Поскольку нас интересует трафик labex.io, который мы сгенерировали с помощью нашей команды curl, давайте уточним наш фильтр.
- Введите
tcp contains "labex"в поле фильтра и примените его. Это покажет только TCP-пакеты, которые содержат "labex" в своем содержимом, помогая нам найти соответствующий трафик.

Понимание 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:
- В отфильтрованном списке пакетов найдите пакеты с IP-адресом назначения, который, вероятно, принадлежит
labex.io. Вы должны увидеть пакеты с портом назначения443(HTTPS), который используется для безопасного веб-трафика. - Щелкните один из этих пакетов, чтобы выбрать его.
- Щелкните правой кнопкой мыши выбранный пакет и выберите
Follow(Отслеживать) >TCP Stream(TCP-поток) в контекстном меню.

- Откроется новое окно, показывающее весь TCP-разговор (TCP conversation) между вашей машиной и сервером
labex.io.

В этом окне:
- Текст красного цвета представляет данные, отправленные с вашей машины (клиента) на сервер labex.io
- Текст синего цвета представляет данные, отправленные с сервера labex.io обратно на вашу машину
- Весь разговор реконструирован в том порядке, в котором он произошел
Поскольку мы получили доступ к labex.io через HTTPS, вы в основном увидите зашифрованные данные в потоке. Это нормально и ожидаемо, потому что HTTPS шифрует данные для защиты во время передачи. Вы можете идентифицировать TLS handshake (TLS-рукопожатие) в начале связи, но фактический HTTP-запрос и ответ будут зашифрованы.
Изучите различные параметры просмотра, используя раскрывающееся меню "Show and save data as" (Показать и сохранить данные как):
ASCII: Показывает данные в виде текста (полезно для чтения любых незашифрованных частей)Hex Dump: Показывает шестнадцатеричное и ASCII-представления (хорошо подходит для изучения зашифрованных данных)C Arrays: Форматирует данные как массивы языка программирования CRaw: Показывает только необработанные двоичные данные (raw binary data)
Чтобы сохранить запись этого анализа, нажмите кнопку
Print(Печать). Сохраните вывод печати как PDF-файл с именемprint.pdfв каталоге/home/labex/project/.

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

Нажмите кнопку
Save As(Сохранить как), чтобы открыть диалоговое окно сохранения.Перейдите в каталог
/home/labex/project/и введите имя файлаtcp_stream_data.txt.Нажмите кнопку
Save(Сохранить). Это сохранит весь TCP-поток labex.io в текстовый файл с указанным именем.Содержимое будет сохранено в формате, выбранном в раскрывающемся меню "Show and save data as" (Показать и сохранить данные как). Если вы хотите сохранить его в другом формате (например, Hex Dump вместо ASCII), вы можете изменить формат в раскрывающемся меню перед сохранением.
Понимание сохраненных данных
Теперь, когда мы сохранили TCP-поток из нашего соединения с labex.io, давайте изучим его содержимое:
- Откройте терминал, чтобы просмотреть сохраненный файл:
head /home/labex/project/tcp_stream_data.txt
Или вы можете использовать cat для просмотра всего файла:
cat /home/labex/project/tcp_stream_data.txt
Изучите содержимое файла. Поскольку наш трафик на labex.io проходил через HTTPS, большая часть данных будет зашифрована и будет отображаться как нечитаемые символы. Однако вы все еще можете наблюдать несколько важных элементов:
- TLS handshake (TLS-рукопожатие) в начале связи, где ваш клиент и сервер
labex.ioсогласовывают параметры шифрования - Сообщения Client hello и Server hello, которые являются частью TLS handshake (TLS-рукопожатия)
- Зашифрованные данные приложения (encrypted application data), которые содержат ваш фактический HTTP-запрос и ответ сервера
- TLS handshake (TLS-рукопожатие) в начале связи, где ваш клиент и сервер
Обратите внимание на то, как данные организованы так же, как они отображались в окне TCP Stream (TCP-поток), с данными клиента (с вашей машины на labex.io), отделенными от данных сервера (с labex.io на вашу машину).
Практическое применение анализа TCP-потока
Навыки анализа TCP-потока, которые вы развиваете, ценны во многих сценариях кибербезопасности. Давайте соотнесем их с тем, что мы наблюдали с нашим трафиком labex.io:
- TLS/SSL Inspection (Инспектирование TLS/SSL): Анализируя TLS handshake (TLS-рукопожатие) в потоке labex.io, специалисты по безопасности могут проверить, что безопасные соединения используют надежные алгоритмы шифрования.
- Security Monitoring (Мониторинг безопасности): Даже с зашифрованным HTTPS-трафиком, таким как наше соединение с labex.io, аналитики могут идентифицировать шаблоны связи, не обязательно расшифровывая содержимое.
- Network Troubleshooting (Устранение неполадок в сети): Если бы наше соединение с labex.io не удалось, анализ TCP-потока мог бы помочь определить, возникла ли проблема во время установления TCP-соединения, TLS handshake (TLS-рукопожатия) или HTTP-обмена.
- Network Forensics (Сетевая криминалистика): В сценарии расследования TCP-потоки, такие как наше соединение с labex.io, помогут восстановить временную шкалу сетевых действий.
- Performance Analysis (Анализ производительности): Изучая время и последовательность пакетов в TCP-потоке labex.io, вы можете выявить потенциальные узкие места в сети.
Сохраняя TCP-потоки, как мы это сделали с нашим соединением с labex.io, вы создаете постоянную запись, которая может быть:
- Передана членам команды для совместного анализа
- Использована в качестве доказательства в расследованиях безопасности
- Сравнена с другими захваченными потоками для выявления закономерностей
- Проанализирована с помощью дополнительных инструментов, помимо Wireshark
Эта способность извлекать, сохранять и анализировать фактические данные сетевой коммуникации делает анализ TCP-потока таким мощным методом для специалистов по сетевой безопасности.
Продвинутые методы анализа TCP-потоков
В этом заключительном шаге мы рассмотрим некоторые продвинутые методы анализа TCP-потоков в нашем захвате, сосредоточив внимание на нашем трафике labex.io и любых других TCP-соединениях (TCP conversations), которые могут присутствовать. Эти продвинутые навыки помогут вам стать более эффективными при работе со сложными захватами сетевого трафика.
Фильтрация нескольких TCP-потоков
Давайте научимся исследовать и фильтровать все TCP-соединения (TCP conversations) в нашем захвате, а не только трафик labex.io:
- Вернитесь в главное окно Wireshark. Если окно TCP Stream (TCP-поток) из нашего анализа labex.io все еще открыто, закройте его.
- Чтобы просмотреть все TCP-соединения (TCP conversations) в вашем захвате, перейдите в
Statistics(Статистика) >Conversations(Соединения) в верхнем меню. - В окне Conversations (Соединения) щелкните вкладку
TCP, чтобы отфильтровать представление и показать только TCP-соединения.

В этом представлении отображаются сведения обо всех TCP-соединениях (TCP conversations) в вашем захвате, в том числе:
- Адреса и порты источника и назначения
- Байты, переданные в каждом направлении
- Продолжительность каждого соединения
- Пакеты в каждом направлении
Найдите соединение, соответствующее нашему соединению с labex.io. Оно должно включать те же IP-адреса, которые вы наблюдали на шаге 2. Вы также можете увидеть другие TCP-соединения, которые происходили во время вашего периода захвата.
Выберите соединение labex.io и нажмите кнопку
Follow Stream(Отслеживать поток) внизу. Это предоставляет еще один способ доступа к тому же TCP-потоку, который мы анализировали ранее.
Использование номеров TCP-потока
Каждый TCP-поток в вашем захвате имеет уникальный идентификатор, называемый номером "tcp.stream". Это обеспечивает точный способ фильтрации и анализа определенных потоков:
Открыв главное окно Wireshark, посмотрите на сведения о пакете одного из пакетов labex.io, которые вы определили ранее. Разверните раздел "Transmission Control Protocol" (Протокол управления передачей) в средней панели и найдите поле с именем "Stream index" (Индекс потока) или аналогичное. Это число является уникальным идентификатором для TCP-потока labex.io.
Чтобы отфильтровать пакеты, принадлежащие этому конкретному потоку, используйте фильтр отображения (display filter) следующим образом:
tcp.stream eq N
Замените N номером индекса потока, который вы нашли. Например, если поток labex.io имеет индекс 2, вы бы использовали:
tcp.stream eq 2
Примените этот фильтр в поле фильтра отображения (display filter). Теперь Wireshark будет показывать только пакеты, принадлежащие TCP-потоку labex.io, обеспечивая более четкое представление только этого соединения.
Этот фильтр особенно полезен, когда в вашем захвате много TCP-соединений (TCP conversations) и вы хотите сосредоточиться на конкретном, не находя и не щелкая правой кнопкой мыши пакет каждый раз.

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


