Основы Wireshark. Расшифровка и захват трафика

Привет, друг. В одном из прошлых материалов мы с тобой разбирались как данные передаются в сетях и как разные сетевые элементы взаимодействуют между собой. Если ты пропустил эту статью она ЗДЕСЬ. Всё это нам было нужно, чтобы подготовится к практической части изучения такой непростой темы как перехват и анализ трафика. И начнём мы изучать практическую часть с изучения утилиты Wireshark.

Основы Wireshark. Настройка, захват и расшифровка трафика

Возникает логичный вопрос: почему именно Wireshark? Всё просто, он обладает несколькими особенностями которые выделяют его среди конкурентов:

  • Интерфейс. Его интерфейс прост и понятен на столько на сколько это вообще возможно среди подобных утилит.
  • Гибкость в использовании. Позволяет анализировать трафик не только в реальном времени, но можно работать и с сохранёнными файлами захвата. Причем есть поддержка форматов огромного количества утилит.
  • Поддержка сетевых протоколов. Wireshark поддерживает огромное количество сетевых протоколов, от самых распространённых до довольно специфических. Причем этот список пополняется практически в каждом обновлении. Другими словами, вероятность что ты столкнёшься с не поддерживаемым протоколом ничтожно мала.
  • Мультисистемность. Wireshark работает на Windows, Linux, MacOS — это замечательно по определению.
  • Халява. Все любят халяву. Wireshark абсолютно бесплатен. Не смотря на это сообщество разработчиков очень активно, постоянно что-то допиливает, дорабатывает, обновляет. И это, кстати еще одни плюс.

Установка Wiredhark и первый запуск

Теперь давай запустим Wireshark и начнём с ним работать. Кстати в таких системах как Kali Linux и Parrot Security он уже предустановлен. А для винды и яблока его можно скачать на официальном сайте. Ну, а я буду использовать его на Parrot Security. Кстати есть мнение, в том числе разработчиков Wireshark, что использовать его на Windows — тот ещё тот мазохизм. Особенно для перехвата wi-fi трафика, во первых нужно устанавливать дополнительные драйвера — WinPcap. Но самая главная проблема в том, что режим мониторинга сетевого адаптера в Windows работает максимально криво.

Небольшое отступление. В этом гайде, в процессе использования Wireshark нас в первую очередь будет интересовать трафик передаваемый через беспроводные сети, причём желательно чужой трафик. Мы ведь тут собрались не для того чтоб неисправности в сети искать, правда? И ты правильно догадался (если догадался) что я плавно подвожу к режиму мониторинга wi-fi адаптера. Если ты забыл то он нужен чтобы видеть весь трафик, а не только предназначенный нашей сетевой карте. Включаем:
airmon-ng start wlan0

Ну а теперь точно можно запускать Wireshark. Это можно сделать из вкладки «Приложения», а можно из терминала:

sudo wireshark
wireshark

сразу после запуска, нам предложат выбрать сетевой интерфейс для запуска захвата. Можем так и сделать. Или, если мы хотим поработать с ранее захваченным трафиком, сохраненным в файл, можем нажать File->Open и выбрать нужный файл.

Выбираем интересующий нас сетевой интерфейс (wlan0mon) и дважды давим на него.

Интерфейс Wireshark

интерфейс wireshark

Перед нами появится основное окно программы с которым мы будем проводить больше всего времени. И сразу начнут перехватываться данные. Пока что нажмём «Стоп» (красный квадратик в левом верхнем углу) и порассматриваем интерфейс программы.

Пройдёмся по интерфейсу сверху вниз:

  • В самом верху, под главным меню, находится панель с кнопками — это Main Toolbar. Здесь находятся основные элементы управления программой — старт/стоп и настройки захвата, открытие/закрытие файлов захвата, навигация по пакетам и управлением размером текста;
  • Сразу под ней находится — Filter Toolbar — здесь мы будем вписывать фильтры и операторы, но об этом чуть позже;
  • Ещё ниже находится — Packet List . Это таблица в которой отображаются все пакеты из текущей сессии перехвата или из открытого файла перехвата;
  • Под ним — Packet Details — здесь отображаются сведения о выбранном пакете (выбирать пакеты можно в Packet List);
  • И самое нижнее окошко — Packet Bytes. Здесь показаны исходные данные пакета в необработанном виде, т.е. в том виде, в каком пакет передаётся по сети. (Сейчас бы начать тебе про интерпретацию пакетов рассказывать, но это в другой раз)

Настройка Wireshark

Общие параметры самого приложения WIreshark находятся во вкладке Edit->Preferences. Их можно настроить в зависимости от своих потребностей или предпочтений. Но я бы, на стадии знакомства с программой, не рекомендовал туда лезть. С опытом использования программы и работы с трафиком, понимание что тебе нужно подкрутить для удобства придет само. А потому просто кратко перечислим какие здесь есть разделы:

настройка wireshark
  • Appearance (Внешний вид). Грубо говоря здесь определяется внешний вид программы. Положение окон, расположение основных панелей, расположение полосы прокрутки и столбцов в панели Packet List, шрифты, а также цвета фона и шрифтов.
  • Capture (Перехват). В этом разделе можно настроить порядок перехвата пакетов. В том числе стандартный интерфейс для перехвата, параметры обновления панели Packet List в реальном времени.
  • Filter Expressions (Фильтрующие выражения). Здесь можно создавать фильтры сетевого трафика и управлять ими. Этот момент мы обсудим отдельно.
  • Name Resolution (Преобразование имен). В этом разделе активируются средства Wireshark, позволяющие преобразовывать адреса в имена, более удобные для понимания. В том числе адреса канального, сетевого и транспортного уровня. А также можно указывать максимальное количество параллельных запросов на преобразование имен.
  • Protocols (Протоколы). В этом разделе находятся параметры, влияющие на перехват и отображение различных пакетов, которые Wireshark может декодировать. Правда настраивать параметры можно далеко не для всех протоколов. Да и в большинстве случаев, без острой на то необходимости, менять здесь ничего не надо.
  • Statistics (Статистика). Название раздела говорит само за себя, здесь находятся параметры отображения и ведения статистики.
  • Advanced (Продвинутый). Параметры которые не вошли не в одну из перечисленных категорий, либо предназначены для более тонкой настройки функционала. Вот сюда точно лезть не нужно.

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

Перейдем в Edit->Preferences и во вкладке Appearance выберем раздел Columns. Здесь жмем на плюсик и добавляем такие колонки, с такими параметрами:

  • Title: Channel, Type: Custom, Fields: wlan_radio.channel — будет показывать нам канал в котором перехвачен пакет;
  • Title: Signal Strenght, Type: Custom, Fields: wlan_radio.signal_dbm — покажет мощность сигнала в канале в момент перехвата пакета.
настройка

Расшифровка беспроводного трафика

Когда мы запустили захват трафика на интерфейсе wlan0mon ты наверняка обратил внимание, что в Packet List отображается всё что угодно, кроме того что нужно. А именно из полезной информации там можно найти только название сети (SSID) и MAC адреса (на самом деле кое-что ещё есть), а какой-нибудь интересной информации нет, от слова «совсем». На самом деле она есть, просто она зашифрована. Почему так? Ответ банален — потому что трафик шифруется. Соответственно надо его расшифровать. А для этого надо понимать некоторые процессы которые происходят в wi-fi сетях.

При передаче данных по wi-fi трафик шифруется с использованием ключа PTK (Pairwise Transient Key). При этом этот ключ динамичный, то есть создаётся заново для каждого нового соединения. А соответственно трафик для каждого соединения в одной и той же сети зашифрован разными PTK. Когда какой-нибудь клиент переподключается, то и PTK тоже меняется. Что бы этот самый PTK узнать необходимо перехватить четырёх этапное рукопожатие. Ну и знать пароль, имя (SSID) wi-fi сети и канал на котором она работает.

Перехват handshake

Как узнать пароль wi-fi сети я статью уже писал, поэтому примем за аксиому что он у тебя есть. А SSID и канал мы и так видим в Wireshark, вопрос остаётся только в PTK. Соответственно нужно перехватить рукопожатие и не какое-нибудь, а именно то которое произошло между интересующим нас клиентом и точкой доступа непосредственно перед обменом интересующей нас информацией. Наш адаптер уже в режиме мониторинга, и необходимые нам данные мы видим в Packet Details при нажатии на пакет из интересующей нас сети:

параметры сети

Можем сразу открываем терминал и запускаем перехват рукопожатия:

sudo airodump-ng wlan0mon --channel 11 --write 123

ждать повторных подключений мы не будем, поэтому помогаем отключится всем устройствам в сети:

aireplay-ng --deauth 100 -a 3c:15:c2:f0:b8:4c wlan0mon

и спустя небольшой промежуток времени видим в правом верхнем углу нашего терминала появилась надпись: WPA handshake

handshake

это означает, что рукопожатие мы получили, а значит успех близок. Вернемся в Wireshark.

В Filter Toolbar нужно написать:

eapol
wireshark

Это необходимо что бы убедится что рукопожатие действительно у нас, если это так — можем продолжать. Теперь сделаем то, что я чуть раньше предупреждал не делать, а именно поменяем настройки протоколов. Идём Edit-> Preferences и выбираем вкладку Protocols. В ней нам надо найти IEEE 802.11 и поставить галку Enable decryption после чего нажать Edit

настройка протокола

в появившемся окне жмём «+» и там где Key type выбрать wpa-pwd. А там где Key нужно ввести через двоеточие «пароль:имя сети». Потом нажать ОК и сохранить изменения в настройках протокола.

key

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

Анализ трафика в Wireshark

В большинстве случаев (почти всегда) анализ перехваченного трафика происходит в оффлайн-режиме. Т.е. ты сначала перехватываешь трафик, потом сохраняешь его в файл перехвата (File->Save). Потом опять перехватываешь и опять сохраняешь, потом объединяешь все файлы перехвата в один (File->Merge). И только потом, в комфортных условиях, анализируешь весь трафик скопом. И, кстати, эти функции, с сохранением и объединением, ты будешь использовать гораздо чаще чем ты думаешь. С сохранением, потому что получить с первого раза сведения которые тебе нужны удаётся далеко не всегда. Да и если анализировать трафик в онлайне — по любому что-нибудь пропустишь. А с объединением потому, что когда у тебя есть несколько файлов перехвата — разбирать их по отдельности — очень глупая и трудоёмкая идея.

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

  1. Поиск по пакетам. При нажатии комбинации клавиш Ctrl+F открывается панель поиска. Там есть несколько вариантов поиска, но на данном этапе тебе достаточно будет использовать Display filter который позволяет создать фильтр, чтобы найти только те пакеты, которые отвечают заданному в нем выражению и String — осуществляет поиск в строках по указанным символам (поиск вперед Ctrl+N, поиск назад Ctrl+B;
  2. Отметка пакетов. Очень часто бывает что ты нашел нужный пакет, но есть необходимость вернуться к нему позже, для этого этот пакет можно отметить, нажми правой кнопкой на нужный пакет в Packet List и выбери Mark Packet или нажми Ctrl+M, отмечать можно любое количество пактов, а чтобы перемещаться между отмеченными пакетами используются комбинации клавиш Shift+Ctrl+N — следующий и Shift+Ctrl+B — предыдущий.
  3. Фильтры. Фильтр — это выражение, в котором задаются критерии для включения или исключения пакетов из анализа. В Wireshark выделяют два вида фильтров: фильтры перехвата и фильтры отображения. Мы рассмотрим некоторые примеры применения фильтров, но про сами фильтры я сделаю отдельную статью. Потому, что там надо будет изучить довольно большой объём информации: логику применения, синтаксис, операторы. Короче это отдельная большая тема.

Практика анализа трафика беспроводных сетей

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

  • Управляемый режим (Managed mode). Применяется в том случае, если клиент беспроводной сети подключается непосредственной к точке беспроводного доступа. В подобных случаях программный драйвер, связанный с адаптером беспроводной связи, использует точку беспроводного доступа для управления всем процессом обмена данными по беспроводной сети.
  • Режим прямого подключения (Ad-hoc mode). Применяется в том случае, если организована беспроводная сеть, в которой устройства подключаются непосредственно друг к другу. В этом режиме два клиента беспроводной сети, которым требуется обмениваться данными друг с другом, разделяют обязанности, которые обычно возлагаются на точку беспроводного доступа.
  • Ведущий режим (Master mode). Некоторые адаптеры беспроводной связи поддерживают также ведущий режим. В этом режиме адаптеру беспроводной связи разрешается работать вместе со специальным программным драйвером, чтобы компьютер, на котором установлен этот адаптер, действовал в качестве точки беспроводного доступа для других устройств.
  • Режим мониторинга, его ещё называю режим контроля (Monitor mode). Это тот самый режим который мы будем использовать для перехвата и анализа пакетов. Позволяет прослушивать пакеты, распространяемые в эфире. Для полноценного перехвата и анализа пакетов адаптер вместе с программным драйвером должен поддерживать режим текущего контроля, называемый также режимом RFMON, т.е. режимом радиочастотного контроля.

Схематично принцип действия режимов можно нарисовать так:

режимы сетевого адаптера

Фильтры Wireshark

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

Фильтрация по идентификатору

Wireshark собирает данные всех сетей находящихся в радиусе действия сетевого адаптера, поэтому наиболее логично первоначально отфильтровать трафик конкретной сети, которая нас интересует. Сделать это можно по имени беспроводной сети (SSID):

wlan.ssid == имя_сети 

хотя наиболее корректно будет отфильтровать по bssid. BSSID — это идентификатор базового набора услуг (Basic Service Set Identifier). Он присваивается каждой точке и идентифицирует её, при этом он посылается в каждом беспроводном пакете управления и пакете данных из передающей точки доступа. BSSID записывается в заголовок пакета и это и есть MAC адрес нашей точки доступа. Посмотрев его в заголовке, можем создать фильтр чтобы видеть трафик проходящий только через нужную точку доступа:

wlan.bssid == 3c:15:c2:f0:b8:4c
фильтры wireshark
Wireshark

Часто используемые фильтры Wireshark

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

wlan_radio.channel == 10

Используя фильтр:

arp
arp

можно увидеть трафик передаваемый по протоколу ARP, это даст возможность понять какие устройства в данный момент подключены к локальной сети, увидеть их MAC и IP адреса.

Также довольно часто используются такие фильтры:

dns

покажет отправленные dns-запросы, так можно узнать какие сайты посещал пользователь и какими онлайн-ресурсами пользовался.

ip.addr == 192.168.183.129

отфильтрует трафик связанный с конкретным IP (где он был получателем или отправителем).

tcp

покажет tcp трафик, по такому же принципу можно отфильтровать трафик по любому другому протоколу, например udp или icmp.

Если мы видим, что соединение с сайтом не защищено т.е. происходит по протоколу http, это открывает перед нами большие возможности. Мы можем увидеть передаваемые данные, в том числе данные авторизации и данные форм, загружаемые и открываемые файлы, передаваемые и установленные cookie,

httpотфильтровать http трафик
http.host == «адрес»показать запросы к определённому сайту
http.cookiehttp-запросы в которых передавались cookie
http.set_cookieзапросы в которых были установлены cookie в браузер
http.content_type contains «image»поиск любых переданных изображений, можно конкретизировать заменив «image» на «jpeg» или другие.
http.authorizationпоиск запросов авторизации
http.request.uri contains «zip»поиск определённого типа файлов. zip — заменить на нужное

Кстати, что бы сохранить какой-нибудь найденный файл надо нажать на него правой кнопкой мыши в окне Packet Details и выбрать Export Packet Bytes и указать место куда его нужно сохранить:

Export Packet Bytes

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

Твой Pulse.