Уязвимость не новая, но ввиду отсутствия материалов в «РУ» сегменте — решил написать данную статью.
Стандарт разработанный для упрощения процесса настройки беспроводной сети.
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 Буду рад дельным замечаниям и дополнениям к статье.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (23)
vladbarcelo
04.04.2016 11:08Дыре и правда сто лет в обед.
Алсо, тестировал недавно купленный Zyxel Keenetic — секунд сорок и пароль был удачно слит.
grims
04.04.2016 11:08+3Такое ощущение что все соседи вокруг читаю Хабр, и большинство прошивок на wi-fi роутерах в округе обновлены. Или народ мудреет?
vagonovozhaty
04.04.2016 11:08jok40
04.04.2016 12:44+2Приведённая Вами статья про другой метод: про брутфорс перебором pin-кодов. Когда-то этот метод работал, а сейчас уже практически не работает: любая более-менее свежая точка доступа перестаёт овечать на запросы (делает паузу на весьма большое время) после нескольких неудачных попыток.
Здесь же рассказывается про другой метод, при котором нет необходимости циклически запрашивать точку доступа.
temazosin
04.04.2016 11:09Было еще два года назад на хабре. Что значит нет этого в ру-сегменте?
А еще после прочтения статьи от корректора-редактора, про русский язык стал замечать, как режет и бесит постоянное употребление слова «данный», как например в начале.
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… ???? Как мы отправляем данные в ХЭШ… и как сравниваем…
И о каких, мать его, минутах идёт речь!
Кому нужны инструкции по РЕАЛЬНОМУ пен-тестингу ВПС, скиньте почту в личку.ganjar
04.04.2016 11:14Из названия статьи должно быть понятно что речь именно о теории "Описание уязвимости". С точки зрения практики — ничего сложного — wifite все делает автоматом без ручных действий. Есть уже инструкции https://webware.biz/?p=3519 потому не вижу смысла в статье это заново описывать, интересна была именно теория — как все работает.
ganjar
04.04.2016 11:20По поводу "Откуда мы узнаем PKE, PKR, Authkey, E-Hash1 и E-Hash2" — вы статью читали? посмотрите, там это все описано. Минуты для ПК, или вы брутфорсить так же вручную собрались?)
sweetbrick
05.04.2016 11:15Мне так и не удалось запустить WiFite(. Вообще пользуюсь WSlax еще 10м, а К2 стоит, надо будет попрбовать.
sweetbrick
05.04.2016 15:50Я таки расчехлился и посмотрел на wifislax: вот пожалйста
www.wifislax.com/pixiescript-v2-4-ataque-automatizado-pixie-dust-attack
к сожалению на испанском.
Кстати, wifiit2 запустился, пользую из-под vmw-ари. В линуксах нет достойного сканера, под win ом смотрю штатным адаптером через acrylic, а 2 свистка на vmwаре.
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
Там ссылок хватит с головой.ganjar
07.04.2016 11:05Это не перевод 1 в 1. Источники информации, которые использовались для написания, указаны в конце статьи.
Ml1ght
Добрый день. Спасибо за статью и ссылки, но на сколько я знаю эта уязвимость уже давно закрыта для большенства роутеров, именно не сам алгоритм а добавили тайминг (или бан) на количество запросов >5, что делает использование данной уязвимости времязатратным процессом (для старых девайсов).
openkazan
Не совсем так. Атака pixie возможна offline, так как исходные данные (PKE, PKR, Authkey, E-Hash1 и E-Hash2) становятся известны с первой попытки (при условии, что WPS включен и связь с роутером стабильна). PIN вычисляется в offline.
У меня на практике успешных атак с помощью pixie 30%. Время, требуемое на вычисление ПИН — несколько секунд. Само собой все в образовательных целях :)
merlin-vrn
Не думаю, что все пользователи сразу же почесались обновлять прошивки или запрещать WPS. Большинство даже не знает, что есть такая функция, а те, кто знает, не интересуются её безопасностью.
madrouter
Насколько я понимаю, здесь речь о том, что для некоторых устройств перебор вообще не нужен. Они сами отправляют атакующему хэши обоих половин wps ключа. Причём _безсоли. И атакующий брутфорт выполняет локально, в пределах своего компа. Перебрать 2 x 9999 хэшей даже на cpu — детская задача