Уязвимость в протоколе 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 окон терминала, запущенных в одну секунду?
     
    1. Monohrom

      Monohrom Active Member

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

        4Fun Well-Known Member

        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.
        1. 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.
          1. 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.
            1. 4Fun

              4Fun Well-Known Member

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

                  4Fun Well-Known Member

                  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
                  1. TOX1C

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

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

                        4Fun Well-Known Member

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

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

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

                            4Fun Well-Known Member

                            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.
                            1. 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.
                              1. 4Fun

                                4Fun Well-Known Member

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

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

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

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

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

                                      Isica Active Member

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

                                          4Fun Well-Known Member

                                          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
                                          Но пока что никакого результата.