Размер
Использование reaver для восстановления PIN-кода WPS
Play

Использование reaver для восстановления PIN-кода WPS

В большинстве беспроводных роутеров с поддержкой WPS, реализующей авторизацию по PIN, существует уязвимость безопасности сети. Используя ее становится возможным восстановление PIN-кода точки доступа, а также установленных на ней WPA/WPA2-паролей.

Теория

Уязвимость заключается в том, что метод авторизации содержит недочеты, позволяющие существенно упростить прямой перебор PIN-кодов, иными словами – реализуется эффективная брутфорс-атака. PIN-код WPS содержит восемь цифр, соответственно существует 10 8 возможных вариантов кода. Это довольно большое число, но в реальности количество переборов можно существенно сократить.

Во-первых, восьмисимвольный PIN-код при авторизации делится на две части, обработка которых происходит независимо друг от друга. Так, точка доступа и клиент обмениваются рядом последовательных сообщений М1-М8, и при этом:

  • Если после отправки сообщения М4 точка доступа отвечает кодом EAP-NACK, значит первая половина PIN-кода ошибочна;
  • Если после отправки сообщения М6 точка доступа отвечает кодом EAP-NACK, значит вторая половина PIN-кода ошибочна.

В итоге, число необходимых переборов сокращается с 10 8 (100’000’000) до 10 4 +10 4 (20’000).

Во-вторых, последняя цифра PIN-кода не является случайной и представляет собой контрольную сумму предыдущих цифр кода. Этот факт сокращает количество вариантов до 10 4 +10 3 (11’000).

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

Автоматизация

Разумеется, не пришлось долго ждать появления умельцев, реализовавших программный метод для автоматического перебора PIN-кодов – в лице программы reaver wps. Более того, данная утилита даже была портирована в OpenWrt и присутствует в официальном репозитории пакетов.

Итак, для запуска процесса восстановления PIN-кода нашей точки доступа при помощи роутера под управлением OpenWrt нам потребуется установить пакеты aircrack-ng и reaver (в Buildroot расположены в разделе Network -> Wireless). Первый пакет представляет собой набор утилит и скриптов, при помощи которого мы сможем перевести Wi-Fi передатчик роутера в режим “Monitor”; второй – это непосредственно утилиты для анализа и подбора PIN-кодов.

Сначала подготовим Wi-Fi передатчик нашего роутера. Обратите внимание, соответствующий передатчик уже должен быть активирован в UCI или веб-интерфейсе. Допустим, если выбранный сетевой интерфейс называется wlan0, то используем команду:

Теперь у нас появился новый виртуальный сетевой интерфейс – mon0. К сожалению, чтобы на нем работал режим scan, в современных прошивках требуется отключение “обычного” беспроводного интерфейса:

Теперь мы можем использовать утилиту wash, при помощи которой можно увидеть окрестные точки доступа, поддерживающие WPS-авторизацию, а также убедимся в том, что с роутера просматривается целевая точка доступа и ее MAC-адрес:

Запоминаем номер канала и BSSID нашей точки доступа.

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

Однако, не все так гладко в Датском королевстве OpenWrt.

Проблема в следующем:

Утилита reaver местами использует низкоуровневые вычисления, а первоначально она составлялась для ПК с процессорами х86-64, использующими порядок байтов типа “Little-endian” (LE, от меньшего к большему). В то же время на многих распространенных роутерах используется представление байт “Big-endian” (BE, от большего к меньшему). Первое время это приводило к тому, что reaver вовсе не функционировал на роутерах с BE-платформой. Позже были написаны патчи, исправлявшие эту ситуацию, но тем не менее до сих пор не решена проблема с аутентификацией на точке доступа при использовании платформы с BE. Поэтому требуются обходные пути.

В частности, нам поможет ручная аутентификация на точке доступа при помощи утилиты aireplay-ng из пакета aircrack-ng. Однако в отличие от reaver данная утилита не умеет самостоятельно выставлять требуемый Wi-Fi канал, поэтому его необходимо задать вручную:

Эта утилита работает в foreground-режиме, поэтому после того, как вы убедитесь, что ассоциирование с точкой доступа происходит успешно, требуется прервать ее выполнение по Ctrl+C и перезапустить в фоновом режиме:

Затем при запуске reaver добавляем ключ -A:

Если все выполнено правильно, то можно будет наблюдать следующие строки:

В случае появления повторяющихся сообщений Sending EAPOL START request и WARNING: Receive timeout occurred, вероятно, ассоциирование с точкой доступа не было успешным. В случае обнаружения зацикленного перебора одинаковых PIN-ов, вероятно, точка доступа все-таки не поддерживает такую авторизацию, либо произошел сбой в работе reaver.

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

Также есть еще один момент, актуальный для запуска reaver на OpenWrt:

При работе данная утилита использует файл базы данных sqlite3, а также для хранения информации по текущей точке доступа создается временный файл в текущем каталоге. Оба этих файла перезаписываются после каждой новой попытки подбора PIN-кода. Соответственно, в целях сохранения flash-памяти вашего роутера от износа запускать reaver следует из каталога /tmp. Но, к сожалению, это никак не решает проблему постоянной перезаписи sqlite3-базы, расположенной в /etc/reaver/reaver.db. В данном случае решением проблемы стало бы создание копии этой базы в /tmp и добавление симлинка на нее в /etc.

Для упрощения решения проблемы с переносом sqlite3-базы в /tmp и автоматизации запуска aireplay был составлен скрипт reaverrun.sh:

Скачать скрипт можно из нашего хранилища: reaverrun.sh.

Процесс восстановления PIN-кода может занимать достаточно длительное время, и поэтому есть смысл запускать его в виртуальном терминале типа screen.

При завершении восстановления PIN-кода в консоль будет выведен также WPA-passphrase и затраченное на восстановление время:

После завершения работы с reaver необходимо выключить сетевой интерфейс mon0 командой airmon-ng stop mon0. Также привести роутер в исходное состояние можно и просто набрав команду wifi. При этом временные сетевые интерфейсы будут удалены, а конфигурация беспроводной сети вернется к заданным в UCI или веб-интерфейсе роутера значениям.

Вместо заключения

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

📎📎📎📎📎📎📎📎📎📎