Уязвимость не новая, но ввиду отсутствия материалов в «РУ» сегменте — решил написать данную статью.

Базово о WPS:
WPS — Wi-Fi Protected Setup. Второе название QSS — Quick Security Setup.
Стандарт разработанный для упрощения процесса настройки беспроводной сети.
WPS позволяет подключится двумя различными способами:
— ввод 8-ми значного пин кода (обычно указывается c обратной стороны роутера)
— нажатием специально предназначенной для этого кнопки на роутере

PIN являет собой код из 8 цифр, 8я — чек сумма. Брут такого кода, с учетом защиты от перебора, может занять до нескольких дней.

В конце 2014 года специалист по компьютерной безопасности Доминик Бонгард (Dominique Bongard) нашел уязвимость в WPS, которая позволила взломать Wi-Fi роутер за несколько минут.

Проблема была в генерации случайных чисел (E-S1 и E-S2) на многих роутерах. Если мы узнаем эти числа — мы сможем легко узнать WPS pin, так как именно они используются в криптографической функции для защиты от брутфорса по получению WPS pin.
Роутер отдает хэш, сгенерированный с использованием WPS pin и данных (E-S1 и E-S2) чисел, что бы доказать, что он его так же знает (это сделано для защиты от подключения к фейковой точке, которая могла бы просто принять ваш пароль и слушать трафик).
E-S1 и E-S2 используются в генерации E-Hash1, E-Hash2, которые в свою очередь получим от роутера в сообщении M3.

WPS протокол





Важными здесь являются: M1, M2, M3.
Сообщение M1 — роутер отправляет клиенту N1, Description, PKE.
Сообщение M2 — клиент отправляет роутеру N1, N2, PKR, Auth.
Auth — хэш от первого и второго сообщений.

И самое важное сообщение M3 — роутер отправляет клиенту E-Hash1, E-Hash2.

E-Hash1 = HMAC-SHA-256(authkey) (E-S1 | PSK1 | PKE | PKR)
E-Hash2 = HMAC-SHA-256(authkey) (E-S2 | PSK2 | PKE | PKR)


Где PSK1 — первые 4 цифры WPS pin, PSK2 — остальные 4 цифры.
E-S1 и E-S2 — должны быть случайными 128-битными числами.
PKE — публичный ключ роутера.
PKR — публичный ключ клиента.
Из этого получается что неизвестными являются (пока еще) E-S1 и E-S2, PSK1 и PSK2.

M4 — клиент отправляет R-Hash1, R-Hash2 для подтверждения того, что он так же знает WPS pin.
Если все ок — роутер отдаст клиенту парольную фразу для доступа к сети, привязанную к текущему WPS pin. Это сделано из расчета, что WPS pin не должен быть постоянным, и в случае его изменения — клиент должен заново получить пароль.

Генерация E-S1 и E-S2 на наших роутерах:


В “Broadcom/eCos” эти 2 числа генерируются сразу после генерации N1 (публичный ключ) той же функцией. Получение E-S1 и E-S2 сводится к брутфорсу состояния функции на основании N1 и получения в результате E-S1 и E-S2.

Код функции:
#if (defined(__ECOS) || defined(TARGETOS_nucleus))
void
generic_random(uint8 * random, int len)
{
	int tlen = len;
	while (tlen--) {
		*random = (uint8)rand();
		*random++;
	}
	return;
}
#endif 

Исходникgithub.com/RMerl/asuswrt-merlin/blob/master/release/src-rt/bcmcrypto/random.c

В “Realtek” для генерации таких чисел функция использует UNIX timestamp.
Аналогично Broadcom, N1 и E-S1,2 генерирует одна функция.
И если весь обмен происходит в ту же секунду, E-S1 = E-S2 = N1.
Если в течение нескольких секунд — брутфорс состояния на основе N1.
Исходникgithub.com/skristiansson/uClibc-or1k/blob/master/libc/stdlib/random_r.c

В “Ralink” E-S1 и E-S2 никогда не генерятся. Они всегда равны 0.
E-S1 = E-S2 = 0

В “MediaTek” и “Celeno” такая же картина:
E-S1 = E-S2 = 0

Заключение


Предположим мы уже знаем PKE, PKR, Authkey, E-Hash1 и E-Hash2 — все эти данные мы получили в результате общения с роутером (см. Выше M1, M2, M3). E-S1 и E-S2 сбрутили либо знаем что он = 0.
Дело осталось за малым — отправляем все данные в хэш функцию и сравниваем каждый новый pin с (E-Hash1 и E-Hash2). В результате за несколько минут мы получим WPS pin и, собственно, доступ к сети.

В kali2 уже присутствуют все нужные для проведения атаки инструменты. Кому интересна практика (протестировать свой роутер) — смотрим доки по Reaver. Wifite так же поддерживает данный вид атаки.

Источники информации по данной теме:


Выступление Доминика на конференции о WPS pixie
Описание на форуме kali

P.S Буду рад дельным замечаниям и дополнениям к статье.
Включен ли у вас WPS

Проголосовало 878 человек. Воздержалось 129 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (23)


  1. Ml1ght
    04.04.2016 07:40
    -4

    Добрый день. Спасибо за статью и ссылки, но на сколько я знаю эта уязвимость уже давно закрыта для большенства роутеров, именно не сам алгоритм а добавили тайминг (или бан) на количество запросов >5, что делает использование данной уязвимости времязатратным процессом (для старых девайсов).


    1. openkazan
      04.04.2016 08:57
      +3

      Не совсем так. Атака pixie возможна offline, так как исходные данные (PKE, PKR, Authkey, E-Hash1 и E-Hash2) становятся известны с первой попытки (при условии, что WPS включен и связь с роутером стабильна). PIN вычисляется в offline.
      У меня на практике успешных атак с помощью pixie 30%. Время, требуемое на вычисление ПИН — несколько секунд. Само собой все в образовательных целях :)


    1. merlin-vrn
      04.04.2016 10:04
      +1

      Не думаю, что все пользователи сразу же почесались обновлять прошивки или запрещать WPS. Большинство даже не знает, что есть такая функция, а те, кто знает, не интересуются её безопасностью.


    1. madrouter
      04.04.2016 11:07
      +2

      Насколько я понимаю, здесь речь о том, что для некоторых устройств перебор вообще не нужен. Они сами отправляют атакующему хэши обоих половин wps ключа. Причём _безсоли. И атакующий брутфорт выполняет локально, в пределах своего компа. Перебрать 2 x 9999 хэшей даже на cpu — детская задача


  1. Fullmoon
    04.04.2016 11:07

    Вариант „Включён, WPS key“.
    Вообще, на мой взгляд, следует явно оговаривать, что всё сказанное относится к WPS pin.


    1. ganjar
      04.04.2016 11:21
      +1

      Может WPA key? Речь именно о "WPS pin"


      1. GamePad64
        04.04.2016 14:46

        Скорее всего имеется в виду WPS-кнопка.


  1. NetForHack
    04.04.2016 11:07

    А где вариант Включен, кастомная прошивка?


    1. ganjar
      04.04.2016 11:17

      Думаю достаточно уже того, что он включен)


  1. vladbarcelo
    04.04.2016 11:08

    Дыре и правда сто лет в обед.
    Алсо, тестировал недавно купленный Zyxel Keenetic — секунд сорок и пароль был удачно слит.


  1. grims
    04.04.2016 11:08
    +3

    Такое ощущение что все соседи вокруг читаю Хабр, и большинство прошивок на wi-fi роутерах в округе обновлены. Или народ мудреет?


  1. vagonovozhaty
    04.04.2016 11:08

    1. jok40
      04.04.2016 12:44
      +2

      Приведённая Вами статья про другой метод: про брутфорс перебором pin-кодов. Когда-то этот метод работал, а сейчас уже практически не работает: любая более-менее свежая точка доступа перестаёт овечать на запросы (делает паузу на весьма большое время) после нескольких неудачных попыток.
      Здесь же рассказывается про другой метод, при котором нет необходимости циклически запрашивать точку доступа.


  1. temazosin
    04.04.2016 11:09

    Было еще два года назад на хабре. Что значит нет этого в ру-сегменте?
    А еще после прочтения статьи от корректора-редактора, про русский язык стал замечать, как режет и бесит постоянное употребление слова «данный», как например в начале.


    1. ganjar
      04.04.2016 11:10
      +3

      Можно ссылку на то, что было на хабре 2 года назад?


  1. Bolgartskii0krasnii0peret
    04.04.2016 11:11
    -4

    Занимаясь ПЕН-тестингом, эксплуатирую ВПС с конца 2012г. Статья интересная, но — ниочём… ни инструкции ни примеров, всё только теория, хотя написано, что уязвимость ГСЧ обнаружена в 2014г. В данный момент уязвимость должна была обрасти совтом под Линукс — как грязью, а примеров нет. Как эксплуатировать просто ВПС под Линуксом в РУ-нете куча «обломков», пришлось собрать всё воедино — в виде инструкции в *.док, с его подводными камнями и личными улучшениями.
    """"""
    Заключение
    Предположим мы уже знаем PKE, PKR, Authkey, E-Hash1 и E-Hash2 — все эти данные мы получили в результате общения с роутером (см. Выше M1, M2, M3). E-S1 и E-S2 сбрутили либо знаем что он = 0.
    Дело осталось за малым — отправляем все данные в хэш функцию и сравниваем каждый новый pin с (E-Hash1 и E-Hash2). В результате за несколько минут мы получим WPS pin и, собственно, доступ к сети.
    """""""
    ??? Откуда мы узнаем PKE, PKR, Authkey, E-Hash1 и E-Hash2… ???? Как мы отправляем данные в ХЭШ… и как сравниваем…
    И о каких, мать его, минутах идёт речь!
    Кому нужны инструкции по РЕАЛЬНОМУ пен-тестингу ВПС, скиньте почту в личку.


    1. ganjar
      04.04.2016 11:14

      Из названия статьи должно быть понятно что речь именно о теории "Описание уязвимости". С точки зрения практики — ничего сложного — wifite все делает автоматом без ручных действий. Есть уже инструкции https://webware.biz/?p=3519 потому не вижу смысла в статье это заново описывать, интересна была именно теория — как все работает.


    1. ganjar
      04.04.2016 11:20

      По поводу "Откуда мы узнаем PKE, PKR, Authkey, E-Hash1 и E-Hash2" — вы статью читали? посмотрите, там это все описано. Минуты для ПК, или вы брутфорсить так же вручную собрались?)


    1. jok40
      04.04.2016 13:04
      +1

      Может быть Вы оформите свой *.док в виде статьи в песочницу хабра? С удовольствием её почитаю.
      PS: у read-only пользователей нет лички.


  1. sweetbrick
    05.04.2016 11:15

    Мне так и не удалось запустить WiFite(. Вообще пользуюсь WSlax еще 10м, а К2 стоит, надо будет попрбовать.


  1. sweetbrick
    05.04.2016 15:50

    Я таки расчехлился и посмотрел на wifislax: вот пожалйста
    www.wifislax.com/pixiescript-v2-4-ataque-automatizado-pixie-dust-attack
    к сожалению на испанском.
    Кстати, wifiit2 запустился, пользую из-под vmw-ари. В линуксах нет достойного сканера, под win ом смотрю штатным адаптером через acrylic, а 2 свистка на vmwаре.


  1. Leutenant
    07.04.2016 11:04

    Пометьте, что ли, что это перевод, причем с форума Кали с небольшими дополнениями и все.
    forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)
    Ну или так кому интересно: division0.net/wps-pixie-dust.html
    Там ссылок хватит с головой.


    1. ganjar
      07.04.2016 11:05

      Это не перевод 1 в 1. Источники информации, которые использовались для написания, указаны в конце статьи.