Как извлечь рукопожатия из файла захвата с несколькими рукопожатиями

В одном файле захвата сетевых данных (формат pcap) может содержаться более чем одно рукопожатие (handshake). Такое можно происходить, например, при продолжительной работе Airodump-ng, в результате чего она может перехватить несколько рукопожатий от одной или разных точек доступа. Рукопожатия из файлов, захваченных в «шумных» условиях нуждаются в дополнительной проверке и очистке.

Несколько рукопожатий в одном файле можно получить искусственно, просто объединяя их в один файл. К примеру, программа Besside-ng (автоматически захватывает рукопожатия от всех дочек доступа в пределах досягаемости, для этого проводит атаку деаутентификация) создаёт единый файл .cap для всех захваченных пакетов рукопожатий.

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

Как разделить рукопожатия по разным файлам

Важно понимать разницу между файлом, в котором просто слито несколько рукопожатий, и файлом захвата в шумной среде. Пример анализа файла первого типа (с помощью aircrack-ng):

aircrack-ng ИМЯ_ФАЙЛА.cap

Пример файла второго типа:

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

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

eapol

Ручное разбитие файлов рукопожатий с помощью Wireshark

Если вы работаете с файлом из слитых рукопожатий, то с ним не должно быть особых проблем. Открываем файл в Wireshark:

Можно использовать фильтр

wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol

Но он может оказаться и не нужным, поскольку и без того имеются только нужные пакеты.

Чтобы отфильтровать пакеты для определённой точки доступа, укажите её BSSID со следующим фильтром:

wlan.addr==BSSID

Например:

wlan.addr==28:28:5D:6C:16:24

Либо так:

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr==28:28:5D:6C:16:24

Теперь с помощью CTRL+m выделите нужные пакеты:

И в меню File выберите Export Specified Packets:

Введите имя файла и поставьте переключатель на Marked packets only:

Проверяем наш файл:

Всё отлично. Можно сделать ещё одну проверку с помощью coWPAtty, запустив команду вида:

cowpatty -r ФАЙЛ -s ИМЯ_СЕТИ -c

Например, в моём случае:

cowpatty -r ZyXEL_59.pcap -s ZyXEL_59 -c

Фраза «Collected all necessary data to mount crack against WPA2/PSK passphrase» означает, что собраны все необходимые данные для взлома пароля.

Для вычленения рукопожатия из захвата, выполненного в шумных условиях, необходимо приложить некоторые усилия. Начинам с фильтрации (замените 84:C9:B2:52:F6:37 на BSSID интересующей вас сети):

(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr==84:C9:B2:52:F6:37

Хендшейк подходит для взлома пароля если:

  • обязательно включает в себя второй элемент (M2), а также третий (M3) (гарантирует, что было сделано подключение к сети) или вместо третьего элемента содержит первый элемент (M1) (рукопожатие подходит для взлома пароля, но нет гарантий, что было выполнено подключение и что вообще был введён верный пароль). Лучше, если удалось захватить все четыре элемента;
  • элементы рукопожатия должны следовать в нужном порядке;
  • между ними не должно быть слишком большого интервала времени (измеряется миллисекундами и микросекундами).

Смотрим следующий пример.

Первый набор фреймов EAPOL (выделен чёрным) – не соблюдено правило, что кроме второго должно быть третье или первое сообщение.

Второй набор (красный) – только одно сообщение.

Третий набор (жёлтый) – нет третьего или первого сообщения.

Четвёртый набор (оранжевый) – нет второго сообщения.

Пятый набор (зелёный) – подходит, поскольку имеется второе и первое сообщение. Время между сообщениями кажется приемлемым.

Выделяем и сохраняем нужные фреймы (я также выделил фрейм Beacon):

Наш файл проходит проверки:

Выделение рукопожатия с помощью tshark

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

tshark -r ИСХОДНЫЙ_ФАЙЛ.cap -R "(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr == BSSID" -2 -w ИТОГОВЫЙ_ФАЙЛ.cap -F pcap

В ней нужно вставить свои значения для:

  • ИСХОДНЫЙ_ФАЙЛ.cap – файл с несколькими хендшейками
  • BSSID – MAC-адрес интересующей точки доступа
  • ИТОГОВЫЙ_ФАЙЛ.cap – файл, куда будет сохранено выделенное рукопожатие

Пример реальной команды:

tshark -r wpa.cap -R "(wlan.fc.type_subtype == 0x08 || wlan.fc.type_subtype == 0x05 || eapol) && wlan.addr == 84:C9:B2:0B:79:94" -2 -w $ESSID.cap -F pcap -w wifi55.cap

Решение ошибки Unsupported file format (not a pcap or IVs file). Read 0 packets. No networks found, exiting.

У некоторых пользователей при использовании tshark, а затем последующем открытии полученного файла в aircrack-ng возникает ошибка:

aircrack-ng MiAl.cap
Opening MiAl.cap
Unsupported file format (not a pcap or IVs file).
Read 0 packets.
No networks found, exiting.
Quitting aircrack-ng...

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

Скрипт для разделения рукопожатий

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

Если вы разделяете на отдельные хендшейки файл захвата, полученный в шумных условиях (например, во время длительной работы Airodump-ng), то скрипт будет работать так:

  • если для какой-либо точки доступа не найдено ни одного рабочего хендшейка, то все данные для неё будут отброшены (не будет создаваться файл вывода)
  • если для точки доступа найдено хотя бы одно рабочее рукопожатие, то все фреймы EAPOL будут сохранены в один файл.

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

Хотя aircrack-ng вроде бы правильно находит нужный хендшейк, но с cap2hccapx (из набора hashcat-utils, используется для конвертации в формат хеша Hashcat) замечены проблемы, если предварительно не почищены ненужные фреймы EAPOL от непригодных хендшейков.

Создайте файл handshakes_extractor.sh:

gedit handshakes_extractor.sh

И скопируйте туда:

Для запуска укажите .(p)cap файл, из которого нужно извлечь рукопожатия.

Пример запуска:

bash handshakes_extractor.sh wpa.cap

Пример работы программы:

Если найдено хотя бы одно рабочее рукопожатие, то в текущей директории создаётся папка вида 2018-04-13-155818, в которую в виде отдельных файлов сохраняются хендшейки для всех точек доступа.

Выводится информация об имени файла с сохранёнными фреймами, а также информация о самих сохранённых фреймах.

Когда не нужно разделять файл на отдельные рукопожатия

Вам необязательно предварительно разделять файл на отдельные хендшейки, если вы собираетесь использовать программу aircrack-ng. Для выбора цели вы можете воспользоваться опциями:

-e <essid> : выбор цели: идентификатор сети
-b <bssid> : выбор цели: MAC точки доступа

Программа cap2hccapx запишет все хеши (для взлома в Hashcat) в один файл .hccapx.

Запускается так:

cap2hccapx.bin ИСХОДНЫЙ_ФАЙЛ.cap ХЕШИ.hccapx

Например:

cap2hccapx.bin wpa.cap all.hccapx

Чтобы записать хеш только для одной ТД, укажите её ESSID:

cap2hccapx.bin ИСХОДНЫЙ_ФАЙЛ.cap ХЕШИ.hccapx ESSID

Пример:

cap2hccapx.bin wpa.cap Zyxel-49.hccapx Zyxel-49

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.