Уразливість не нова, але через відсутність матеріалів у «РУ» сегменті — вирішив написати цю статтю.
Базово про WPS:WPS — Wi-Fi Protected Setup. Друга назва QSS — Quick Security Setup.
Стандарт розроблений для спрощення процесу установки бездротової мережі.
WPS дозволяє підключиться двома різними способами:
— введення 8-ми значний пін-коду (зазвичай вказується на звороті роутера)
— натисканням спеціально призначеної для цього кнопки на роутері
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 Буду радий слушною зауважень і доповнень до статті.
Включений у вас WPS
/>
/>
input type=«radio» id=«vv72422» class=«radio js-field-data» name=«variant[]» value=«72422» |
досі включений 🙁 |
input type=«radio» id=«vv72424» class=«radio js-field-data» name=«variant[]» value=«72424» |
Вимкнено |
input type=«radio» id=«vv72426» class=«radio js-field-data» name=«variant[]» value=«72426» |
Вимкнений, кастомний прошивку |
input type=«radio» id=«vv72428» class=«radio js-field-data» name=«variant[]» value=«72428» |
Немає Wi-Fi роутера |