В этой лабораторной работе вы узнаете, как использовать функцию "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. Вот как это можно сделать:
Сначала откройте окно терминала. Это можно сделать, щелкнув значок терминала на панели задач или нажав 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: Форматирует данные как массивы языка программирования C
Raw: Показывает только необработанные двоичные данные (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-запрос и ответ сервера
Обратите внимание на то, как данные организованы так же, как они отображались в окне 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-потока) - это всего лишь один ценный инструмент в вашем арсенале кибербезопасности.