А какие конкретно модели на это поддаются? Пробовал на нескольких двухдиапазонных тендах, многократно уводя их в блокировку - результат нулевой. Иногда pixiewps завершался не сразу же, а пытался что-то подбирать, но тоже безрезультатно. От времени между попытками что-то зависит? Или нужно обязательно точку долбить как можно быстрее, или вообще с 10 окон терминала, запущенных в одну секунду?
Есть теория что это зависит от загруженности роутера. если он не загружен то происходит то что написал Василий: "если realtek генерирует эти три числа в течение одной секунды то они оказываются... равны.". Если же роутер загружен то облом. Можно попробовать перезагрузить роутер и попробовать подключиться с pixiewps по идее должны быть прочерки но пока что но пока что это не проверял.
Если я не ошибаюсь, то все двухдиапазонные Тенды имеют прошивки на базе Linux (как правило, на чипах Broadcom, но встречаются и Realtek архитектуры ARM). Скорее всего, в Broadcom/Linux используется сильный рандом. На eCos дешёвые роутеры с малым объёмом ПЗУ и нет двухдиапазонных. Уязвимы к Pixie Dust Тенды с прошивками на базе eCos, и то, как выяснилось, не все. Основных признаков уязвимости три: Набор информационных полей WSC: Spoiler 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 BSSID, оканчивающийся на чётный байт (цифра 0 либо 8 в конце). Подсказка " [!] 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 был минимальным).
Да. Только если в момент генерации M1 время тенды hh:mm:ss.999, то уже ничего не поможет. Нужно, чтобы M1 по времени был ближе к hh:mm:ss.000, то есть как-то синхронизировать время. Вот в beacon и probe respopnse есть штамп времени. Синхронно ли оно с системным временем для этих eCos - неизвестно. А может быть просто вынуждать точку генерировать M1 как из пулемёта, как только там сменился E-Nonce - сразу пулять M2.
Не совсем так. А вот так: Code: PSK1 = HMAC-SHA-256(authkey) (строка_1) PSK2 = HMAC-SHA-256(authkey) (строка_2) Где строка_1 - подстрока, содержащая первую половину строки с пин-кодом И строка_2 - подстрока, содержащая вторую половину строки с пин-кодом Если длина строки с пин-кодом не делится пополам нацело, то строка_1 содержит в себе большую часть исходной строки, а строка_2 содержит в себе меньшую часть. Spoiler: Примеры Code: // чётные длины PIN = "12345670" P1 = "1234" P2 = "5670" PIN = "1234" P1 = "12" P2 = "34" // нечётные PIN = "1234567" P1 = "1234" P2 = "567" // пустой пин PIN = "" P1 = "" P2 = "" Прошу заметить, что такая ситуация актуальна также в случае пустого пина.
@binarymaster спасибо за уточнение и интересные подробности с нечётной длиной. Опустил это в своём сообщении, т.к. в моём случае пин не пустой, а случай, когда 1 и 2 подстроки равны, исключён при пин-коде в 8 символов и не совпадающих половинках.
Также напомню историю про RV6688BCM, которые после автоматического обновления прошивки от провайдера все поголовно начали открываться от пустого пина, не смотря на то, что на наклейке устройства и в веб интерфейсе вполне нормальный 8-значный пин.
К слову, заметил на этом же глючном Нетисе странную особенность и подтвердил её 2 раза: после сброса на заводские настройки и перезагрузки Pixie Dust начинает работать, seed вычисляется как положено, работает пин, указанный в настройках, E-Hash1,2 не равны. Но стоит перезагрузить роутер — магия исчезает и появляется та самая заглюченность, которую я подробно описал в посте выше. И сохраняется это состояние до сброса к заводским настройкам. P.S. пустой пин тоже не подходит, как и 00000000 в состоянии заглюченности. Есть подозрение, что связано это с багом записи пина во flash, но почему тогда Pixiewps бессильна — остаётся загадкой.
А может ли в качестве пина быть не число, а что-то другое, кусок строки например. Как с пустым пином, ведь такого не должно быть. У меня из таких тенд всего одна на горизонте, у всех остальных из двухдиапазонных полное несовпадение. Попробую на обычном однодиапазонном выловить баг, хоть в нем немного смысла, эти роутеры быстрее и почти гарантированно ломает генератор, иногда даже с первой попытки.
Может, поскольку пин-код "под капотом" хранится в обычной ANSI строке, следовательно ничто не мешает туда положить символы, отличные от числовых. Я бы посоветовал пропатчить pixiewps (или даже hashcat?), чтобы побрутить первую часть PSK1 для начала. Это конечно, если seed удаётся правильный найти.
Включил в Pixiewps режим отладки, как и писал вчера, убедился в том, что seed N1 нашёлся, но E-S1,2 не находятся. Вы считаете, что нужно взять этот seed (и ближайшие к нему), вычислить с ним E-S1,2 и побрутить с ними пин как произвольную строку?
Написал программку на основе исходников Pixiewps и инкрементно (наращивая длину строки от 1 до 4) пробрутфорсил латинские буквы + цифры в качестве первой, а затем и второй половинок — результат отрицательный. Видимо, всё-таки баг в прошивке роутера. Потратил достаточно много времени (не писал на Си ранее), чтобы сделать брутфорсер. Хочу поделиться, возможно, когда-нибудь кому-то пригодится для подобных исследований. Собирается так: Code: cmake . make
А надо бы от 0 до "сколько не жалко" символов, и не буквы, а всё подряд (баг в прошивке вряд ли старается совать туда буквы, а длина строки в результате этого бага может очень серьёзно гульнуть, но не исключено, что строка эта из одних нулей или FF).
От 0 знаков — значит начиная с пустой строки? Разумеется, пустая строка проверяется в первую очередь. По поводу 5 и больше знаков: если не ошибаюсь, то в этом нет смысла, т.к. максимальная длина половинки пин-кода — 4 символа. К тому же, на перебор у меня ушло около 5 минут, если увеличить количество символов до 5, то выйдет больше 5 часов (моя программка однопоточная и работает на CPU). По поводу спецсимволов ASCII: спасибо, проверю.
Как насчет экспериментов непосредственно с роутером? Заработает ли WPS, если в в вебморде сгенерировать новый pin, или включить настройку по нажатию кнопки? Если ломает wps именно та конфигурация, которая якобы читается из настроек роутера.
Вряд ли баг интересуется такими формальностями Он просто берёт то, что есть и пытается обработать так, как умеет. А если исходить из того, что ПИН хранится в виде строки, то случайная запись бреда на его место может ОЧЕНЬ сильно изменить длину этой строки!.. Впрочем, столь пессимистичный случай нам всё равно не осилить. Так что я бы ограничился следующим: сперва попробовал бы строки 00 и FF разумной длины (какую сможет проглотить алго), а затем бы прогнал все варианты для 4-х цифр.
При наличии физического доступа к железке (или к рубильнику ), надо бы её поперезагружать и сперва удостовериться, действительно ли N1=F(time), а затем собрать все возможные варианты E-Hash1 и E-Hash2 для некого N1 (к примеру, на 30-й секунде после старта) и убедившись, что их не слишком много, побрутить их все. UP @4Fun, поглядел я свои логи, где pixi отработал в mode3, и у меня ВСЕГДА ES1=ES2, а N1 младше как минимум на секунду. Но если без бага эта точка уязвима, тогда ведь можно юзать mode3 по полной, не полагаясь на то, что N1=ES* (или Вы так и делаете?)
Так и делал. Написал программку для генерации E-S1,2 на основе генератора случайных чисел из Realtek, нашёл seed N1, прибавлял к нему несколько секунд (от 1 до 5), поучал E-S1,2 и проверял их с помощью самописного брутфорсера. Кстати, по вашему совету расширил набор проверяемых символов до Code: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r Но пока что никакого результата.