Уязвимость в протоколе Wi-Fi Protected Setup

Discussion in 'Беспроводные технологии/Wi-Fi/Wardriving' started by gpuhash, 30 Dec 2011.

  1. TOX1C

    TOX1C Elder - Старейшина

    Joined:
    24 Mar 2012
    Messages:
    1,135
    Likes Received:
    1,931
    Reputations:
    24
    А какие конкретно модели на это поддаются? Пробовал на нескольких двухдиапазонных тендах, многократно уводя их в блокировку - результат нулевой. Иногда pixiewps завершался не сразу же, а пытался что-то подбирать, но тоже безрезультатно.
    От времени между попытками что-то зависит? Или нужно обязательно точку долбить как можно быстрее, или вообще с 10 окон терминала, запущенных в одну секунду?
     
  2. Monohrom

    Monohrom Active Member

    Joined:
    26 Jan 2020
    Messages:
    83
    Likes Received:
    132
    Reputations:
    2
    Есть теория что это зависит от загруженности роутера. если он не загружен то происходит то что написал Василий: "если realtek генерирует эти три числа в течение одной секунды то они оказываются... равны.".
    Если же роутер загружен то облом. Можно попробовать перезагрузить роутер и попробовать подключиться с pixiewps по идее должны быть прочерки но пока что но пока что это не проверял.
     
  3. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    Если я не ошибаюсь, то все двухдиапазонные Тенды имеют прошивки на базе Linux (как правило, на чипах Broadcom, но встречаются и Realtek архитектуры ARM). Скорее всего, в Broadcom/Linux используется сильный рандом. На eCos дешёвые роутеры с малым объёмом ПЗУ и нет двухдиапазонных.
    Уязвимы к Pixie Dust Тенды с прошивками на базе eCos, и то, как выяснилось, не все.
    Основных признаков уязвимости три:
    1. Набор информационных полей WSC:
      Code:
      WPS:     * Version: 1.0
               * Wi-Fi Protected Setup State: 2 (Configured)
               * Response Type: 3 (AP)
               * UUID: 63041253-1019-2006-1228-aabbccddeeff
               * Manufacturer: Realtek Semiconductor Corp.
               * Model: RTL8xxx
               * Model Number: EV-2009-02-06
               * Serial Number: 123456789012347
               * Primary Device Type: 6-0050f204-1
               * Device name: Tenda Wireless AP Ecos
               * Config methods: Display, PBC
      
    2. BSSID, оканчивающийся на чётный байт (цифра 0 либо 8 в конце).
    3. Подсказка " [!] The AP /might be/ vulnerable. Try again with --force or with another (newer) set of data." в Pixiewps.
    Существуют Тенды, у которых есть 1 признак, но нет 2 и 3 — видимо, это более дорогие модели на базе eCos.
    Как выяснилось (спасибо @VasiliyP), успешность вычисления пин-кода к таким Тендам зависит лишь от того, сгенерированы ли E-Nonce, E-S1, E-S2 в одну секунду. Если они сгенерированы в одну секунду, то их значения равны (а мы знаем E-Nonce из M1), если нет, то Pixiewps не может вычислить seed E-Nonce (используется неизвестный ей рандом, который мы ищем), а следовательно не может найти и E-S1,2.
    Пока что лишь могу предположить, что для того, чтобы E-Nonce, E-S1,2 генерировались в одну секунду, роутер должен быть как можно меньше нагружен (чтобы расчёты на его стороне шли быстро), а качество связи между вами и роутером должно быть как можно более лучшим (чтобы обмен пакетами происходил быстро и разрыв во времени между M1 и M3 был минимальным).
     
    #4843 4Fun, 6 Nov 2020
    Last edited: 6 Nov 2020
    TOX1C likes this.
  4. VasiliyP

    VasiliyP Elder - Старейшина

    Joined:
    30 Aug 2011
    Messages:
    365
    Likes Received:
    676
    Reputations:
    11
    Да. Только если в момент генерации M1 время тенды hh:mm:ss.999, то уже ничего не поможет. Нужно, чтобы M1 по времени был ближе к hh:mm:ss.000, то есть как-то синхронизировать время. Вот в beacon и probe respopnse есть штамп времени. Синхронно ли оно с системным временем для этих eCos - неизвестно. А может быть просто вынуждать точку генерировать M1 как из пулемёта, как только там сменился E-Nonce - сразу пулять M2.
     
    Monohrom, TOX1C and 4Fun like this.
  5. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Не совсем так. А вот так:
    Code:
    PSK1 = HMAC-SHA-256(authkey) (строка_1)
    PSK2 = HMAC-SHA-256(authkey) (строка_2)
    Где строка_1 - подстрока, содержащая первую половину строки с пин-кодом
    И строка_2 - подстрока, содержащая вторую половину строки с пин-кодом

    Если длина строки с пин-кодом не делится пополам нацело, то строка_1 содержит в себе большую часть исходной строки, а строка_2 содержит в себе меньшую часть.

    Code:
    // чётные длины
    PIN = "12345670"
    P1 = "1234"
    P2 = "5670"
    
    PIN = "1234"
    P1 = "12"
    P2 = "34"
    
    // нечётные
    PIN = "1234567"
    P1 = "1234"
    P2 = "567"
    
    // пустой пин
    PIN = ""
    P1 = ""
    P2 = ""
    
    Прошу заметить, что такая ситуация актуальна также в случае пустого пина.
     
    TOX1C, 4Fun and USER_X like this.
  6. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    @binarymaster спасибо за уточнение и интересные подробности с нечётной длиной. Опустил это в своём сообщении, т.к. в моём случае пин не пустой, а случай, когда 1 и 2 подстроки равны, исключён при пин-коде в 8 символов и не совпадающих половинках.
     
  7. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Также напомню историю про RV6688BCM, которые после автоматического обновления прошивки от провайдера все поголовно начали открываться от пустого пина, не смотря на то, что на наклейке устройства и в веб интерфейсе вполне нормальный 8-значный пин. :rolleyes:
     
    TOX1C, 4Fun, Payer and 1 other person like this.
  8. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    К слову, заметил на этом же глючном Нетисе странную особенность и подтвердил её 2 раза: после сброса на заводские настройки и перезагрузки Pixie Dust начинает работать, seed вычисляется как положено, работает пин, указанный в настройках, E-Hash1,2 не равны. Но стоит перезагрузить роутер — магия исчезает и появляется та самая заглюченность, которую я подробно описал в посте выше. И сохраняется это состояние до сброса к заводским настройкам.
    P.S. пустой пин тоже не подходит, как и 00000000 в состоянии заглюченности.
    Есть подозрение, что связано это с багом записи пина во flash, но почему тогда Pixiewps бессильна — остаётся загадкой.
     
    #4848 4Fun, 7 Nov 2020
    Last edited: 7 Nov 2020
  9. TOX1C

    TOX1C Elder - Старейшина

    Joined:
    24 Mar 2012
    Messages:
    1,135
    Likes Received:
    1,931
    Reputations:
    24
    А может ли в качестве пина быть не число, а что-то другое, кусок строки например. Как с пустым пином, ведь такого не должно быть.
    У меня из таких тенд всего одна на горизонте, у всех остальных из двухдиапазонных полное несовпадение. Попробую на обычном однодиапазонном выловить баг, хоть в нем немного смысла, эти роутеры быстрее и почти гарантированно ломает генератор, иногда даже с первой попытки.
     
    4Fun likes this.
  10. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Может, поскольку пин-код "под капотом" хранится в обычной ANSI строке, следовательно ничто не мешает туда положить символы, отличные от числовых.

    Я бы посоветовал пропатчить pixiewps (или даже hashcat?), чтобы побрутить первую часть PSK1 для начала. Это конечно, если seed удаётся правильный найти.
     
    paulo and 4Fun like this.
  11. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    Включил в Pixiewps режим отладки, как и писал вчера, убедился в том, что seed N1 нашёлся, но E-S1,2 не находятся. Вы считаете, что нужно взять этот seed (и ближайшие к нему), вычислить с ним E-S1,2 и побрутить с ними пин как произвольную строку?
     
  12. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Именно.
     
  13. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    Написал программку на основе исходников Pixiewps и инкрементно (наращивая длину строки от 1 до 4) пробрутфорсил латинские буквы + цифры в качестве первой, а затем и второй половинок — результат отрицательный. Видимо, всё-таки баг в прошивке роутера.
    Потратил достаточно много времени (не писал на Си ранее), чтобы сделать брутфорсер. Хочу поделиться, возможно, когда-нибудь кому-то пригодится для подобных исследований. Собирается так:
    Code:
    cmake .
    make
     

    Attached Files:

    paulo, binarymaster and CRACK211 like this.
  14. Isica

    Isica Active Member

    Joined:
    17 Oct 2018
    Messages:
    197
    Likes Received:
    130
    Reputations:
    1
    А надо бы от 0 до "сколько не жалко" символов, и не буквы, а всё подряд (баг в прошивке вряд ли старается совать туда буквы, а длина строки в результате этого бага может очень серьёзно гульнуть, но не исключено, что строка эта из одних нулей или FF).
     
    #4854 Isica, 13 Nov 2020
    Last edited: 13 Nov 2020
    binarymaster likes this.
  15. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    От 0 знаков — значит начиная с пустой строки? Разумеется, пустая строка проверяется в первую очередь. По поводу 5 и больше знаков: если не ошибаюсь, то в этом нет смысла, т.к. максимальная длина половинки пин-кода — 4 символа. К тому же, на перебор у меня ушло около 5 минут, если увеличить количество символов до 5, то выйдет больше 5 часов (моя программка однопоточная и работает на CPU).
    По поводу спецсимволов ASCII: спасибо, проверю.
     
    binarymaster and CRACK211 like this.
  16. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Хороший прогресс, годный. Осталось на базе hashcat сделать, и тогда можно будет на GPU молотить.
     
    AlexSP and Monohrom like this.
  17. TOX1C

    TOX1C Elder - Старейшина

    Joined:
    24 Mar 2012
    Messages:
    1,135
    Likes Received:
    1,931
    Reputations:
    24
    Как насчет экспериментов непосредственно с роутером? Заработает ли WPS, если в в вебморде сгенерировать новый pin, или включить настройку по нажатию кнопки? Если ломает wps именно та конфигурация, которая якобы читается из настроек роутера.
     
  18. Isica

    Isica Active Member

    Joined:
    17 Oct 2018
    Messages:
    197
    Likes Received:
    130
    Reputations:
    1
    Вряд ли баг интересуется такими формальностями :) Он просто берёт то, что есть и пытается обработать так, как умеет.
    А если исходить из того, что ПИН хранится в виде строки, то случайная запись бреда на его место может ОЧЕНЬ сильно изменить длину этой строки!..
    Впрочем, столь пессимистичный случай нам всё равно не осилить. Так что я бы ограничился следующим: сперва попробовал бы строки 00 и FF разумной длины (какую сможет проглотить алго), а затем бы прогнал все варианты для 4-х цифр.
     
    binarymaster likes this.
  19. Isica

    Isica Active Member

    Joined:
    17 Oct 2018
    Messages:
    197
    Likes Received:
    130
    Reputations:
    1
    При наличии физического доступа к железке (или к рубильнику :D), надо бы её поперезагружать и сперва удостовериться, действительно ли N1=F(time), а затем собрать все возможные варианты E-Hash1 и E-Hash2 для некого N1 (к примеру, на 30-й секунде после старта) и убедившись, что их не слишком много, побрутить их все.

    UP
    @4Fun, поглядел я свои логи, где pixi отработал в mode3, и у меня ВСЕГДА ES1=ES2, а N1 младше как минимум на секунду. Но если без бага эта точка уязвима, тогда ведь можно юзать mode3 по полной, не полагаясь на то, что N1=ES* (или Вы так и делаете?)
     
    #4859 Isica, 15 Nov 2020
    Last edited: 15 Nov 2020
  20. 4Fun

    4Fun Elder - Старейшина

    Joined:
    25 Jul 2018
    Messages:
    496
    Likes Received:
    708
    Reputations:
    11
    Так и делал. Написал программку для генерации E-S1,2 на основе генератора случайных чисел из Realtek, нашёл seed N1, прибавлял к нему несколько секунд (от 1 до 5), поучал E-S1,2 и проверял их с помощью самописного брутфорсера. Кстати, по вашему совету расширил набор проверяемых символов до
    Code:
    0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r
    Но пока что никакого результата.