Руководство по анализу трафика сети посредством Wireshark

1. Что такое Wireshark?

Логотип программы
Логотип программы

Wireshark – это широко распространённый инструмент для захвата и анализа сетевого трафика, который активно используется как для образовательных целей, так и для устранения неполадок на компьютере или в сети. Wireshark работает практически со всеми протоколами модели OSI, обладает понятным для обычного пользователя интерфейсом и удобной системой фильтрации данных. Помимо всего этого, программа является кроссплатформенной и поддерживает следующие операционные системы: Windows, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, OpenBSD.

В этом руководстве мы рассмотрим основной функционал программы Wireshark, соотнесём её с моделью OSI, научимся анализировать сетевой трафик и обезопасим своё нахождение в глобальной сети Интернет.

2. Как установить Wireshark?

Для начала нам необходимо скачать и установить программу Wireshark. Так как программа распространяется под лицензией GNU GPL v2 (т.е. может свободно распространяться), то несложно найти любую версию программы в свободном доступе. В руководстве мы будем использовать функционал более ранней версии программы (1.12.3). Это вызвано тем, что в этой версии сразу встроен протокол SSL, который используется в главе 6. Установка более ранней версии облегчает подготовку к работе с программой, поэтому мы выбрали её. Найти установщик можно на официальном сайте.

Дальнейшая установка программы проста – нажимаем «Next» - «Next» - «Next».

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

После успешной установки на Вашем рабочем столе появится ярлык Wireshark. Мы можем приступать к рассмотрению функционала!

Ярлык программы на рабочем столе
Ярлык программы на рабочем столе

3. Как пользоваться программой Wireshark?

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

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

Стартовое меню
Стартовое меню

Из всего этого нам необходимо обратить внимание на эту область программы.

Область захвата трафика сетевого интерфейса
Область захвата трафика сетевого интерфейса

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

Сетевой интерфейс – это программное обеспечение, которое взаимодействует с сетевым драйвером и с уровнем IP. Он обеспечивает уровню IP доступ ко всем имеющимся сетевым адаптерам, трафик которых мы будет перехватывать. Чаще всего в программе Wireshark можно встретить сетевой интерфейс беспроводной (Wi-Fi) и кабельный (Ethernet).

В руководстве используется Wi-Fi, поэтому мы выполняем захват «Беспроводной сети», после чего нажимаем «Start».

Если Вы выбрали правильный интерфейс, то сможете увидеть следующее.

Обзор начала захвата трафика
Обзор начала захвата трафика

Рассмотрим подробнее это окно по пунктам, указанным на нём:

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

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

  3. Панель пакетов, обновляющаяся в реальном времени. Здесь информация о пакетах разделена по столбцам, определённым на панели наименований.

  4. Панель уровней, описывающая уровни модели OSI выбранного сетевого пакета.

  5. Панель метаданных, представляющая данные в шестнадцатеричном коде и символах.

Поздравляем! Вы успешно захватили трафик Вашей сети. Теперь можно увидеть пакеты данных, проходящих по сети, а также некоторую информацию о них: адреса отправителя и получателя, использующиеся протоколы и содержание пакета.

Теперь можно приступить к анализу сетевого трафика.

4. Как найти скрытую информацию?

Перед началом анализа трафика необходимо иметь базовые знания о протоколах сетевой модели OSI. Достаточно прочитать статью в Википедии.

Во многих программах для передачи информации используется протокол HTTP, который позволяет получать различные ресурсы из Интернета и обратно. Рассмотрим один из пакетов, переданных по протоколу HTTP.

Обзор пакета HTTP
Обзор пакета HTTP

В протоколе HTTP для передачи данных используются запросы GET (предназначен для получения данных) и POST (предназначен для отправки данных).

На рисунке в поле 1 мы видим IP-адрес адресата (в данном случае, это адрес моего компьютера). В поле 2 мы узнаём, что сервер антивируса послал запрос GET для того, чтобы запросить некоторые данные о моём компьютере. Это необходимо для корректного обновления программы. И в поле 3 мы видим то, как выглядит этот запрос в виде URL (Интернет-ссылки).

Небольшое домашнее задание!

Для закрепления материала попробуйте проанализировать любой пакет протокола HTTP на Вашем компьютере и попытайтесь объяснить, для чего он был отправлен.

5. Как среди всех пакетов найти необходимые?

При выполнении домашнего задания у Вас могла возникнуть проблема нахождения необходимого пакета. Для её решения в программе Wireshark есть решение – фильтрация! В специальном поле «Filter» можно ввести необходимые команды или воспользоваться подсказками.

Обзор поля "Filter"
Обзор поля "Filter"

Чаще всего используется фильтрация по IP-адресам, по номерам порта и по протоколам. Давайте посмотрим, как это происходит.

Фильтрация по IP-адресу позволяет нам просматривать все пакеты, приходящие от кого-либо или уходящие кому-либо. Например, отберём все пакеты, приходящие от IP-адреса 10.1.30.46 с помощью ввода в фильтре «ip.src == x.x.x.x».

Обзор команды "ip.src"
Обзор команды "ip.src"

Также можно отфильтровать трафик сети по IP-адресу получателя пакетов с помощью команды «ip.dst == x.x.x.x».

Обзор команды "ip.dst"
Обзор команды "ip.dst"

Кроме того, можно увидеть пакеты вне зависимости от направления трафика с помощью «ip.addr == x.x.x.x».

Обзор команды "ip.addr"
Обзор команды "ip.addr"

Для фильтрации по номеру порта используется «.port = x» после названия протокола. Например, для просмотра TCP-порта 80, используемого для незашифрованного трафика HTTP, используем команду «tpc.port == 80».

Обзор команды "tcp.port"
Обзор команды "tcp.port"

И, наконец, для фильтрации трафика по используемым пакетами протоколам необходимо просто ввести название протокола.

Обратите внимание, что фильтры можно комбинировать при помощи логических операторов И «and/&&», ИЛИ «or/||» и НЕ «not/!»

Обзор логических операторов
Обзор логических операторов

Снова домашнее задание!

Чтобы попрактиковаться в поиске необходимой информации, попробуйте посмотреть количество пакетов того или иного протокола и подумайте, почему их так много.

6. Как перехватить данные, передающиеся по защищённым каналам связи?

Разобравшись с основным функционалом Wireshark, мы можем приступить к более сложному и полезному.

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

Иногда пользователю или системного администратору необходимо проверить трафик на наличие подозрительной активности или на корректную работу программы. Из-за этого возникает необходимость расшифровывать перехваченный защищённый трафик.

Для начала разберёмся в том, как работает протокол SSL/TLS. Перед обменом шифрованными данными используется процесс установки соединения, также называемый рукопожатием.

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

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

Наиболее распространённым алгоритмом обмена сеансовым ключом является RSA. Рассмотрим инфографику, описывающую механизм работы алгоритма.

Алгоритм обмена сеансовым ключом RSA
Алгоритм обмена сеансовым ключом RSA

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

Теперь попробуем перехватить защищённую информацию в программе Wireshark. Выполним подготовительные действия, а именно проверим используемый для согласования сеансовых ключей алгоритм и настроим браузер. Для начала находим рукопожатие с помощью фильтра, введя «ssl.handshake», и проверяем сообщение сервера.

Обзор команды "ssl.handshake"
Обзор команды "ssl.handshake"

В поле «Cipher Suite» мы можем увитель «TLS_RSA». Это значит, что мы можем приступать к дальнейшим действиям.

Настройка браузера в операционной система Windows довольно проста. Открываем свойства компьютера, затем «Дополнительные параметры системы» и выбираем «Переменные среды…».

Настройка браузера в Windows 10
Настройка браузера в Windows 10

Добавляем новую пользовательскую переменную «SSKEYLOGFILE» и указываем путь до файла, куда мы ходим его сохранять.

Рассмотрим ответное сообщение клиента: оно содержит зашифрованное значение предварительного секрета текущей сессии.

Ответное сообщение клиента
Ответное сообщение клиента

Далее переходим к настройке программы Wireshark. Комбинацией клавиш «Ctrl+Shift+P» открываем меню «Preferences», затем раскрываем ветку «Protocols» и выбираем «SSL».

Настройка Wireshark
Настройка Wireshark

Проверяем установку необходимых полей, показанных на картинке, и жмём кнопку «Edit». В появившемся окне нажимаем на кнопку «New» и заполняем следующие поля: IP Address (IP-адрес SSL-сервера), Port (порт SSL-сервера), Protocol (протокол, использующий шифрацию SSL. При неизвестном указывать data), Key File (путь к файлу с секретным ключом сервера, который мы указывали в Переменных средах) и Password (если секретный ключ защищён паролем).

Настройка SSL в Wireshark
Настройка SSL в Wireshark

Теперь можно подтвердить настройки и приступить к просмотру расшифрованного трафика. Не забывайте использовать фильтр!

Закрепление пройденного материала!

Попробуйте самостоятельно подключиться к серверу какого-либо сайта и посмотреть, какими пакетами обменивается Вам компьютер с ним.

7. Какие возможности даёт захват защищённого трафика?

Захват защищённого трафика даёт множество возможностей. Одной из них является перехват HTTPS-запросов пользователей, подключённых к сети. Давайте рассмотрим, как это сделать и какой результат мы получим.

Для начала повторяем действия из предыдущего пункта, но в качестве IP-адреса SSL-сервера указываем адрес необходимого сайта. Для передачи паролей зачастую используется протокол передачи данных HTTP. О используемых в нём методах мы уже говорили в главе 4. Чтобы использовать фильтрацию HTTP-трафика по методам, можно использовать команду «http.request.method == “название метода”». Так как мы хотим перехватить данные, отправленные клиентом на сервер, то будем рассматривать POST-запросы. Для этого применим фильтр «http.request.method == “POST”».

Захват защищённого трафика
Захват защищённого трафика

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

Небольшая практика!

Попробуйте захватить защищённый трафик сервера электронной почты и авторизуйтесь, используя логин и пароль. Найдите POST-запрос и посмотрите, что там находится.

Скорее всего, важные данные будут зашифрованы. Таким способом почтовый сервис защищает Ваши данные, но риск взлома всё равно остаётся.

8. Как можно соотнести модель OSI и программу Wireshark?

Рассмотрев весь функционал программы Wireshark, мы можем соотнести её с сетевой моделью OSI. Но для начала следует вспомнить, что из себя представляет эта модель.

OSI – это набор сетевых протоколов, посредством которого различные сетевые устройства взаимодействуют друг с другом. Модель определяет семь уровней взаимодействия систем. Рассмотрим таблицу уровней модели OSI.

Уровень

Тип данных

Функции

Примеры

7. Прикладной

Данные

Доступ к сетевым службам

HTTP, FTP

6. Представления

Данные

Представление и шифрование данных

ASCII, JPEG

5. Сеансовый

Данные

Управление сеансом связи

RPC, PAP

4. Транспортный

Сегменты

Прямая связь между конечными пунктами и надёжность

TCP, UDP

3. Сетевой

Пакеты

Определение маршрута и логическая адресация

IPv4, IPv6, ICMP

2. Канальный

Кадры

Физическая адресация

Ethernet, ARP

1. Физический

Биты

Работа со средой передачи, сигналами и двоичными данными

USB, RJ

Теперь соотнесём эти уровни с Wireshark. Рассмотрим наиболее часто встречающиеся при анализе трафика протоколы, а именно HTTP, TCP и ICMP.

Протокол HTTP в программе Wireshark имеет 4 уровня по модели OSI, а именно прикладной (Hypertext Transfer Protocol), транспортный (TCP), сетевой (IPv4) и канальный (Ethernet II).

Обзор протокола HTTP
Обзор протокола HTTP

Протокол TCP имеет 3 уровня по модели OSI, в которые входят транспортный (TCP), сетевой (IPv4) и канальный (Ethernet II).

Обзор протокола TCP
Обзор протокола TCP

Протокол ICMP вообще имеет лишь 2 уровня по модели OSI: сетевой (IPv4) и канальный (Ethernet II).

Обзор протокола ICMP
Обзор протокола ICMP

Всего в программе Wireshark определяется лишь 5 уровней модели OSI: прикладной, транспортный, сетевой, канальный и физический. В зависимости от протокола можно увидеть разные уровни.

Подведение итогов

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

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


  1. Johan_Palych
    17.05.2023 19:29
    +32

    Качать из непонятной помойки версию Wireshark-win64-1.12.3.exe от 2015-01-07?
    Все есть в официальных репах

    https://www.wireshark.org/download/win64/


    1. WAR-S
      17.05.2023 19:29
      +1

      Вспомнилось: "Сижу с тапка, компьютер взорвался, не качайте!!"


    1. Exosphere
      17.05.2023 19:29
      +2

      Заменила.


  1. horon
    17.05.2023 19:29

    Go Deep. Мой ежедневный инструмент. Позволяет постичь магию сети изнутри.


  1. zhka
    17.05.2023 19:29
    +3

    мы посоветуем сайт «Filepuma». Для скачивания достаточно нажать кнопку «Download Now».

    серьезно? Почему не с архива старых версий на сайте?


  1. aborouhin
    17.05.2023 19:29
    +4

    В руководстве мы будем использовать функционал более ранней версии программы (1.12.3). Это вызвано тем, что в этой версии сразу встроен протокол SSL, который используется в главе 6.

    А чем эта древняя версия для работы с SSL лучше актуальной 4.0.5, кроме того, что начиная с версии 3.0 соответствующий раздел настроек переименован с "SSL" в "TLS"?


    1. aborouhin
      17.05.2023 19:29
      +5

      P.S. Кстати, по тексту про SSL жуткая мешанина. Сначала создаём SSLKEYLOGFILE, а потом в настройках Wireshark почему-то не заполняем путь к этому логу, а указываем приватный ключ сервера. А это два разных способа, каждый для своего применения.


  1. selkwind
    17.05.2023 19:29

    Интересно, а как с помощью wireshark открыть и отфильтровать файл с дампом гигов этак на сорок? Его можно как-то по-умному отучить грузить весь файл в память?


    1. aborouhin
      17.05.2023 19:29
      +2

      Нельзя, есть рекомендации, как чуть-чуть улучшить ситуацию, но не кардинально, всё равно всё в памяти, да ещё и с многопоточностью плохо. Можно предварительно воспользоваться чем-то типа large-pcap-analyzer, чтобы предварительно отфильтровать дамп и уменьшить его до размера, который Wireshark проглотит.


    1. Samhuawei
      17.05.2023 19:29

      Для больших файлов имеет смысл выучить инструменты Linux типа grep и установить в винде WSL2.

      Помню как коллега из одной из стран британского содружества грузил в Ворд исходный файл одного процесса размером в 4 гигабайта чтобы поправить последний байтик (убрать перенос строки) и весь банк ждал полчаса.


      1. iig
        17.05.2023 19:29

        Я так понимаю, файл был не от word. И зачем так делать?


  1. 1dNDN
    17.05.2023 19:29
    +2

    Чтобы разбирать кастомные протоколы, можно описать протокол диссектору. Он, конечно, старый и вроде не обновляется, но не бесполезный

    http://wsgd.free.fr/index.html


    1. Sequoza
      17.05.2023 19:29
      +1

      Можно еще самому плагин написать, благо документация есть.


  1. catBasilio
    17.05.2023 19:29
    +1

    Ничего не понятно на счет SSL.
    Зачем переменную окружения указывать? кто и что в этот файл будет писать?
    Откуда мы возьмем приватный ключ сервера? думаете сервера их в открытом доступе хранят?
    Вообщем больше вопросов чем ответов.


    1. aborouhin
      17.05.2023 19:29
      +3

      В целом в официальной справке Wireshark всё написано гораздо понятнее, без ошибок и применительно к актуальной версии :) В т.ч. и как работает магия с SSLKEYLOGFILE, как в случае его использования на самом деле надо настраивать программу и почему нам при этом не нужен приватный ключ.

      Правда, как автор статьи собрался перехватывать трафик других пользователей и трафик почтового сервера, остаётся загадкой... но такое впечатление, что у автора сложилось... хм, несколько фрагментарное понимание о предмете. Фразы типа "протокол HTTP в программе Wireshark имеет 4 уровня по модели OSI" тоже показатель :)


  1. slwjgglr
    17.05.2023 19:29

    Наверняка многие в бытность писали любительские анализаторы сети для linux через sock_raw, af_packet и т.д. Какая интересно внутренняя кухня wireshark, насколько я знаю, там через bpf вроде организовано. Никто не делал на коленке аналог wireshark, с более или менее нормальным функционалом? С чем сталкивались? Сейчас понадобилась подобная утилитка, но менее увесистая. Или мож есть ли аналоги попроще, чуть мощнее tcpdump.


    1. aborouhin
      17.05.2023 19:29

      Какая интересно внутренняя кухня wireshark

      Так он же опенсорсный, можете хоть форкнуть как основу для своего велосипеда :)


  1. kfs
    17.05.2023 19:29

    Ещё можно существенно сократить объем захватываемого трафика, настроив на этапе выбора интерфейса, в разделе Capture options, предварительный фильтр Capture Filter.


  1. Dzzzen
    17.05.2023 19:29

    Как автор за корявый перевод статьи 2012 года набрал плюсы, и еще инвайт получил? Похоже, все кто плюсовал, дальше первого абзаца не читали. Столько ляпов в этом переводе. Интересно, еще хотя бы один сайт использует SSL, а не TLS?

    А по теме лучше подскажите - как в Wireshark анализировать HTTP2 и декодировать QUIC? Например, извлечь файлы, передаваемые по HTTP2?


  1. 402d
    17.05.2023 19:29

    на этой неделе использовал Wireshark. Смотрю статья. Я это к чему, сама прога вещь хорошая. Качал с оф сайта, что надо покупать как-то не заметил. Для моих целей покопаться в логах bluetooth HCI всё получилось и так.