atesting.ru Новости Как пользоваться wireshark для анализа трафика

Как пользоваться wireshark для анализа трафика

Особенности приложения

Чем, собственно, хорош Wireshark, и что он умеет?

  • Wireshark захватывает сетевые пакеты на ходу, собирая информацию с беспроводных и проводных интерфейсов или из файла с соответствующими данными. Поддерживаются интерфейсы: Ethernet, IEEE 802.11, PPP и даже виртуальные интерфейсы, существующие только в локальной сети.
  • Полученные сетевые пакеты можно сортировать, используя заданные правила, коих в утилите великое множество.
  • В интерфейсе программы есть четкое разграничение данных по протоколам. Например, FTP, HTTP или DNS. Все протоколы визуально подчеркиваются, чтобы было легче ориентироваться при поиске.
  • Wireshark умеет собирать сетевые пакеты, передаваемые в ходе VoIP-звонков.
  • Также эта программа умеет расшифровывать трафик HTTPS, WEP, WPA, если имеются ключи.
  • Wireshark собирает статистику оказываемой нагрузки на сетевое подключение.
  • А еще можно получить дополнительную информацию о трафике. Это касается содержимого пакетов разных уровней и времени, которое уходит на отправку и получение данных.

Использование фильтров в WireShark — инструкция

Чтобы попробовать, как работает программа с фильтрами, нужно в поле Filter ввести определённую команду. Например, такой набор — ip.dst == 172.217.23.131 — покажет все летящие пакеты на сайт «Гугл». Чтобы просмотреть весь трафик — и входящий и исходящий, — можно объединить две формулы — ip.dst == 172.217.23.131 || ip.src == 172.217.23.131. Таким образом, получилось использовать в одной строке сразу два условия.

Можно использовать и другие условия, например ip.ttl < 10. Данная команда выведет все пакеты с длительностью жизни меньше 10. Чтобы выбрать данные по их размеру, можно применить такой подход — http.content_length > 5000.

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

Когда мы запустили захват трафика на интерфейсе wlan0mon ты наверняка обратил внимание, что в Packet List отображается всё что угодно кроме того что нужно, а именно из полезной информации там можно найти только название сети (SSID) и MAC адреса (на самом деле кое-что ещё есть), а какой-нибудь интересной информации нет, от слова “совсем”. На самом деле она есть, просто она зашифрована

Почему так? Ответ банален – потому что трафик шифруется. Соответственно надо его расшифровать, а для этого надо понимать некоторые процессы которые происходят в wi-fi сетях.

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

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

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

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

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

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

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

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

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

Внешний вид

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

Блок Capture содержит список доступных для захвата сетевых интерфейсов. При выборе, например, eth0 и нажатии кнопки Start запустится процесс перехвата.

Окно с перехватываемыми данными также разделено логически на несколько частей. Сверху находится панель управления с различными элементами. Следом за ним идёт список пакетов. Он представлен в виде таблицы. Здесь можно увидеть порядковый номер пакета, время его перехвата, адрес отправления и получения. Также можно изъять данные об используемых протоколах, длине и других полезных сведений.

Ниже списка расположено окно с содержимым технических данных выбранного пакета. А ещё ниже имеется отображение в шестнадцатеричном виде.

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

Фильтры захвата и отображения

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

Давайте начнем с установки Wireshark. Приложение доступно в виде бинарных пакетов для всех основных дистрибутивов, поэтому вы можете использовать ваш любимый менеджер пакетов: sudo apt-get install wireshark в Debian или Ubuntu, emerge wireshark в Gentoo или yum install wireshark в Red Hat или CentOS.

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

sudo wireshark

Вы можете начать захват трафика, перейдя на левую панель окна Wireshark и нажав кнопку «Capture/Interfaces«. Выберите интерфейс, который «направлен в сеть» (например, eth1) и нажмите кнопку «Start«, при этом Wireshark начнет исследование всех пакетов, передающихся в сети.

Теперь перейдите во второе окно терминала и установите обычную сессию FTP. Введите имя пользователя и пароль, выполните несколько команд FTP, после чего закройте сессию. Вернитесь к окну Wireshark, в котором вы должны увидеть множество пакетов, переданных по сети с момента начала захвата. Нажмите на кнопку «Stop Capture» (или используйте сочетание клавиш Ctrl+E); после этого вы можете исследовать полученный трафик.

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

356     101.676753      10.100.1.1      192.168.0.4     FTP     86      Response: 220 (vsFTPd 1.1.3)
360     104.546659      192.168.0.4     10.100.1.1      FTP     77      Request: USER wazi
362     104.594520      10.100.1.1      192.168.0.4     FTP     100     Response: 331 Please specify the password.
366     106.530150      192.168.0.4     10.100.1.1      FTP     77      Request: PASS mytest
371     108.922240      10.100.1.1      192.168.0.4     FTP     88      Response: 530 Login incorrect.

Если результат этого исследования не склонил ваших коллег к отказу от использования FTP и переходу на OpenSSH, они безнадежны.

На этом заканчивается первая часть этой статьи, но если поднятая тема вас заинтересовала, не пропустите вторую часть

Example traffic

One ICMP Ping Request and response session from Station(STA1 to station(STA2) via Access point(AP)ICMP ECHO request

  • ICMP Echo request (802.11 data packet with source STA1, Destination STA2, To DS bit set) This packet is transmitted from STA1 and received by AP

  • ACK(802.11 control packet, dest STA1) This packet is transmitted by AP and recieved by STA1

  • ICMP Echo request (802.11 data packet with source STA1, Destination STA2, From DS bit set) This packet is transmitted by AP and received by STA2.

  • ACK(802.11 control packet Dest AP) This packet is sent to AP by STA2 to acknowledge reciept of the Echo request packet.

ICMP ECHO Response

  • ICMP Echo response(802.11 data packet with source STA2, Destination STA1, To DS bit set) This packet is transmitted from STA2 and received by AP

  • ACK(802.11 control packet, dest STA2) This packet is transmitted by AP and recieved by STA2

  • ICMP Echo response (802.11 data packet with source STA2, Destination STA1, From DS bit set) This packet is transmitted by AP and received by STA1.

  • ACK (802.11 control packet Dest AP) This packet is sent to AP by STA1 to acknowledge reciept of the Echo response packet.

XXX — Add example traffic here (as Wireshark screenshot).

NDIS-драйвер и интерфейсы WiFi в Wireshark

Для обеспечения этого взаимодействия Acrylic устанавливает на компьютер собственную библиотеку airpcap.dll, эмулирующую библиотеку оригинальной карты AirPcap. Когда Wireshark загружает соответствующую системную библиотеку AirPcap от Acrylic, библиотека возвращает фиктивный список установленных устройств AirPcap, по одной записи для каждой внутренней карты Wi-Fi или внешнего USB-адаптера Wi-Fi.

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

Нажав на кнопку «Настройки беспроводной сети» (“Wireless settings”), можно выбрать дополнительные параметры, такие как канал Wi-Fi для мониторинга и включить проверку FCS. FCS — это проверочная последовательность кадров (Frame Check Sequence), позволяющая определить целостность пакетов Wi-Fi и отбросить некорректно переданные пакеты.

Internal

Some command line tools are shipped together with Wireshark. These tools are useful to work with capture files.

  • capinfos is a program that reads a saved capture file and returns any or all of several statistics about that file

  • dumpcap a small program whose only purpose is to capture network traffic, while retaining advanced features like capturing to multiple files (since version 0.99.0). Dumpcap is the engine under the Wireshark/tshark hood. For long-term capturing, this is the tool you want.

  • editcap edit and/or translate the format of capture files

  • mergecap merges multiple capture files into one

  • randpkt random packet generator

  • rawshark dump and analyze raw libpcap data

  • reordercap reorder input file by timestamp into output file

  • text2pcap generates a capture file from an ASCII hexdump of packets

  • tshark is the command-line equivalent of Wireshark, similar in many respects to tcpdump/WinDump but with many more features. Learn it, use it, love it.

Захват Wi-Fi трафика в Airodump-ng

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

Смотрим имена беспроводных интерфейсов:

iw dev

Переводим ИНТЕРФЕЙС в режим монитора командами вида:

sudo ip link set ИНТЕРФЕЙС down
sudo iw ИНТЕРФЕЙС set monitor control
sudo ip link set ИНТЕРФЕЙС up

Запускаем airodump-ng командой вида:

sudo airodump-ng ИНТЕРФЕЙС

Например, я хочу захватить и расшифровать трафик для Точки Доступа Paangoon_2G, которая работает на 9 канале.

Тогда мне нужно перезапустить airodump-ng командой вида:

sudo airodump-ng ИНТЕРФЕЙС --channel КАНАЛ --write ИМЯ_ФАЙЛА

Надпись WPA handshake говорит о том, что было захвачено четырёх этапное рукопожатие. Это означает что:

  • теперь мы сможем расшифровать Wi-Fi данные (если у нас есть ключ от Wi-Fi сети)
  • мы сможем расшифровать данные только для конкретного клиента (с которым было совершено рукопожатие)
  • мы сможем расшифровать данные, которые были отправлены только после этого захваченного рукопожатия

Возможности программы

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

С помощью программы Wireshark Вы можете контролировать пакеты, проходящие по протоколу НТТР. Приведем пример вычисления имени пользователя и пароля при входе в почту. Для этого необходимо предварительно произвести процедуру входа в почтовый ящик и запуск программы в режиме захвата пакетов сообщений. После этого для удобства желательно произвести сортировку по протоколам при помощи нажатия на колонку Protocol. Далее, выбрав любой пакет, у которого установлено значение Protocol — НТТР, кликнуть правую кнопку мыши, в контекстном меню нажать Conversation filter>IP, тем самым выбрав фильтрацию списка пакетов только данного перечня адресов отправителя и получателя:

Далее возможно отфильтровать пакеты сообщений, выбрав только пакеты протокола НТТР – для этого выберем любой пакет протокола НТТР и кликнем правую кнопку мыши и в контекстном меню выберем Conversation filter>Ethernet. Теперь у нас в верхнем окне остались только пакеты протокола НТТР. Для оптимизации поиска нужного пакета, воспользуемся пунктом главного меню Edit>Find Packet:

В появившемся диалоговом окне выбираем Find by string и указываем название строки с адресом страницы почтового ящика:

С помощью системы поиска проверяем пакеты, соответствующие адресации и в дереве протоколов находим в ветви Line-based text data значения Login, Domain, Password.

Wireshark предоставляет возможность пользователю сохранять файлы данных (изображения, CSS и др.) на жесткий диск из просмотренных ранее страниц в Интернете. Для этого необходимо в главном меню программы выбрать File>Export>Objects>HTTP:

В появившемся списке НТТР object list выбираем необходимый файл и нажимаем Save As:

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

Фильтры отображения

Примеры:

tcp.port eq 25 or icmp

Показывать только трафик из локальной сети (192.168.x.x) между рабочими станциями и серверами без интернет-трафика:

ip.src==192.168.0.0/16 and ip.dst==192.168.0.0/16
tcp.window_size == 0 && tcp.flags.reset != 1

Показывать только HTTP-запросы, в которых символы в конце строки запроса совпадают со строкой «gl=se»:

http.request.uri matches "gl=se$"
Примечание: Символ $ является пунктуационным символом PCRE, который обозначает окончание строки, а в данном случае окончание поля http.request.uri.

Фильтрация по протоколу (т.е. SIP) и фильтрация нежелательных IP-адресов:

ip.src != xxx.xxx.xxx.xxx && ip.dst != xxx.xxx.xxx.xxx && sip

Использование фильтров в Wireshark

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

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

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

Когда я говорю «фильтры», я имею в виду Фильтры Пакетов Беркли (Berkeley Packet Filters (BPF)). На самом деле BPF является микроязыком программирования (содержащим мнемоники на ассемблере!), выражения которого компилируются и выполняются в отношении пакетов, обрабатываемых такими программами, как tcpdump и Wireshark. Фильтры просто необходимы в том случае, когда вам хочется отделить небольшую часть пакетов из сотен тысяч пакетов, передающихся по сети с предельной скоростью 100 Мбит/с

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

Фильтры в Wireshark достаточно просто использовать. Вам необходимо знать только названия полей для каждого протокола, такие, как http, icmp и ftp

Например, если вы хотите, чтобы были показаны только пакеты ICMP, вы можете просто написать icmp в строке фильтра в главном окне Wireshark. Если вы хотите выделить все пакеты, идущие в обоих направлениях относительно узла с адресом, к примеру, 10.100.1.1, выражение фильтра будет записано в форме ip.dst == 10.100.1.1 || ip.src == 10.100.1.1, что расшифровывается как указание показывать только те пакеты, поле адреса назначения (ip.dst) или (||) поле адреса источника (ip.src) IP-протокола для которых соответствует (==) 10.100.1.1.

Development

  • CreatingPatches: Tips on creating patches before submitting them

  • /SubmittingPatches: Introduction to using Git & Gerrit to submit and review patches

  • /SecureProgramming How to write more secure code, e.g. replace insecure ANSI-C calls by more secure ones

  • /CommonProblems: Some common problems while developing Wireshark

  • /Tips: Some selected wisdom to ease development/debugging

  • /FilenameEncoding: the various Unicode and code page encodings of filenames in GLib

  • Lua: Extending Wireshark with the extensible extension language

  • /LibpcapFileFormat A libpcap file format description

  • /Canary Finding and fixing memory over- and under-runs with canaries

  • Generic dissector (http://wsgd.free.fr/) : display clearly your data inside wireshark without any code

  • pyreshark: A Wireshark plugin providing a simple interface for writing dissectors in Python.

  • /Support_library_version_tracking A page for tracking what OS distributions came with what versions of various libraries with which Wireshark is built

  • /WindowsLibs Describes how Windows libraries are built and the procedure for updating those.

  • /StringHandling How string handling should work in Wireshark (ie encoding support, how to deal with invalid strings, etc)

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

В большинстве случаев (почти всегда) анализ перехваченного трафика происходит в оффлайн-режиме т.е. ты сначала перехватываешь трафик, потом сохраняешь его в файл перехвата (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 выделяют два вида фильтров: фильтры перехвата и фильтры отображения. Мы рассмотрим некоторые примеры применения фильтров, но про сами фильтры я сделаю отдельную статью потому, что там надо будет изучить довольно большой объём информации: логику применения, синтаксис, операторы. Короче это отдельная большая тема.

Working with large capture files

If you have a large capture file e.g. > 100MB, Wireshark will become slow while loading, filtering and alike actions.

There are some things you can do, but unfortunately this will remove some decoding comfort:

  • Disable Coloring Rules: this will significantly increase performance. To disable these rules, use View->Colorize Packet List. You could also delete all coloring rules or rename the coloring rules file.

  • Disable Network Layer (hostname) DNS lookups under View->Name Resolution can help speed things up

  • On MacOS X, disabling Transport Layer lookups under View->Name Resolution can help speed things up.

Disabling some preference settings may save you a lot of memory consumption. Be aware that these features are probably required to detect the packets properly that you want to capture. So maybe you miss packets that are missinterpreted.

You can check if that’s the case, by loading a capture file, setting a display filter of the packet types in question and see if the number of displayed packets are the same with and without these settings. You may need to reload the file after changing the settings (and don’t forget to press the «Save» button :-).

Some good preference setting candidates:

  • IP/Reassembled fragmented IP datagrams
  • TCP/Allow subdissectors to reassemble TCP streams

Display system overview

If the above hints didn’t help, you may need to advance your machine. To do this, the following gives some insights which parts are worth looking at.

A simplified look at the display system:

harddisk -> packet dissection -> display filter / coloring rule -> display

  • harddisk — uncritical
  • packet dissection — fine tune the Preferences
  • display filter
  • coloring rule
  • display — uncritical

The things that may help: Add more physical RAM and use a faster CPU (multi core CPU’s won’t help a lot, the dissection is done in a single task)

Сам процесс работы с программой довольно прост

Для запуска перехвата сетевых пакетов нужно просто зайти в главное меню, а именно Menu/Capture Options, а затем в поле Interface выбрать необходимый интерфейс и нажать кнопку Start.

Вот собственно и все. 

Естественно, можно воспользоваться и дополнительными настройками, представленными в этом окне.

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

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

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

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

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

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


Страница программы:

Расшифровка сессий SSL/TLS

Один из способов расшифровки сессий SSL/TLS — использовать закрытый ключ с сервера, к которому подключен клиент.

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

1. Настройка переменной среды

Linux / Mac

export SSLKEYLOGFILE=~/sslkeylogfile.log

Windows

На вкладке System Properties | Advanced нажмите кнопку Environment Variables и добавьте имя переменной (SSLKEYLOGFILE), а в качестве значения — путь к файлу.

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

Из выпадающего меню выберите Edit | Preferences | Protocols | SSL | (Pre)-Master-Secret Log Filename — Browse, указав файл, который вы указали в переменную среды.

Начинайте захват трафика в локальной системе.

3. Перезапуск Firefox или Chrome

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

Взгляните на ранее запущенную сессию Wireshark. Вы должны увидеть что-то похожее на скриншот внизу с расшифрованными сессиями. Расшифрованные пакеты — на вкладке в нижней панели.

Другой способ просмотра сеанса — через выпадающее меню Analysis | Follow | Stream | SSL. Если сеанс успешно расшифрован, вы увидите опцию для SSL.

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

Ещё один вариант выхода на базовый HTTP-трафика — использовать инструмент Burp Suite с загруженным сертификатом CA в браузере. Материал подготовлен каналом https://t.me/it_ha. В этом случае прокси расшифровывает соединение на стороне клиента, а затем устанавливает новый сеанс SSL/TLS на сервере. Есть много способов проведения такой MiTM-атаки на себя, это два самых простых.

Как захватить PMKID в Windows

Подключите ваш Wi-Fi адаптер.

Запустите от администратора Wireshark:

Теперь найдите меню Capture и выберите там Options:

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

Поэтому будем исходить из того, что у вас также это сработало.

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

После того, как будут захвачены данные, отфильтровать нужный фрейм можно прямо в Wireshark, для этого используйте фильтр (подробности по работе с беспроводными фреймами смотрите в статье «Как извлечь рукопожатия из файла захвата с несколькими рукопожатиями»):

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || (eapol && wlan.rsn.ie.pmkid))

После извлечения PMKID, его можно начать брут-форсить прямо в Windows, в Aircrack-ng (как показано здесь) или в Hashcat (как показано здесь).

Особенности

Wireshark — это программа захвата данных, которая «понимает» структуру (инкапсуляция) различных сетевых протоколов. Он может анализировать и отображать поля вместе с их значениями, указанными в разных сетевых протоколах. Wireshark использует pcap для захвата пакетов, поэтому он может захватывать пакеты только для типов сетей, поддерживаемых pcap.
Данные могут быть записаны «из провода» из живого сетевого соединения или считаны из файла уже захваченных пакетов.

  • Живые данные могут считываться из разных типов сетей, включая Ethernet, IEEE 802.11, Протокол точка-точка PPP и loopback.
  • Захваченные сетевые данные можно просматривать через GUI] или через терминал командной строки версия утилиты TShark.
  • Захваченные файлы могут быть программно отредактированы или преобразованы с помощью командной строки в программу «editcap».
  • Отображение данных может быть уточнено с помощью фильтра отображения.
  • Plug-ins может быть создан для обработки новых протоколов.
  • VoIP могут быть обнаружены вызовы в захваченном трафике. Если кодируется в совместимой кодировке, поток мультимедиа можно даже воспроизводить. Raw USB может быть захвачен.
  • Беспроводные соединения также могут быть отфильтрованы, пока они проходят через контролируемый Ethernet.
  • Можно установить различные настройки, таймеры и фильтры, которые гарантируют, что будет отображаться только инициированный трафик.

Расшифровка WPA трафика в Wireshark

Начнём с теории, чтобы понять, почему процесс расшифровки Wi-Fi трафика в Wireshark требует некоторых усилий и почему нельзя просто расшифровать любой захваченный Wi-Fi трафик даже если есть пароль от Точки Доступа.

При передаче по Wi-Fi трафик шифруется с использованием PTK (Pairwise transient key — можно перевести как Парный переходной ключ). При этом PTK является динамичным, то есть создаётся заново для каждого нового соединения. Таким образом получается, что Wi-Fi трафик для каждого соединения в одной и той же Точке Доступа зашифрован разными PTK, причём даже для одного Клиента после переподключения PTK меняется. Для вычисления PTK необходимы данные из четырёх этапного рукопожатия, а также пароль от Wi-Fi сети (на самом деле нужна ещё и другая информация, например имя (SSID) сети, но получение этих данных не является проблемой).

Главное, что нужно понять: для расшифровки Wi-Fi трафика необходимо четырёх этапное рукопожатие. Причём не любое, а именно то, которое произошло для передачи того трафика, который нужно расшифровать. Но для использования захваченного рукопожатия необходим пароль от Wi-Fi сети.

Итак, чтобы расшифровать Wi-Fi трафик нужны:

1) рукопожатие, произошедшее между Клиентом и Точкой доступа непосредственно перед обменом расшифровываемой информацией

2) пароль для подключения к Точке Доступа

Далее будет показано два примера захвата Wi-Fi трафика и его расшифровки. Первый захват данных выполнен с помощью Airodump-ng, а затем беспроводной трафик будет расшифрован в Wireshark. Во втором примере данные будут захвачены и расшифрованы с использованием только Wireshark.