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

6e664171303b4a17a092164bce24eac7.jpg

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

Базово о 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 протокол

a41fcf1a5be043e2885649377874a114.png

Важными здесь являются: 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 Буду рад дельным замечаниям и дополнениям к статье.

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

© Habrahabr.ru