Анализ сетевого трафика для сайта https://example.com/
Введение
Привет, друзья! Мы с вами отправляемся в интересное путешествие по миру сетевого анализа. К слову, я вообще моряк, но решил сменить курс и попробовать себя в IT. Прочитав пару книг о тестировании и освоив несколько видеокурсов, я понял, что пора закрепить свои навыки на практике. В этом материале мы вместе разберёмся, как использовать снифферы для анализа сетевого трафика. Это поможет начинающим специалистам, желающим освоить эту важную область.
В качестве нашего проводника я обратился к чату GPT, который предоставил следующее тестовое задание:
ЧАТ GPT:
Для проверки базовых знаний работы с снифферами у junior QA специалиста можно предложить следующее тестовое задание: Тестовое задание: Анализ HTTP-запросов
Цель: Проверить умение использовать снифферы для анализа сетевого трафика и понимание структуры HTTP-запросов и ответов.
Само Задание:
Установить и настроить сниффер (Wireshark, Fiddler или Charles Proxy).
Перехватить HTTP/HTTPS-трафик сайта (например, https://example.com).
Провести анализ HTTP-запросов и ответов, изучить заголовки и тело ответа.
Задокументировать результаты с примерами запросов и ответов.
Итак, погнали!
В статье я представил пошаговый процесс захвата, фильтрации и анализа трафика, а также результаты, которые я получил в ходе работы
Установка программы Wireshark
Для анализа сетевого трафика мы будем использовать программу Wireshark. Вот шаги по её установке:
Переходим на официальный сайт Wireshark.
Выбираем версию программы, соответствующую вашей операционной системе (Windows, macOS, Linux). (В моём примере это Windows.)
Загружаем установочный файл и выполняем установку, следуя инструкциям мастера установки.
После завершения установки запускаем Wireshark с правами администратора (это необходимо для работы с сетевыми интерфейсами).
Захват трафика
Теперь переходим к основному процессу — перехвату трафика.
1. Открываем Wireshark.
2. Выбираем сетевой интерфейс, используемый для подключения (в моём случае это беспроводная сеть Wi-Fi).
2. Кликаем на выбранный сетевой интерфейс дважды, чтобы начался захват трафика.
3. Открываем браузер и переходим на сайт example.com (или другой на ваш выбор). Выполняем несколько действий, например, загружаем главную страницу.
4. После загрузки страницы возвращаемся в Wireshark и нажимаем "Stop Capture" (красный квадрат), чтобы завершить захват.
5. Для удобства анализа сохраняем захваченные данные в файл формата .pcap
(Файл → Сохранить).
Поиск пакетов с использованием доменного имени
Чтобы найти пакеты, связанные с доменом example.com, выполняем следующие шаги:
В поле фильтра Wireshark вводим: dns.qry.name contains "example.com".
Применяем фильтр, чтобы увидеть DNS-запросы и ответы, связанные с этим доменом.
Анализ DNS-запросов и ответов
Запрос на example.com
На первом скриншоте представлена таблица с двумя DNS‑запросами. Ключевые детали: ( свои айпи я конечно же замажу ? )
Запрос (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
Полезные советы
Используйте автодополнение в строке фильтров, чтобы быстро найти нужный протокол или поле.
Часто используемые фильтры можно сохранить в Wireshark для последующего использования.
Для сложного анализа можно использовать отдельные выражения с использованием регулярных выражений в панели «Display Filters».
Проверка использованных технологий
IP‑адрес 93.184.216.34 был проверен с помощью дополнительных инструментов и баз данных. Результаты анализа:
Этот адрес принадлежит компании «Internet Assigned Numbers Authority (IANA)» и используется для демонстрационных целей. Это подтверждает, что example.com — тестовый сайт, предназначенный для образовательных и тестовых целей.
Сайт не использует CDN‑сервисов, таких как Cloudflare. Все запросы обрабатываются напрямую.
Итог
Я проанализировал и понял, что сайт example.com предназначен исключительно для тестирования и демонстрации работы DNS. Все запросы и ответы корректно обработаны. Работа с Wireshark позволила мне изучить основы захвата и анализа сетевого трафика, разобраться что такое hex и какие есть методы фильтрации, включая запросы и ответы DNS.
Этот опыт оказался мне полезен и может быть полезен вам и для начинающих специалистов по тестированию ПО, сетевых администраторов и т. д.
Комментарии (8)
Classic_Fungus
12.12.2024 07:32Похоже на отчёт по лабе, в которой отсутствие выполнения одного из пунктов (2) задачи решили компенсировать переписыванием документации своими словами. Учитывая, что это была единственная реальная задача в условии, думаю даже тройка была бы под вопросом.
ZVEZDO4ETik
12.12.2024 07:32Поясните пожалуйста для меня такой момент: мне нужно написать правила для выхода машины в интернет через файерволл и я пыталась собрать дамп, во время того, как выкачиваются контейнеры из docker-hub'а (podman pull ubi-9), зафиксировать на какие же удалённые узлы мне собственно писать эти правила, но способ с pcap и анализом wireshark мне показался очень трудным и изощрённым, есть ли более простые способы решения такой задачи?
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') и может ещё какие-нибудь. Управлять этим на уровне фаервола хоть и принципиально возможно, но крайне муторно.
Так же через прокси легко обходить блокировки. Например, когда докер хаб заблокировал РФ, я просто поднял ещё один прокси в хецнере и на основном прокси сервере настроил проксирование докеровских доменов через хецнер. И когда коллеги из соседних команд ещё даже не до конца поняли что случилось и что делать, у меня уже всё работало.
Vamp
Собственно, где в статье про перехват HTTP/HTTPS?
Ожидал увидеть как вкрывают HTTPS, а на деле увидел "ЧАТ GPT".
remzalp
По HTTPS на самом деле есть простой механизм - просим браузер хранить сессионные ключи в отдельном файлике и подгружаем его. Но да, не прозвучало.
Пример:
set SSLKEYLOGFILE=%USERPROFILE%\Desktop\keylogfile.txt start firefox
KeksCap Автор
исправил