WPS Pixie Dust Attack — Взлом Wi-Fi сети за 5 минут. Описание уязвимости



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

    Базово о 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

    Поделиться публикацией

    Похожие публикации

    Комментарии 24

      –4
      Добрый день. Спасибо за статью и ссылки, но на сколько я знаю эта уязвимость уже давно закрыта для большенства роутеров, именно не сам алгоритм а добавили тайминг (или бан) на количество запросов >5, что делает использование данной уязвимости времязатратным процессом (для старых девайсов).
        +3
        Не совсем так. Атака pixie возможна offline, так как исходные данные (PKE, PKR, Authkey, E-Hash1 и E-Hash2) становятся известны с первой попытки (при условии, что WPS включен и связь с роутером стабильна). PIN вычисляется в offline.
        У меня на практике успешных атак с помощью pixie 30%. Время, требуемое на вычисление ПИН — несколько секунд. Само собой все в образовательных целях :)
          +1
          Не думаю, что все пользователи сразу же почесались обновлять прошивки или запрещать WPS. Большинство даже не знает, что есть такая функция, а те, кто знает, не интересуются её безопасностью.
            +2
            Насколько я понимаю, здесь речь о том, что для некоторых устройств перебор вообще не нужен. Они сами отправляют атакующему хэши обоих половин wps ключа. Причём _безсоли. И атакующий брутфорт выполняет локально, в пределах своего компа. Перебрать 2 x 9999 хэшей даже на cpu — детская задача
            0
            Вариант „Включён, WPS key“.
            Вообще, на мой взгляд, следует явно оговаривать, что всё сказанное относится к WPS pin.
              +1
              Может WPA key? Речь именно о "WPS pin"
                0
                Скорее всего имеется в виду WPS-кнопка.
              0
              А где вариант Включен, кастомная прошивка?
                0
                Думаю достаточно уже того, что он включен)
                0
                Дыре и правда сто лет в обед.
                Алсо, тестировал недавно купленный Zyxel Keenetic — секунд сорок и пароль был удачно слит.
                  +3
                  Такое ощущение что все соседи вокруг читаю Хабр, и большинство прошивок на wi-fi роутерах в округе обновлены. Или народ мудреет?
                    0
                    Рад за вас и ваших соседей если это действительно так, у меня как была печаль, так и осталась, правда у меня приличная часть это вообще роутеры от МГТС, т. е. не факт что интернетом с них вообще пользуются.
                      +2
                      Приведённая Вами статья про другой метод: про брутфорс перебором pin-кодов. Когда-то этот метод работал, а сейчас уже практически не работает: любая более-менее свежая точка доступа перестаёт овечать на запросы (делает паузу на весьма большое время) после нескольких неудачных попыток.
                      Здесь же рассказывается про другой метод, при котором нет необходимости циклически запрашивать точку доступа.
                      0
                      Было еще два года назад на хабре. Что значит нет этого в ру-сегменте?
                      А еще после прочтения статьи от корректора-редактора, про русский язык стал замечать, как режет и бесит постоянное употребление слова «данный», как например в начале.
                        +3
                        Можно ссылку на то, что было на хабре 2 года назад?
                        –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… ???? Как мы отправляем данные в ХЭШ… и как сравниваем…
                        И о каких, мать его, минутах идёт речь!
                        Кому нужны инструкции по РЕАЛЬНОМУ пен-тестингу ВПС, скиньте почту в личку.
                          0
                          Из названия статьи должно быть понятно что речь именно о теории "Описание уязвимости". С точки зрения практики — ничего сложного — wifite все делает автоматом без ручных действий. Есть уже инструкции https://webware.biz/?p=3519 потому не вижу смысла в статье это заново описывать, интересна была именно теория — как все работает.
                            0
                            По поводу "Откуда мы узнаем PKE, PKR, Authkey, E-Hash1 и E-Hash2" — вы статью читали? посмотрите, там это все описано. Минуты для ПК, или вы брутфорсить так же вручную собрались?)
                              +1
                              Может быть Вы оформите свой *.док в виде статьи в песочницу хабра? С удовольствием её почитаю.
                              PS: у read-only пользователей нет лички.
                              0
                              Мне так и не удалось запустить WiFite(. Вообще пользуюсь WSlax еще 10м, а К2 стоит, надо будет попрбовать.
                                0
                                Я таки расчехлился и посмотрел на wifislax: вот пожалйста
                                www.wifislax.com/pixiescript-v2-4-ataque-automatizado-pixie-dust-attack
                                к сожалению на испанском.
                                Кстати, wifiit2 запустился, пользую из-под vmw-ари. В линуксах нет достойного сканера, под win ом смотрю штатным адаптером через acrylic, а 2 свистка на vmwаре.
                                  0
                                  Пометьте, что ли, что это перевод, причем с форума Кали с небольшими дополнениями и все.
                                  forums.kali.org/showthread.php?24286-WPS-Pixie-Dust-Attack-(Offline-WPS-Attack)
                                  Ну или так кому интересно: division0.net/wps-pixie-dust.html
                                  Там ссылок хватит с головой.
                                    0
                                    Это не перевод 1 в 1. Источники информации, которые использовались для написания, указаны в конце статьи.

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

                                  Самое читаемое