Руководство по анализу трафика сети посредством 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».
Если Вы выбрали правильный интерфейс, то сможете увидеть следующее.
Рассмотрим подробнее это окно по пунктам, указанным на нём:
Панель фильтров, позволяющая найти необходимую информацию. Подробнее о неё рассказано в пятой главе руководства.
Панель наименований, разделяющая информацию из пункта 3 на номер, временя с начала захвата трафика, источник и адресат, а также используемый протокол, размер пакета и небольшую информацию о сетевом пакете.
Панель пакетов, обновляющаяся в реальном времени. Здесь информация о пакетах разделена по столбцам, определённым на панели наименований.
Панель уровней, описывающая уровни модели OSI выбранного сетевого пакета.
Панель метаданных, представляющая данные в шестнадцатеричном коде и символах.
Поздравляем! Вы успешно захватили трафик Вашей сети. Теперь можно увидеть пакеты данных, проходящих по сети, а также некоторую информацию о них: адреса отправителя и получателя, использующиеся протоколы и содержание пакета.
Теперь можно приступить к анализу сетевого трафика.
4. Как найти скрытую информацию?
Перед началом анализа трафика необходимо иметь базовые знания о протоколах сетевой модели OSI. Достаточно прочитать статью в Википедии.
Во многих программах для передачи информации используется протокол HTTP, который позволяет получать различные ресурсы из Интернета и обратно. Рассмотрим один из пакетов, переданных по протоколу HTTP.
В протоколе HTTP для передачи данных используются запросы GET (предназначен для получения данных) и POST (предназначен для отправки данных).
На рисунке в поле 1 мы видим IP-адрес адресата (в данном случае, это адрес моего компьютера). В поле 2 мы узнаём, что сервер антивируса послал запрос GET для того, чтобы запросить некоторые данные о моём компьютере. Это необходимо для корректного обновления программы. И в поле 3 мы видим то, как выглядит этот запрос в виде URL (Интернет-ссылки).
Небольшое домашнее задание!
Для закрепления материала попробуйте проанализировать любой пакет протокола HTTP на Вашем компьютере и попытайтесь объяснить, для чего он был отправлен.
5. Как среди всех пакетов найти необходимые?
При выполнении домашнего задания у Вас могла возникнуть проблема нахождения необходимого пакета. Для её решения в программе Wireshark есть решение – фильтрация! В специальном поле «Filter» можно ввести необходимые команды или воспользоваться подсказками.
Чаще всего используется фильтрация по IP-адресам, по номерам порта и по протоколам. Давайте посмотрим, как это происходит.
Фильтрация по IP-адресу позволяет нам просматривать все пакеты, приходящие от кого-либо или уходящие кому-либо. Например, отберём все пакеты, приходящие от IP-адреса 10.1.30.46 с помощью ввода в фильтре «ip.src == x.x.x.x».
Также можно отфильтровать трафик сети по IP-адресу получателя пакетов с помощью команды «ip.dst == x.x.x.x».
Кроме того, можно увидеть пакеты вне зависимости от направления трафика с помощью «ip.addr == x.x.x.x».
Для фильтрации по номеру порта используется «.port = x» после названия протокола. Например, для просмотра TCP-порта 80, используемого для незашифрованного трафика HTTP, используем команду «tpc.port == 80».
И, наконец, для фильтрации трафика по используемым пакетами протоколам необходимо просто ввести название протокола.
Обратите внимание, что фильтры можно комбинировать при помощи логических операторов И «and/&&», ИЛИ «or/||» и НЕ «not/!»
Снова домашнее задание!
Чтобы попрактиковаться в поиске необходимой информации, попробуйте посмотреть количество пакетов того или иного протокола и подумайте, почему их так много.
6. Как перехватить данные, передающиеся по защищённым каналам связи?
Разобравшись с основным функционалом Wireshark, мы можем приступить к более сложному и полезному.
Передача данных в глобальной сети Интернет является небезопасной, особенно если никак не защищать их. В современных браузерах используется протокол SSL/TLS, который шифрует информацию и позволяет безопасно передать её.
Иногда пользователю или системного администратору необходимо проверить трафик на наличие подозрительной активности или на корректную работу программы. Из-за этого возникает необходимость расшифровывать перехваченный защищённый трафик.
Для начала разберёмся в том, как работает протокол SSL/TLS. Перед обменом шифрованными данными используется процесс установки соединения, также называемый рукопожатием.
На этапе рукопожатия клиент и сервер проходят аутентификацию (проверку подлинности), обмениваются информацией о своих возможностях и лишь после этого начинают согласование общего сеансового ключа.
Для согласования по незащищённому каналу связи существует множество алгоритмов. Выбор происходит из списка алгоритмов, которые поддерживаются клиентом, на начальной стадии рукопожатия.
Наиболее распространённым алгоритмом обмена сеансовым ключом является RSA. Рассмотрим инфографику, описывающую механизм работы алгоритма.
В момент рукопожатия клиент создаёт случайное число, называемое предварительным секретом, и отправляет его, зашифровав открытым ключом сервера. Далее обе стороны конвертируют предварительный секрет в главный и создают сеансовый ключ, который и используется для дальнейшего обмена информацией.
Теперь попробуем перехватить защищённую информацию в программе Wireshark. Выполним подготовительные действия, а именно проверим используемый для согласования сеансовых ключей алгоритм и настроим браузер. Для начала находим рукопожатие с помощью фильтра, введя «ssl.handshake», и проверяем сообщение сервера.
В поле «Cipher Suite» мы можем увитель «TLS_RSA». Это значит, что мы можем приступать к дальнейшим действиям.
Настройка браузера в операционной система Windows довольно проста. Открываем свойства компьютера, затем «Дополнительные параметры системы» и выбираем «Переменные среды…».
Добавляем новую пользовательскую переменную «SSKEYLOGFILE» и указываем путь до файла, куда мы ходим его сохранять.
Рассмотрим ответное сообщение клиента: оно содержит зашифрованное значение предварительного секрета текущей сессии.
Далее переходим к настройке программы Wireshark. Комбинацией клавиш «Ctrl+Shift+P» открываем меню «Preferences», затем раскрываем ветку «Protocols» и выбираем «SSL».
Проверяем установку необходимых полей, показанных на картинке, и жмём кнопку «Edit». В появившемся окне нажимаем на кнопку «New» и заполняем следующие поля: IP Address (IP-адрес SSL-сервера), Port (порт SSL-сервера), Protocol (протокол, использующий шифрацию SSL. При неизвестном указывать data), Key File (путь к файлу с секретным ключом сервера, который мы указывали в Переменных средах) и Password (если секретный ключ защищён паролем).
Теперь можно подтвердить настройки и приступить к просмотру расшифрованного трафика. Не забывайте использовать фильтр!
Закрепление пройденного материала!
Попробуйте самостоятельно подключиться к серверу какого-либо сайта и посмотреть, какими пакетами обменивается Вам компьютер с ним.
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).
Протокол TCP имеет 3 уровня по модели OSI, в которые входят транспортный (TCP), сетевой (IPv4) и канальный (Ethernet II).
Протокол ICMP вообще имеет лишь 2 уровня по модели OSI: сетевой (IPv4) и канальный (Ethernet II).
Всего в программе Wireshark определяется лишь 5 уровней модели OSI: прикладной, транспортный, сетевой, канальный и физический. В зависимости от протокола можно увидеть разные уровни.
Подведение итогов
Прочитав это руководство, мы научились анализировать трафик и искать скрытую информацию, а также перехватывать защищённую информацию. Для будущих специалистов по информационной безопасности это очень важные навыки, которые обязательно пригодятся в будущем и послужат фундаментом для будущего профессионального развития.
Комментарии (20)
aborouhin
17.05.2023 19:29+4В руководстве мы будем использовать функционал более ранней версии программы (1.12.3). Это вызвано тем, что в этой версии сразу встроен протокол SSL, который используется в главе 6.
А чем эта древняя версия для работы с SSL лучше актуальной 4.0.5, кроме того, что начиная с версии 3.0 соответствующий раздел настроек переименован с "SSL" в "TLS"?
aborouhin
17.05.2023 19:29+5P.S. Кстати, по тексту про SSL жуткая мешанина. Сначала создаём SSLKEYLOGFILE, а потом в настройках Wireshark почему-то не заполняем путь к этому логу, а указываем приватный ключ сервера. А это два разных способа, каждый для своего применения.
selkwind
17.05.2023 19:29Интересно, а как с помощью wireshark открыть и отфильтровать файл с дампом гигов этак на сорок? Его можно как-то по-умному отучить грузить весь файл в память?
aborouhin
17.05.2023 19:29+2Нельзя, есть рекомендации, как чуть-чуть улучшить ситуацию, но не кардинально, всё равно всё в памяти, да ещё и с многопоточностью плохо. Можно предварительно воспользоваться чем-то типа large-pcap-analyzer, чтобы предварительно отфильтровать дамп и уменьшить его до размера, который Wireshark проглотит.
Samhuawei
17.05.2023 19:29Для больших файлов имеет смысл выучить инструменты Linux типа grep и установить в винде WSL2.
Помню как коллега из одной из стран британского содружества грузил в Ворд исходный файл одного процесса размером в 4 гигабайта чтобы поправить последний байтик (убрать перенос строки) и весь банк ждал полчаса.
1dNDN
17.05.2023 19:29+2Чтобы разбирать кастомные протоколы, можно описать протокол диссектору. Он, конечно, старый и вроде не обновляется, но не бесполезный
catBasilio
17.05.2023 19:29+1Ничего не понятно на счет SSL.
Зачем переменную окружения указывать? кто и что в этот файл будет писать?
Откуда мы возьмем приватный ключ сервера? думаете сервера их в открытом доступе хранят?
Вообщем больше вопросов чем ответов.aborouhin
17.05.2023 19:29+3В целом в официальной справке Wireshark всё написано гораздо понятнее, без ошибок и применительно к актуальной версии :) В т.ч. и как работает магия с SSLKEYLOGFILE, как в случае его использования на самом деле надо настраивать программу и почему нам при этом не нужен приватный ключ.
Правда, как автор статьи собрался перехватывать трафик других пользователей и трафик почтового сервера, остаётся загадкой... но такое впечатление, что у автора сложилось... хм, несколько фрагментарное понимание о предмете. Фразы типа "протокол HTTP в программе Wireshark имеет 4 уровня по модели OSI" тоже показатель :)
slwjgglr
17.05.2023 19:29Наверняка многие в бытность писали любительские анализаторы сети для linux через sock_raw, af_packet и т.д. Какая интересно внутренняя кухня wireshark, насколько я знаю, там через bpf вроде организовано. Никто не делал на коленке аналог wireshark, с более или менее нормальным функционалом? С чем сталкивались? Сейчас понадобилась подобная утилитка, но менее увесистая. Или мож есть ли аналоги попроще, чуть мощнее tcpdump.
aborouhin
17.05.2023 19:29Какая интересно внутренняя кухня wireshark
Так он же опенсорсный, можете хоть форкнуть как основу для своего велосипеда :)
kfs
17.05.2023 19:29Ещё можно существенно сократить объем захватываемого трафика, настроив на этапе выбора интерфейса, в разделе Capture options, предварительный фильтр Capture Filter.
Dzzzen
17.05.2023 19:29Как автор за корявый перевод статьи 2012 года набрал плюсы, и еще инвайт получил? Похоже, все кто плюсовал, дальше первого абзаца не читали. Столько ляпов в этом переводе. Интересно, еще хотя бы один сайт использует SSL, а не TLS?
А по теме лучше подскажите - как в Wireshark анализировать HTTP2 и декодировать QUIC? Например, извлечь файлы, передаваемые по HTTP2?
402d
17.05.2023 19:29на этой неделе использовал Wireshark. Смотрю статья. Я это к чему, сама прога вещь хорошая. Качал с оф сайта, что надо покупать как-то не заметил. Для моих целей покопаться в логах bluetooth HCI всё получилось и так.
Johan_Palych
Качать из непонятной помойки версию Wireshark-win64-1.12.3.exe от 2015-01-07?
Все есть в официальных репах
WAR-S
Вспомнилось: "Сижу с тапка, компьютер взорвался, не качайте!!"
Exosphere
Заменила.