Анализ сетевого трафика для сайта  https://example.com/

Введение

Привет, друзья! Мы с вами отправляемся в интересное путешествие по миру сетевого анализа. К слову, я вообще моряк, но решил сменить курс и попробовать себя в IT. Прочитав пару книг о тестировании и освоив несколько видеокурсов, я понял, что пора закрепить свои навыки на практике. В этом материале мы вместе разберёмся, как использовать снифферы для анализа сетевого трафика. Это поможет начинающим специалистам, желающим освоить эту важную область.

В качестве нашего проводника я обратился к чату GPT, который предоставил следующее тестовое задание:

ЧАТ GPT:

Для проверки базовых знаний работы с снифферами у junior QA специалиста можно предложить следующее тестовое задание: Тестовое задание: Анализ HTTP-запросов

Цель: Проверить умение использовать снифферы для анализа сетевого трафика и понимание структуры HTTP-запросов и ответов.

Само Задание:

  1. Установить и настроить сниффер (Wireshark, Fiddler или Charles Proxy).

  2. Перехватить HTTP/HTTPS-трафик сайта (например, https://example.com).

  3. Провести анализ HTTP-запросов и ответов, изучить заголовки и тело ответа.

  4. Задокументировать результаты с примерами запросов и ответов.

Итак, погнали!

В статье я представил пошаговый процесс захвата, фильтрации и анализа трафика, а также результаты, которые я получил в ходе работы

Установка программы Wireshark

Для анализа сетевого трафика мы будем использовать программу Wireshark. Вот шаги по её установке:

  1. Переходим на официальный сайт Wireshark.

  2. Выбираем версию программы, соответствующую вашей операционной системе (Windows, macOS, Linux). (В моём примере это Windows.)

  3. Загружаем установочный файл и выполняем установку, следуя инструкциям мастера установки.

  4. После завершения установки запускаем Wireshark с правами администратора (это необходимо для работы с сетевыми интерфейсами).

Захват трафика

Теперь переходим к основному процессу — перехвату трафика.

1.     Открываем Wireshark.

2.     Выбираем сетевой интерфейс, используемый для подключения (в моём случае это беспроводная сеть Wi-Fi).  

2.     Кликаем на выбранный сетевой интерфейс дважды, чтобы начался захват трафика.

3.     Открываем браузер и переходим на сайт example.com (или другой на ваш выбор). Выполняем несколько действий, например, загружаем главную страницу.

4.     После загрузки страницы возвращаемся в Wireshark и нажимаем "Stop Capture" (красный квадрат), чтобы завершить захват.

5.     Для удобства анализа сохраняем захваченные данные в файл формата .pcap (Файл → Сохранить).

Поиск пакетов с использованием доменного имени

Чтобы найти пакеты, связанные с доменом example.com, выполняем следующие шаги:

  1. В поле фильтра Wireshark вводим: dns.qry.name contains "example.com".

  2. Применяем фильтр, чтобы увидеть DNS-запросы и ответы, связанные с этим доменом.

Анализ DNS-запросов и ответов

Запрос на example.com

На первом скриншоте представлена таблица с двумя DNS‑запросами. Ключевые детали: ( свои айпи я конечно же замажу ? )

  1. Запрос (Frame 8518):

Пакет № 8518 (Запрос DNS)

Ключевая информация:

  • Источник: XXX.XXX.X.XXX

  • Назначение: YYY.YYY.Y.Y

  • Протокол: DNS

  • Тип запроса: Standard query

  • Имя запрашиваемого домена: example.com

На данном этапе клиент (устройство с IP‑адресом XXX.XXX.X.XXX) отправляет запрос на DNS‑сервер (YYY.YYY.Y.Y) с целью разрешить доменное имя example.com в IP‑адрес.

Ответ DNS

На втором скриншоте представлен ответ на предыдущий запрос. Основная информация:

  • Источник: Локальный DNS‑сервер (YYY.YYY.Y.Y).

  • Получатель: IP‑адрес устройства пользователя (XXX.XXX.X.XXX).

  • Протокол: UDP, порт 53.

  • Данные ответа:

    • Адрес IPv4: 93.184.216.34 — это IP‑адрес, соответствующий доменному имени example.com.

    • Также указаны серверы NS (name servers), такие как a.iana‑servers.net и b.iana‑servers.net, используемые для разрешения доменных имён.

А это что за покемон?


Если бы мы знали что это такое, но мы не знаем что это такое. На самом деле знаем

1. Что такое HEX‑данные?

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


2. Структура Ethernet‑фрейма

Сетевые пакеты в Wireshark обычно отображаются в виде HEX‑дампов, которые представляют:

  • Заголовки протоколов (Ethernet, IP, UDP/TCP, DNS и т. д.).

  • Полезную нагрузку (данные).

На скриншотах показан сетевой пакет, который содержит данные протокола DNS. В заголовках пакета указаны IP‑адреса источника и назначения.

2. Преобразование HEX в текст

Для преобразования HEX в текст используются стандартные таблицы символов, такие как ASCII или UTF-8. В контексте сетевых протоколов чаще всего применяется ASCII.

Таблица ASCII

Каждому числовому значению (0–255) соответствует символ. Например:

  • 68 (HEX) = 104 (DEC) = h (в ASCII).

  • 74 (HEX) = 116 (DEC) = t (в ASCII).


Способы фильтрации траффика

В этой статье мы рассмотрели только способ фильтрации траффика по доменному имени. Но фильтровать можно и другими способами. Например:

1. Фильтрация по протоколу

Вы можете отфильтровать пакеты на основе протоколов:

  • DNS — dns (все DNS‑пакеты).

  • HTTP — http (пакеты HTTP).

  • TCP — tcp (все TCP‑пакеты).

  • UDP — udp (все UDP‑пакеты).

  • ICMP — icmp (например, пинг‑запросы).

Пример:

http or tcp


2. Фильтрация по IP‑адресу

Для фильтрации пакетов по определённому источнику или получателю:

  • Источник (Source): ip.src == ваш ip

  • Получатель (Destination): ip.dst == ip получателя

  • Любой адрес: ip.addr == xxx.xxx.x.x

Пример:

ip.src == ваш ip and tcp


3. Фильтрация по диапазону IP‑адресов

Используйте маску подсети:

  • ip.src == ХХХ.ХХХ.Х.Х/ХХ ( пример )

  • ip.dst == 10.0.0.0/8

Пример:

ip.addr == ХХХ.ХХХ.Х.Х/ХХ


4. Фильтрация по порту

Для анализа данных, относящихся к определённому порту:

  • TCP порт: tcp.port == 92

  • UDP порт: udp.port == 47

Пример:

tcp.port == 654


5. Фильтрация по содержимому (Payload)

Если вы ищете определённое содержимое в пакетах:

  • Используйте содержимое протоколов: например, HTTP‑запросы с определённым текстом.

  • Пример для HTTP:

    http contains “example”


6. Фильтрация по MAC‑адресу

Для поиска пакетов, относящихся к определённым устройствам:

  • Источник: eth.src == 00:11:22:33:44:55

  • Получатель: eth.dst == aa:bb:cc:dd:ee:ff

Пример:

eth.addr == 00:11:22:33:44:55


7. Фильтрация по длине пакета

  • Пакеты меньше определённого размера: frame.len < 100

  • Пакеты больше определённого размера: frame.len > 1500

Пример:

frame.len >= 100 and frame.len <= 500


8. Фильтрация по времени

Вы можете использовать временные метки для фильтрации:

  • Временной диапазон: frame.time >= «2024–12–09 22:00:00» and frame.time <= «2024–12–09 23:00:00»


9. Фильтрация по флагам TCP

Фильтрация пакетов с определёнными флагами в TCP‑заголовке:

  • SYN‑пакеты: tcp.flags.syn == 1

  • ACK‑пакеты: tcp.flags.ack == 1

  • RESET‑пакеты: tcp.flags.reset == 1

Пример:

tcp.flags.syn == 1 and tcp.flags.ack == 0


10. Фильтрация по ошибкам

Для поиска проблемных пакетов:

  • Ошибки в TCP: tcp.analysis.flags

  • Повторная передача (retransmission): tcp.analysis.retransmission

  • Дубликаты ACK: tcp.analysis.duplicate_ack


11. Фильтрация по имени устройства

Если устройство имеет зарегистрированное имя:

  • wlan.sa == “my_device”


12. Фильтрация по комбинации условий

Вы можете комбинировать фильтры с помощью логических операторов:

  • AND: and

  • OR: or

  • NOT: not

Пример:

ip.src == ваш ip ( XXX.XXX.X.X.) and not dns


Полезные советы

  1. Используйте автодополнение в строке фильтров, чтобы быстро найти нужный протокол или поле.

  2. Часто используемые фильтры можно сохранить в Wireshark для последующего использования.

  3. Для сложного анализа можно использовать отдельные выражения с использованием регулярных выражений в панели «Display Filters».

Проверка использованных технологий

IP‑адрес 93.184.216.34 был проверен с помощью дополнительных инструментов и баз данных. Результаты анализа:

  • Этот адрес принадлежит компании «Internet Assigned Numbers Authority (IANA)» и используется для демонстрационных целей. Это подтверждает, что example.com — тестовый сайт, предназначенный для образовательных и тестовых целей.

  • Сайт не использует CDN‑сервисов, таких как Cloudflare. Все запросы обрабатываются напрямую.

Итог

Я проанализировал и понял, что сайт example.com предназначен исключительно для тестирования и демонстрации работы DNS. Все запросы и ответы корректно обработаны. Работа с Wireshark позволила мне изучить основы захвата и анализа сетевого трафика, разобраться что такое hex и какие есть методы фильтрации, включая запросы и ответы DNS.

Этот опыт оказался мне полезен и может быть полезен вам и для начинающих специалистов по тестированию ПО, сетевых администраторов и т. д.

Комментарии (8)


  1. Vamp
    12.12.2024 07:32

    Само Задание:
    ...
    2. Перехватить HTTP/HTTPS‑трафик сайта (например, https://example.com).

    Собственно, где в статье про перехват HTTP/HTTPS?

    Ожидал увидеть как вкрывают HTTPS, а на деле увидел "ЧАТ GPT".


    1. remzalp
      12.12.2024 07:32

      По HTTPS на самом деле есть простой механизм - просим браузер хранить сессионные ключи в отдельном файлике и подгружаем его. Но да, не прозвучало.

      Пример:
      set SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txt start firefox


    1. KeksCap Автор
      12.12.2024 07:32

      исправил


  1. Classic_Fungus
    12.12.2024 07:32

    Похоже на отчёт по лабе, в которой отсутствие выполнения одного из пунктов (2) задачи решили компенсировать переписыванием документации своими словами. Учитывая, что это была единственная реальная задача в условии, думаю даже тройка была бы под вопросом.


  1. ZVEZDO4ETik
    12.12.2024 07:32

    Поясните пожалуйста для меня такой момент: мне нужно написать правила для выхода машины в интернет через файерволл и я пыталась собрать дамп, во время того, как выкачиваются контейнеры из docker-hub'а (podman pull ubi-9), зафиксировать на какие же удалённые узлы мне собственно писать эти правила, но способ с pcap и анализом wireshark мне показался очень трудным и изощрённым, есть ли более простые способы решения такой задачи?


    1. Vamp
      12.12.2024 07:32

      Вариант попроще - закрыть интернет и сделать pull. Не знаю насчёт подмана, но утилита docker в описании ошибки напишет url, до которого не может достучаться. Что-то типа Error response from daemon: Get https://index.docker.io/v1/users/: dial tcp: ... i/o timeout. Далее берёте домен, смотрите какие на нём IP адреса (например, командами host, nslookup, dig) и прописывете в свой фаервол. Повторяете pull, смотрите какой новый домен вылез в ошибке и прописываете его. Повторяете процедуру, пока ошибки не закончатся.

      Но есть загвоздка. IP адреса у докер хаба регулярно меняются, поэтому недостаточно один раз найти какие-то адреса и прописать их. Да и поддоменов у него тоже дофига. Так что будете регулярно разбираться почему докер хаб снова отвалился и какие у него теперь новые актуальные адреса.

      По классике эта проблема решается использованием прокси сервера. Например, squid. На фаерволе разрешаете интернет только прокси серверу (в линуксе это возможно при помощи модуля -m owner --uid-owner). В настройках прокси разрешаете домены '*.docker.io' и '*.docker.com'. Далее настраиваете подман на использование прокси (опять же, не могу сказать как это делается у подмана, но для докера есть мануал). И всё. Проблема решена.

      В дальнейшем наверняка потребуется открыть доступ к репозиториям для обновления ос (для дебиана это '*.debian.org', для убунту 'archive.ubuntu.com', 'security.ubuntu.com'), затем к другим реестрам контейнеров, например, github ('ghcr.io', 'pkg-containers.githubusercontent.com'), google ('gcr.io'), редхат ('quay.io') и может ещё какие-нибудь. Управлять этим на уровне фаервола хоть и принципиально возможно, но крайне муторно.

      Так же через прокси легко обходить блокировки. Например, когда докер хаб заблокировал РФ, я просто поднял ещё один прокси в хецнере и на основном прокси сервере настроил проксирование докеровских доменов через хецнер. И когда коллеги из соседних команд ещё даже не до конца поняли что случилось и что делать, у меня уже всё работало.


  1. DiperDo
    12.12.2024 07:32

    Пример:

    plaintext

    Копировать код

    Потрясающе


    1. KeksCap Автор
      12.12.2024 07:32

      косякнул, уже исправил )