Погружение в сетевой трафик: анализ и расшифровка

В современном мире, где каждая секунда связана с обменом данными, понимание работы компьютерных сетей становится критически важным. Как «увидеть» невидимый поток информации, который постоянно циркулирует между устройствами? Cуществуют инструменты, открывающие нам доступ к «пульсу» сетевого трафика подобно тому, как осциллограф позволяет визуализировать электрические сигналы,. В этой статье пройдем через практическое исследование сетевого трафика.


Что такое анализатор трафика (сниффер) и зачем он нужен?

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

Зачем это нужно?

  • Изучение сетевых протоколов: Сниффер позволяет наглядно увидеть, как функционируют протоколы, такие как IP, TCP, UDP, ICMP, HTTP и HTTPS, и закрепить теоретические знания о стеке TCP/IP.
  • Диагностика сетевых проблем: Выявление причин низкой скорости сети, проблем с доступом к ресурсам, некорректной работы приложений.
  • Безопасность: Обнаружение вредоносной активности, несанкционированного доступа, анализ атак и утечек данных.
  • Разработка и отладка приложений: Проверка правильности обмена данными между клиентскими и серверными частями приложений.

В этой статье мы сосредоточимся на практическом применении снифферов для понимания «сырого» шестнадцатеричного вида трафика и того, какие байты за что отвечают.


Подготовка рабочего стенда для анализа трафика

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

Необходимое ПО:

  • Операционная система: Любая ОС с графической средой (например, Ubuntu, Fedora, Debian, Mint или даже Windows с WSL2).
  • Браузер: Mozilla Firefox (или любой другой современный браузер, поддерживающий логирование SSL/TLS ключей).
  • Снифферы:
    • tcpdump: Консольный анализатор трафика, отлично подходит для сохранения трафика в файл и базовой фильтрации.
    • Wireshark Network Analyzer (или tshark): Мощный графический анализатор трафика с широкими возможностями по декодированию протоколов и визуализации данных. tshark — это консольная версия Wireshark.

Установка и Настройка (Общие Рекомендации):

  • Установка ОС и ПО: Установите выбранную операционную систему с графической средой. Затем установите браузер и выбранные снифферы. Процесс установки зависит от вашего дистрибутива, но обычно это сводится к использованию менеджера пакетов (например, sudo apt install wireshark tcpdump firefox для Debian/Ubuntu или sudo dnf install wireshark tcpdump firefox для Fedora).
Пример установки необходимых пакетов (Wireshark, tcpdump, Firefox) с помощью менеджера пакетов в дистрибутиве Linux.
  • Создание пользователя с ограниченными правами: Если вы не используете уже существующего пользователя с минимальными правами, создайте его (например, guest). Убедитесь, что от этого пользователя можно просматривать сайты в интернете через браузер.
  • Настройка прав для снифферов: Для анализа трафика снифферам требуется доступ к сетевым интерфейсам. В образовательных целях или для повседневного использования запускать снифферы от имени суперпользователя (root) не рекомендуется. Вместо этого лучше использовать механизм возможностей (capabilities) в Linux.

dumpcap (входит в состав Wireshark) и tcpdump являются программами, которые непосредственно взаимодействуют с сетевыми интерфейсами. Мы можем дать им необходимые привилегии без предоставления полных прав root.

Bash

sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
sudo setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/sbin/tcpdump

💡Примечание: Пути к исполняемым файлам (/usr/bin/dumpcap, /usr/sbin/tcpdump) могут немного отличаться в разных дистрибутивах. Используйте which dumpcap и which tcpdump для проверки.

Эти команды добавляют программы dumpcap и tcpdump возможности CAP_NET_RAW (использование сырых сокетов) и CAP_NET_ADMIN (операции, связанные с сетью и сетевыми интерфейсами). Флаги e, i, p определяют «Effective», «Inheritable» и «Permitted» возможности соответственно.

Просмотр и удаление возможностей:

Чтобы проверить добавленные возможности:

Bash

getcap /usr/bin/dumpcap
getcap /usr/sbin/tcpdump

Для удаления возможностей (возврата к исходному состоянию):

Bash

sudo setcap -r /usr/bin/dumpcap
sudo setcap -r /usr/sbin/tcpdump
Использование команд setcap для предоставления привилегий снифферам и getcap для их проверки.

Краткие теоретические сведения: модель TCP/IP

Перед тем как приступить к практике, важно освежить в памяти основные концепции стека протоколов TCP/IP.

Стек TCP/IP — это набор протоколов, который определяет, как компьютеры взаимодействуют в сети. Он часто сравнивается с многоуровневой моделью, где каждый уровень выполняет свою специфическую функцию.

Упрощенная модель стека протоколов TCP/IP, показывающая его основные уровни и протоколы, которые на них работают.

Напомним основные уровни и их назначение:

  • Прикладной уровень (Application Layer): Самый верхний уровень, взаимодействует непосредственно с пользовательскими приложениями (HTTP, HTTPS, FTP, SMTP, DNS и т.д.).
  • Транспортный уровень (Transport Layer): Обеспечивает сквозную связь между процессами на разных хостах. Основные протоколы: TCP (Transmission Control Protocol) — надежная, ориентированная на соединение передача данных; UDP (User Datagram Protocol) — быстрая, безгарантийная передача данных.
  • Сетевой уровень (Internet Layer): Отвечает за логическую адресацию и маршрутизацию пакетов в сети. Основной протокол: IP (Internet Protocol).
  • Канальный уровень (Link Layer): Отвечает за передачу кадров данных между непосредственно подключенными устройствами. Здесь работают такие протоколы, как Ethernet и ARP (Address Resolution Protocol).
  • Физический уровень (Physical Layer): Отвечает за физическую передачу битов по кабелю или беспроводной среде.

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

Процесс инкапсуляции данных: добавление заголовков протоколов на каждом уровне при движении информации от прикладного уровня к физическому.

Практическое исследование трафика с tcpdump

Начнем наше исследование с консольного инструмента tcpdump.

Запуск tcpdump и базовый перехват

Войдите в систему под созданным пользователем user. Откройте терминал и запустите tcpdump:

Bash

tcpdump -i <ваш_интерфейс> -n -nn

Замените <ваш_интерфейс> на имя вашего сетевого интерфейса (например, eth0, enp0s3, wlan0). Узнать имя интерфейса можно с помощью команды ip a или ifconfig.

  • -i <интерфейс>: Указывает сетевой интерфейс для перехвата трафика.
  • -n: Не преобразовывать IP-адреса в доменные имена (избежать запросов к DNS).
  • -nn: Не преобразовывать номера портов в имена сервисов.

Вы увидите, как в окне терминала начнут появляться записи, соответствующие перехваченным сетевым пакетам.

Создание сетевой активности

Расположите окно терминала так, чтобы оно было видно. Запустите браузер (Mozilla Firefox) и перейдите на любой веб-сайт (например, http://yandex.ru). Обратите внимание, что браузер генерирует собственный трафик даже до того, как вы введете адрес.

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

Остановите tcpdump нажатием CTRL + C. Запустите его повторно с фильтром, чтобы отображать только ARP и ICMP трафик:

Bash

tcpdump -i <ваш_интерфейс> -n -nn arp or icmp

Фильтр arp or icmp гарантирует, что будут отображаться только пакеты, относящиеся к протоколам ARP или ICMP.

Генерация ARP и ICMP трафика

  • Откройте еще одно окно терминала и определите свой IP-адрес и подсеть:

Bash

ip address show <ваш_интерфейс>
  • Придумайте несколько IP-адресов в вашей подсети (например, изменив последнюю цифру вашего IP-адреса).
  • Отправьте по два ICMP-запроса (ping) вымышленным получателям:

Bash

ping -c 2 192.168.1.8 # Замените на ваш IP

В окне tcpdump вы увидите:

  • ARP-запросы (ARP, Request who-has ...): Если MAC-адрес целевого IP-адреса неизвестен, ваш компьютер отправит широковещательный ARP-запрос, чтобы узнать его.
  • ARP-ответы (ARP, Reply ... is-at ...): Отвечающий хост пришлет свой MAC-адрес.
  • ICMP-запросы (ICMP echo request): Запросы ping.
  • ICMP-ответы (ICMP echo reply): Ответы на ping.
Пример вывода tcpdump, показывающий ARP-запросы и ответы, а также ICMP-трафик.
  • Просмотрите свою ARP-таблицу (ARP-кэш):

Bash

ip neighbour show

Записи с пометкой FAILED указывают на отсутствие информации о MAC-адресе для данного IP.

Просмотр содержимого пакетов в шестнадцатеричном виде

Остановите tcpdump и запустите его с ключом -X для вывода содержимого пакетов в шестнадцатеричном и ASCII-виде:

Bash

tcpdump -i <ваш_интерфейс> -n -nn -X arp or icmp

Повторите отправку ICMP-запросов. Теперь вы увидите не только строки с сообщениями, но и «сырое» содержимое пакетов. Байты с десятичными кодами от 32 до 127 будут отображаться в ASCII справа.

Вывод tcpdump с шестнадцатеричным дампом пакетов, где видна структура заголовков и данных.

Отображение заголовков канального уровня

Добавьте ключ -e для отображения MAC-адресов отправителя и получателя Ethernet-кадров:

Bash

tcpdump -i <ваш_интерфейс> -n -nn -X -e arp or icmp

Эта информация полезна для понимания того, как пакеты передаются на канальном уровне.


Сохранение трафика и анализ в wireshark

Для удобного анализа больших объемов трафика и протоколов с комплексной структурой лучше сохранять его в файл и затем открывать в Wireshark.

Сохранение трафика в файл

Запустите tcpdump с ключом -w для сохранения трафика в файл:

Bash

tcpdump -i <ваш_интерфейс> -w /home/guest/traffic.pcap
  • /home/guest/traffic.pcap — путь и имя файла для сохранения. Расширение .pcap (или .pcapng) является стандартом для файлов дампов трафика.
  • Ключи -n, -nn, -X, -e не нужны при сохранении, так как они влияют только на отображение.

Повторите отправку ICMP-запросов. После этого остановите tcpdump (CTRL + C). Убедитесь, что файл traffic.pcap создан:

Bash

ls -l /home/user/traffic.pcap

Открытие файла в Wireshark

  • Запустите Wireshark Network Analyzer. Если появится запрос на запуск с административными привилегиями, выберите «выполнить без привилегий» (это должно быть возможно, если вы правильно настроили возможности).
Окно Wireshark
  • В меню Wireshark выберите File -> Open... или нажмите CTRL + O. Откройте созданный файл /home/guest/traffic.pcap.
Главное окно Wireshark с открытым файлом дампа трафика, показывающее список пакетов.
  • Вы увидите три основные области в Wireshark:
    • Список пакетов: Верхняя панель, отображает перехваченные кадры с краткой информацией (номер, время, источник, получатель, протокол, длина, информация).
    • Панель деталей пакета: Средняя панель, показывает разобранные значения заголовков и данных пакета в иерархическом виде. Здесь можно разворачивать «ветки» протоколов, чтобы увидеть их внутреннюю структуру.
    • Панель шестнадцатеричного дампа: Нижняя панель, отображает непосредственное двоичное содержимое выбранного кадра в шестнадцатеричном и ASCII-виде.

💡Полезная функция Wireshark: Если вы выделите определенные байты в панели шестнадцатеричного дампа, Wireshark автоматически выделит соответствующее поле в панели деталей пакета, и наоборот. Это позволяет легко понять, какие байты за что отвечают, даже без глубоких знаний RFC.

Ответы на вопросы с помощью Wireshark

Используя открытый в Wireshark файл traffic.pcap, попробуйте ответить на следующие вопросы:

  • Что идет первым в Ethernet-кадре: MAC-адрес отправителя или MAC-адрес получателя?
    💡Подсказка: разверните раздел «Ethernet II» в панели деталей пакета.
  • С каким смещением от начала Ethernet-кадра в нем содержится IP-адрес получателя ICMP-сообщения типа echo request?
    💡Подсказка: выберите ICMP-пакет типа echo request, затем выделите IP-адрес получателя в панели деталей пакета и посмотрите на соответствующее смещение в шестнадцатеричном дампе.

Анализ трафика в реальном времени с wireshark

Wireshark также позволяет перехватывать трафик в реальном времени.

Запуск перехвата в Wireshark

  • В Wireshark выберите Захват -> Опции....
  • Найдите ваш сетевой интерфейс (например, eth0, enp0s3) и поставьте напротив него галочку.
  • Нажмите кнопку Старт
Окно выбора сетевого интерфейса в Wireshark для начала захвата трафика в реальном времени.

Генерация HTTP и HTTPS трафика

  • Запустите Mozilla Firefox.
  • Перейдите на сайт, работающий по HTTP (например, http://samag.ru — если он еще активен и использует HTTP, или найдите любой другой тестовый HTTP-сайт). Совершите несколько переходов по ссылкам внутри сайта.
  • Перейдите на сайт, работающий по HTTPS (например, https://www.yandex.ru).
  • Введите в поиске какое-нибудь слово (например, «Wireshark tutorial»).

Остановка перехвата и анализ

Остановите перехват трафика в Wireshark (Capture -> Stop). Изучите перехваченный трафик:

  • HTTP GET-запросы: Найдите в трафике HTTP GET-запросы к серверу http://samag.ru (например, строку GET / HTTP/1.1).
  • Параметр User-agent: Определите значение параметра User-agent, переданного серверу в HTTP-запросе. Этот параметр содержит информацию о браузере и ОС клиента.
  • Фрагменты HTML-страниц: Найдите в ответах сервера фрагменты HTML-страниц.
  • Обращения к HTTPS-сайту: Найдите обращения к серверу www.yandex.ru.

Расшифровка HTTPS-трафика

⚠️Важный момент: Попытайтесь найти слово, которое вы вводили в поисковую систему Яндекс. Скорее всего, вы его не найдете. Почему? Потому что HTTPS (HTTP Secure) использует шифрование трафика между клиентом и веб-сервером. Это означает, что данные передаются в зашифрованном виде и напрямую нечитаемы.

Дешифрование HTTPS-трафика, особенно с использованием современных протоколов TLS (Transport Layer Security, пришедший на смену SSL), может быть сложной задачей. Однако, для изучения собственного трафика существует относительно простой метод с использованием переменной окружения SSLKEYLOGFILE.

Как это работает: Некоторые браузеры (включая Firefox) могут записывать ключи сессий TLS в специальный файл. Wireshark затем может использовать этот файл для дешифрования трафика.

⚠️Важный нюанс: Perfect Forward Secrecy (PFS)
Многие современные сайты используют Perfect Forward Secrecy (PFS), что делает дешифрование трафика с использованием SSLKEYLOGFILE более сложным или невозможным. PFS использует эфемерные (недолговечные) сеансовые ключи (например, через алгоритм ECDHE), которые генерируются для каждой сессии. Даже если секретный ключ сервера будет скомпрометирован в будущем, прошлый трафик, защищенный PFS, не может быть расшифрован.

Чтобы обойти это в учебных целях, мы можем заставить браузер использовать алгоритмы обмена ключами, которые не поддерживают PFS (например, RSA), и при которых сеансовый ключ вырабатывается на стороне клиента. В реальной практике это значительно снижает безопасность соединения и не рекомендуется!

Настройка Firefox для дешифрования HTTPS (в учебных целях!)

  • Откройте новую вкладку в Firefox и введите about:config.
  • На предупреждение ответьте согласием («Я принимаю на себя риск!»).
  • В строке поиска введите ssl3.
  • Измените состояние следующих параметров на true:
    • security.ssl3.rsa_aes_128_sha
    • security.ssl3.rsa_aes_256_sha
    • security.ssl3.rsa_rc4_128_md5
    • security.ssl3.rsa_rc4_128_sha Для всех остальных параметров security.ssl3.* установите значение false. Обязательно запишите первоначальные настройки, чтобы потом их вернуть!
Настройки about:config в браузере Firefox,
  • Закройте браузер Firefox и убедитесь, что все его процессы завершены:

Bash

killall firefox

Создание файла логов SSL/TLS ключей

Создайте пустой файл, в который будут записываться ключи сессий:

Bash

touch /home/user/ssl.log

Настройка Wireshark для использования SSLKEYLOGFILE

  • В Wireshark перейдите в Редактирование -> Параметры... или нажмите Shift + Ctrl + P.
  • В окне настроек выберите раздел Protocols и найдите TLS (ранее назывался SSL).
  • В поле (Pre)-Master-Secret log filename укажите путь к файлу /home/user/ssl.log или выберите его с помощью кнопки Открыть....
Настройки протокола TLS/SSL в Wireshark
  • Нажмите Ok.

Запуск браузера с SSLKEYLOGFILE и перехват трафика

  • Запустите перехват трафика в Wireshark на вашем сетевом интерфейсе (Захват -> Опции... -> Старт).
  • Запустите Firefox из терминала с указанием переменной окружения:

Bash

SSLKEYLOGFILE=/home/guest/ssl.log firefox &

💡Символ & позволяет запустить браузер в фоновом режиме и продолжить работу в терминале.

  • Зайдите на сайт https://www.yandex.ru и произведите поиск каких-нибудь слов (например, на латинице, чтобы упростить поиск в трафике).

Изучение расшифрованного HTTPS-трафика

Остановите перехват трафика в Wireshark (Захват -> Стоп).

  • Найдите обращения к DNS-серверу и ответы от него.
  • Обратите внимание, что теперь для HTTPS-трафика в панели деталей пакета могут появиться дополнительные вкладки, такие как Decrypted SSL data или Decrypted SSL record.
  • Исследование расшифрованного HTTPS-трафика не сложнее анализа обычного HTTP. Попытайтесь найти переданные поисковой системе запросы.

📜 Совет: Если вы ищете кириллицу, помните, что она кодируется в UTF-8, а затем в URL-кодировку (например, %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82 для «привет»). Пробел кодируется как %20.


Возвращение системы в исходное состояние

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

  • Настройки Firefox:
    • Запустите Firefox, зайдите на about:config и введите ssl3.
    • Верните все параметры security.ssl3.*, которые вы изменяли, в их первоначальное состояние (скорее всего, большинство из них должны быть false, чтобы браузер использовал более безопасные и современные алгоритмы TLS).
    • Закройте все окна браузера.
  • Настройки Wireshark:
    • Откройте Wireshark, перейдите в Редактировать -> Параметры... -> Protocols -> TLS.
    • Удалите имя файла из поля (Pre)-Master-Secret log filename.
  • Удаление файлов:

Bash

rm -f /home/user/traffic.pcap
rm -f /home/user/ssl.log

Заключение

Вы получили первичные навыки работы со средствами визуальной диагностики сети – снифферами. Вы увидели на практике, как выглядит трафик протоколов ARP, IP, ICMP, DNS, HTTP и даже научились дешифровать HTTPS-трафик в учебных целях. Теперь вы сможете лучше соотносить протоколы с их уровнями в сетевой модели и глубже понимать строение пакетов, дейтаграмм и кадров, а также механизм инкапсуляции данных при их продвижении по стеку протоколов.

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

Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!