Wi-Fi мережі: проникнення і захист. 2) Kali. Приховування SSID. MAC-фільтрація. WPS

    
 
 Перша частина циклу була дуже жваво зустрінута хабрасообществом, що надихнуло мене на прискорене написання наступної частини. До попередній статті було залишено багато слушних коментарів, за що я щиро вдячний. Як кажуть, хочеш знайти огріхи у своїх знаннях — напиши статтю на Хабре.
 
У цій статті ми поговоримо про те, як можна виявити «приховані» мережі, обійти MAC-фільтрацію на точці доступу і чому ж WPS (QSS в термінології TP-LINK) — це «бекдор в кожному будинку». А перед цим розберемося, як працює бездротовий адаптер і антена і як Kali Linux (ex. Backtrack ) допоможе нам в тестах на проникнення в бездротові мережі.
 
Все це так чи інакше вже описувалося раніше, як тут, так і на інших ресурсах, але даний цикл призначений для збору розрізненої теорії та практики воєдино, простою мовою, з зрозумілими кожному висновками.
 
Перед прочитанням настійно раджу ознайомитися з матчастиною — вона коротка, але на її основі базуються всі наші подальші дії і висновки.
 
 

Kali… Kali Linux

Дізнавшись про існуючі на сьогодні механізми захисту бездротових мереж в першої частини саме час використовувати ці знання на практиці і спробувати що-небудь зламати (природно, що належить нам самим). Якщо вийде — наш захист нікуди не годиться.
 
Всі маніпуляції будемо проводити з використанням Kali Linux kali.org . Це збірка на основі Debian , яка до цього була відома під ім'ям Backtrack . Якщо ви вперше знайомитеся з цією системою, то раджу почати відразу з Kali , так як там є все те, що було в Backtrack , але в більш свіжому вигляді.
 
(Читачі підказують, що є й інші подібні збірки — наприклад, wifiway.org . Однак я з ними не працював.)
 
Під Windows теж можна робити багато чого з описаного, але основна проблема у відсутності / поганий підтримці режиму монітора бездротових адаптерів, через що ловити пакети проблематично. Кому цікаво — зверніть увагу на CommView і утиліти Elcomsoft . Всі вони вимагають спеціальних драйверів.
 
 Kali дуже зручно використовувати з флешки — у неї у спадок від Debian Wheezy (у мене одного закладає ніс від такої назви? ) є persistence mode , який дозволяє завантажуватися в трьох режимах: роботи без збереження даних (read only), роботи з їх збереженням на окремий розділ на флешці, так званому persistence, або роботи без збереження в live / vanilla mode (тобто read only і без використання даних в persistence — початкова чиста версія дистрибутива).
 
Але, природно, хто хоче встановити її на жорсткий диск може легко зробити це і з завантажувача, і з уже запущеної оболонки. ОС підтримує шифровані розділи (LLVM) з використанням TrueCrypt. Крім цього, можна зробити власну збірку Kali — додати пакети, налаштувати завантажувач та інше. Все це детально описано в документації і проблем не викликає, хоча збірка вимагає пари годин часу.
 
Отже, припустимо ви завантажили ISO і записали його на флешку (для * nix —
dd
, для Windows — Win32DiskImager ). Що далі?
 
 
Режим persistence
Ця стаття — не керівництво по Linux, однак у мене самого були проблеми з запуском цього режиму, тому вирішив спеціально описати його роботу.
 
Користуватися Kali цілком можна і в режимі Live CD, але якщо ви хочете мати можливість зберігати стан системи між перезавантаженнями (дані і настройки) — потрібно створити окремий ext2 -розділ на флешці з ім'ям persistence , для чого можна використовувати GParted в складі самої Kali і розбити флешку прямо під час роботи з неї. Коли розділ створено — змонтуйте його і запишіть туди єдиний файл з ім'ям persistence.conf і таким вмістом:
 
/ union

Далі при кожному завантаженні Kali потрібно вказати, в якому режимі запускати систему. Для цього в завантажувачі при виділеному першому пункті
Live (i686-pae)
(аналогічно з x64) натискаємо Tab — з'являється рядок завантаження ядра. Туди в кінець додаємо пробіл і тип завантаження:
 
 
     
persistence , «повне сталість» — завантаження всіх даних на розділі та збереження змінених в процесі роботи даних на нього ж
 persistence persistence-read only , «сталість без збереження змін» — зверніть увагу, що це два слова і вказувати потрібно обидва, через пробіл, так як без першого цей режим не запуститься (буде live mode). У цьому режимі раніше збережені на розділ дані будуть завантажені, але зміни в перебігу цієї сесії збережені не будуть і після вимкнення дистрибутив повернеться в початковий стан
 
Якщо не вказати тип завантаження, система буде запущена в live (vanilla) mode — розділ persistence нічого очікувати використаний і після завантаження його можна буде змонтувати і зробити якісь зміни. Всі дані і настройки в перебігу роботи в live-режимі не будуть збережені і містяться тільки в тимчасовій пам'яті.
 
 
Щоб не забивати ці режими при кожному завантаженні можна створити свою збірку Kali (див. інструкції на сайті ) — там є настройка завантажувача, куди можна вписати потрібні режими так, щоб спочатку завантажуватися в
persistence persistence-read only
— на мій погляд, це саме зручне, так як спочатку налаштував все, що потрібно, а потім кожна сесія починається з чистого аркуша.
 
 

Use the tools, Luke

 Збори закінчено, розходимося, розходимося.
 
Ну, ось і дісталися до терміналу. Подивимося, хто навколо нас світить ультраволнамі.
 
 
Режими роботи Wi-Fi адаптера
Але для початку потрібно перевести наш бездротової адаптер (мережеву карту) в «хакерський режим» — monitor mode .
 
Справа в тому, що кожен Wi-Fi адаптер, а точніше, антена, на фізичному рівні вловлює будь-які сигнали, що пересилаються пристроями в радіусі дії. Антена не може «не брати» сторонні пакети. А ось драйвер може працювати в трьох режимах (насправді 6 , але це за рамками цієї статті):
 
 
     
Client mode (також managed mode ) — пакети, не призначені цього адаптера — відкидаються, а інші передаються всередину ОС як «отримані». У цьому режимі пошкоджені пакети також відкидаються. Нормальний режим роботи «без свістелок».
 Monitor mode (також rfmon mode ) — драйвер не фільтрує пакети і передає все, що вловлює антена, в ОС. Пакети з невірною контрольною сумою НЕ відкидаються і їх можна бачити, наприклад, в Wireshark .
 Promiscuous mode («безладний режим») — режим монітора «наполовину». Драйвер буде передавати в ОС пакети, отримані в рамках мережі, до якої ми зараз підключені (associated), але на відміну від звичайного режиму не будуть відкидатися пакети, призначені іншим клієнтам цієї мережі. Пакети інших мереж будуть ігноруватися. Зрозуміло, що це працює тільки коли ви можете успішно підключитися і авторизуватися в деякій мережі (відкритої чи ні). У відмінності від монітора, цей режим підтримується меншим числом адаптерів. При роботі в цьому режимі, так само як і в режимі клієнта, драйвер буде прибирати з переданих в ОС пакетів низькорівневі заголовки каналу.
 
Нам потрібен саме режим монітора — в режимі клієнта нам не цікаво дивитися на пакети, які нам самим і призначені, а для режиму promiscious нам потрібно спершу підключитися до деякої мережі. Якщо не вважати пошкоджених пакетів і наявності заголовків 802.11, режим монітора може те ж і більше, що і безладний режим, та й підтримується левовою часткою адаптерів. Єдина проблема — не всі адаптери можуть одночасно передавати дані в режимі монітора, але у мене особисто з цим проблем не було.
 
 
На картинці вище жирні лінії показують пакети, які ми перехоплюємо в різних режимах, а переривчасті лінії — це пакети, уловлювані нашої антеною, але відкидаються драйвером через обраного режиму.
 
Відкриваємо термінал і виконуємо:
 
airmon-ng start wlan0

 wlan0 — ідентифікатор пристрою-адаптера. В * nix це wlan + порядковий номер (wlan0, wlan1, wlan2 і т.д.). Номер адаптера можна дізнатися, виконавши ifconfig або iwconfig (ця виведе тільки пристрої бездротових адаптерів і специфічну для них інформацію).
 
Якщо airmon-ng виведе повідомлення
(monitor mode enabled on mon0)
— значить, адаптер успішно переведений в режим спостереження.
 
Зверніть увагу, що в командах, які ми будемо виконувати далі, теж вказується ідентифікатор адаптера, але віртуального — mon0 (
mon1
, etc.), А не вихідного — wlan0 . mon0 — адаптер, створений airmon-ng , призначений для роботи з функціями монітора.
 
Зараз цей режим підтримується 80-90% всіх адаптерів (з мого досвіду), найпоширеніші з них — Atheros, Intel і TP-LINK. Останній виробляє зовнішні адаптери зі змінними антенами до $ 30 (я користувався WN722NC + TL-ANT2408CL ). Список підтримуваних адаптерів є в вікі Aircrack-ng .
 
 
Бездротові канали
Wi-Fi — технологія передачі даних по радіоканалу, тобто даром з використанням того ж механізму, що і в радіостанціях. І точно так само, як в радіостанціях, якщо передавати занадто багато даних на одній частоті (зазвичай 2.4 ГГц), то не можна буде розібрати, що до чого відноситься. Для цього існує поділ на канали.
 
Всього каналів 13, хоча останній канал — тринадцятий — нещасливий і в деяких країнах заборонено, тому найчастіше використовуються 1-12. Однак 13-й вмикається вибором для бездротового адаптера таку країну, як Болівія (BO) — або будь-яку іншу, де дана частота дозволена. Так, технічна можливість, як це часто буває, є в будь-якому адаптері, але заблокована з етичних перевагам.
 
Крім цього є і 14-й канал (японці, як завжди, відзначилися) і частота 5 ГГц з ще 23 каналами. Взагалі, канали 2.4 ГГц частково перетинаються, плюс їх ширина може бути 20 і 40 МГц. Ця тема заплутана через наявність різних версій стандарту — кому цікаво можуть почитати в Вікіпедії . Нам вистачить і того, що вже сказано. Поки ще 5 ГГц застосовуються рідше, але описані далі прийоми застосовні і до цієї частоті.
 
Деякі використовують 13-й канал для приховування своїх мереж, але цей спосіб тут навіть не розглядається, оскільки достатньо перевести адаптер в потрібний регіон, як він сам їх побачить. Наприклад:
 
ifconfig wlan0 down
iw wlan0 reg set BO
ifconfig wlan0 up
iwconfig wlan0 channel 13

Будь бездротової адаптер може приймати і передавати дані тільки на одному каналі за раз. Однак поточний канал можна міняти як завгодно часто — для отримання повної інформації про бездротові передачах навколо airodump-ng (після реклами нижче) перемикає канал кілька разів на секунду і ловлять все, що трапляється. Це називається channel hopping («стрибки по каналах»). Це роблять і системні програми — наприклад,
NetworkManager
для GNOME, який показує список бездротових мереж в правому верхньому куті.
 
Якщо канал не зафіксований, то деякі пакети можуть бути втрачені — адаптер переключився на сусідній канал, а в цей час по попереднього каналу пройшов новий пакет, але його антена вже не вловила. Це критично, коли ви намагаєтеся перехопити handshake, тому для відключення всіх програм, які використовують бездротової адаптер і не дають зафіксувати канал, використовується ця команда:
 
airmon-ng check kill

Без kill буде виведений список всіх підозрілих процесів, а з kill вони будуть завершені. Після цього адаптер залишиться цілком у вашому розпорядженні. Команду вище рекомендується виконувати перед будь-якими діями, крім простого огляду мережі, так як бездротовий адаптер — загальний ресурс; кілька програм можуть використовувати його одночасно (наприклад, можна ловити список мереж в airodump-ng і одночасно підбирати WPS в reaver ), але будь-яка з них може перемкнути канал, тому важливо зафіксувати його і при її запуску (зазвичай параметр називається -c або — channel ).
 
 
Antenna overclock
Крім маніпуляцій з регіоном ifconfig може спробувати змусити адаптер працювати на більшій потужності, ніж він це робить за замовчуванням. Результат сильно залежить від типу адаптера і регіону, при довгому використанні може зіпсувати пристрій і взагалі підсмажити вам ніс , так що використовуйте на свій страх і ризик. У разі успіху антена зможе вловлювати більш слабкі сигнали.
 
 
ifconfig wlan0 down
# Обход региональных ограничений на максимальную мощность передатчика.
iw reg set BO 
iwconfig wlan0 txpower 500mW
# Либо:
iwconfig wlan0 txpower 30
ifconfig wlan0 up

Звичайна потужність — 15-20 одиниць. При помилку буде повідомлення типу
Invalid argument
, проте його може і не бути — після виконання перевірте значення txpower в iwconfig .
 
 
Вони серед нас
 
 
Виконуємо:
 
airodump-ng mon0

 airodump-ng — команда для збору пакетів в радіоефірі. Вона виводить в консоль дві таблиці. У верхній виводяться знайдені бездротові мережі, у нижній — клієнти, підключені до них, або підключення, але з активним бездротовим адаптером, здійснює трансляцію якісь пакети (наприклад, про пошук мережі з певним ім'ям).
 
Останнє, до речі, особливо цікаво, так як ми можемо люб'язно надати їм шукану мережу і подивитися, що нині модно в «Однокласниках»? На цю тему днями комрадів KarasikovSergey була опублікована стаття з використанням Karma — але так як це вже на межі шкідницького проникнення в цьому циклі ми цю тему зачіпати не будемо. Але це дійсно проблема і варто подбати про те, щоб ваш пристрій не чіплялося за всі мережі без вашого дозволу, в тому числі за відомі — автентичність точок доступу не перевіряється і ви цілком можете опинитися в мережі зловмисника. У всіх сенсах.
 
 А ось ми в XP SP2… Цікаво згадати Windows XP SP2, який замість відключення мережного адаптера при неактивному підключенні до мережі починав запитувати ESSID, що складаються з випадкового набору символів — можливо для того, щоб заощадити на засипанні і наступному розігріві адаптера. Як результат, якщо ви створюєте поруч точку з саме таким ім'ям, яке легко простежити через airodump-ng — XP підключається до неї, але дивлячись на статус підключення користувач про це ніколи не дізнається (так як воно «неактивно») і в підсумку буде дуже здивований, виявивши працюючий Skype і витекли паролі . Прямий зв'язок з космосом!
 
Однак повернемося до наших хвилях. Нижче приклад виведення airodump-ng :
 
 
CH  1 ][ Elapsed: 6 mins ][ 2014-06-06 12:45

 BSSID              PWR  Beacons    #Data, #/s  CH  MB   ENC  CIPHER AUTH ESSID

 00:18:E7:xx:xx:xx  -67      108        0    0  11  54e. WPA2 CCMP   PSK  infolan22451
 F8:1A:67:xx:xx:xx  -88      132        0    0   1  54e. WPA2 CCMP   PSK  TP-LINK
 48:5B:39:xx:xx:xx   -1        0        0    0   5  -1                    <length:  0>

 BSSID              STATION            PWR   Rate    Lost    Frames  Probe

 (not associated)   4C:B1:99:xx:xx:xx  -73    0 - 1      0       66  dlink
 48:5B:39:xx:xx:xx  1C:7B:21:xx:xx:xx  -81    0 - 1      0       21  

 Стовпці першої таблиці з доступними бездротовими мережами:
 
 
     
BSSID — унікальний MAC-адресу бездротової мережі. За аналогією з MAC-адресою мережевих карт, це 6 чисел в шістнадцятковому форматі, розділених двокрапкою, наприклад:
AA:00:BB:12:34:56
. Він передається в більшість інших команд.
 PWR — рівень сигналу. Це негативне число; чим воно ближче до 0 — тим сигнал сильніше. Зазвичай для комфортної роботи це число до -50, для відеозв'язку — до -65, для VoIP — до -75. Значення нижче -85 і особливо нижче -90 можна вважати вкрай слабким рівнем. Число залежить як від потужності передавача, так і від коефіцієнта посилення антени у вашому адаптері (зовнішні адаптери мають посилення 0-12 dB, зовнішні 1-2-метрові всеспрямовані антени — до 24 dB)
 Beacons — число переданих цією точкою доступу «маячків» — пакетів, оповіщають знаходяться поряд пристроїв про існування цієї бездротової мережі, рівні сигналу, її імені (BSSID / ESSID) та іншої інформації. Використовується для підключення. За замовчуванням точки доступу зазвичай налаштовані на передачу маячків кожні 100 мсек (10 разів на секунду), але інтервал можна збільшити до 1/сек. Відсутність маячка не говорить про відсутність бездротової мережі — в прихованому (hidden) режимі точка доступу його не передає маячків, але до неї можна підключитися, якщо знати точне ім'я мережі. Про спосіб виявлення таких мереж — нижче.
 # Data — число пакетів з даними, які прийшли від цієї точки доступу. Це може бути HTTP-трафік, ARP-запити, запити на авторизацію (handshake) та інше. Якщо до мережі не підключений жоден клієнт або якщо він нічого не передає, то це значення не змінюється і може бути 0.
 # / s — число пакетів з даними в секунду. # Data поділена на час спостереження за цією мережею.
 CH — номер каналу. Як вже було описано вище, весь доступний спектр Wi-Fi розділений на 14 каналів; точка доступу і, відповідно, клієнти, передають дані на певному каналі і цей стовпець вказує, до якому каналу прив'язана ця точка доступу і її клієнти
 MB — швидкість передачі (ширина каналу) в Мбіт / с. Крапка наприкінці позначає, що точка доступу підтримує коротку преамбулу (short preamble). Можна побачити значення 11, 54, 54e. Нас це зазвичай мало хвилює
 ENC — тип бездротової мережі — OPN (відкрита), WEP, WPA, WPA2. На підставі цього параметра ми вибираємо відповідну схему атаки.
 CIPHER — тип шифрування даних після handshake. Може бути TKIP і CCMP (див. огляд в першої частини ).
 AUTH — механізм аутентифікації для передачі тимчасового ключа. Може бути PSK (обино авторизація за єдиним паролю для WPA (2)), MGT (WPA (2) Enterprise з окремим сервером з ключами RADIUS), OPN (відкрита).
ESSID — ім'я бездротової мережі. Саме його ви бачите в «Диспетчері бездротових мереж» в Windows і вказуєте в налаштуваннях точки доступу. Так як це користувача ім'я, то воно може не бути унікальним, і для всіх внутрішніх операцій використовується BSSID (тобто MAC-адресу адаптера в точці доступу), а це — просто відображуване назву.

Іноді в деяких стовпцях можна побачити числа -1 , а в останньому стовпці —
<length: 0>
. Це ознаки бездротової мережі, що не транслює свої дані у відкритому вигляді, а відповідаєш лише коли клієнт зробив явний запит на підключення з зазначенням коректного ESSID і пароля. Крім цього, точка доступу може взагалі не транслювати маячки і стане активна тільки, коли до неї підключиться клієнт, що знає її ім'я. Якщо залишити airodump-ng запущеним досить довгий час і якщо в цьому проміжку до прихованої мережі підключиться новий клієнт, то рядок, відповідну «прихованої» мережі, буде автоматично розкрита і там з'явиться номер каналу, ESSID і дані про захист. При цьому може бути потрібно зафіксувати канал, щоб не упустити момент підключення (див. нижче).

Стовпці другої таблиці з бездротовими клієнтами:

BSSID — MAC-адресу точки доступу, до якої підключений клієнт (див. першу таблицю). Якщо вказано (not associated) — клієнт відключений від усіх мереж, але адаптер працює (можливо, він шукає доступні мережі).
STATION — MAC-адресу клієнта. Колись ці адреси були вшиті в адаптер на фабриці і не могли бути змінені, але сьогодні може бути налаштований у переважній більшості випадків. У Linux / Mac для цього є штатні засоби., В Windows з цим складніше і підтримка залежить від драйвера. MAC-адресу точно так само, як і в провідних мережах, передається буквально в кожному пакеті від цього клієнта і це основна причина, чому фільтрація по MAC майже марна.
PWR — рівень сигналу від клієнта. Чим ближче до 0, тим клієнт ближче / сигнал потужніше (див. першу таблицю).
Rate — коли airodump-ng запущений з фіксацією каналу (див. нижче), цей стовпець покаже частоту передачі пакетів з даними від пункту доступу до клієнта (зліва від дефіса) і від клієнта назад (справа).
Lost — число втрачених пакетів, які наша система (не клієнт) не зареєструвала. Це легко обчислити, так як в переданих пакетах є лічильник.
Frames або Packets — число пакетів з даними, які ми вловили від цього клієнта (див. # Data в першій таблиці).
Probe — список ESSID-імен бездротових мереж, до яких клієнт намагався підключитися. Тут можуть бути перераховані зовсім не ті мережі, які ви бачите навколо, а ті, до яких клієнт підключався раніше, або ж приховані мережі. На основі цього можна організувати атаку типу Karma , як згадано раніше.

Параметри запуску airodump-ng (можна комбінувати; більш детально в наступних частинах):

airodump-ng -c 3 mon0
— зафіксувати канал № 3 — повний прийом пакетів без втрат при перемиканні на інші канали (через перекриваються частот в список можуть потрапити сусідні канали).
airodump-ng -w captures.pcap mon0
— записувати всі прийняті пакети в файл
captures.pcap
— використовується для offline-атаки на перебір пароля WEP / WPA (буде освітлено в наступній частині).
airodump-ng --essid "Имя сети" mon0
— фільтрувати прийняті (записувані / відображаються) пакети по приналежності до заданого імені мережі. Зазвичай використовується для зменшення розміру файлу, так як на якість перехоплення це ніяк не впливає.
airodump-ng --bssid 01:02:03:AA:AA:FF mon0
— фільтрація по MAC-адресу точки доступу (BSSID). Аналогічно — essid .

Приховані мережі… такі приховані



Часто в побуті можна почути, що приховані мережі дуже складно виявити / підключитися / зламати / понести (потрібне підкреслити). Однак як уже було показано, «прихована» мережа — не що інше, як мережу, не передавальна маячки про своє існування 10 раз в секунду, або передають їх, але з порожнім ESSID та іншими полями. На цьому різниця закінчується.

Як тільки до такої мережі підключається клієнт, він передає її ESSID і пароль, і якщо така мережа існує в радіусі дії — точка доступу відповідає на запит і проводить всі звичайні процедури по авторизації і передачі даних. А якщо клієнт вже був підключений раніше — його можна побачити в списку активних адаптерів… і відключити.

Кожен підключений клієнт спілкується з базовою станцією по її BSSID — і це саме те, що ми бачимо в обох таблицях airodump-ng . Ми можемо «відключити» клієнта від мережі, після чого він повинен буде підключитися знову — і в цей момент airodump-ng перехопить рукостискання з усіма ідентифікаторами і ключами. Або ми можемо просто залишити ноутбук включеним на пару годин з airodump-ng на потрібному каналі і почекати. До речі, при успішному «розтині» у правому верхньому кутку з'явиться повідомлення виду
[ Decloak: 00:00:11:11:22:22 ]
з BSSID точки доступу, конспірацію якої ми розкрили.

Відключення клієнтів передбачено в усіх бездротових стандартах і робиться за допомогою aireplay-ng (всі три вже знайомі нам утиліти — частина проекту Aircrack-ng , який містить у своєму наборі всілякі інструменти для роботи з тонкими матеріями):
aireplay-ng wlan0 --deauth 5 -a AP_BSSID -c CLIENT_BSSID

Увага: ця команда — виняток і приймає ідентифікатор реального бездротового адаптера, а не mon0 , створеного за допомогою airmon-ng .

Якщо при запуску з'явилася помилка про незафіксованому каналі і / або airodump-ng показує в правок верхньому куті
[ fixed channel -1 ]
— значить, якась програма або сервіс змушує адаптер перескакувати з каналу на канал (це може бути той же airodump-ng ) і їх потрібно закрити за допомогою
airmon-ng check kill
, як було описано на початку.

Команда вище імітує ситуацію, коли точка доступу повідомляє клієнту, що старий ключ недійсний (і що його слід оновити, повторивши handshake, тобто передавши пароль та ім'я мережі заново). На адресу клієнта відправляються повідомлення нібито від точки доступу про те, що слід відключитися від мережі і оновити дані сесії. Так як цей тип пакетів не захищений шифруванням (тобто команда може бути виконана ще до аутентифікації), то протидіяти йому неможливо з тієї простої причини, що неможливо встановити «особистість» того, хто це розсилає — MAC-адреси в пакетах підроблені і встановлені в ті значення, які ми передали після -a і -c . Можна тільки відслідковувати занадто часті відключення і приймати якісь міри.

Після — deauth йде число пакетів деавторізаціі, які будуть послані в обидва кінці. Зазвичай вистачає 3-5, можна вказувати і 30 і більше. Для стислості
--deauth
можна замінити на
-0
(нуль).

Отже, припустимо в другій таблиці airodump-ng ми бачимо наступну рядок:

BSSID              STATION            PWR   Rate    Lost    Frames  Probe
4F:B1:A4:05:5C:21  5B:23:15:00:C8:57  -54    0 - 1      0     1266  homenet, XCom

Перший стовпець — значення для -a (MAC базової станції), другий — для -c (MAC клієнта). Перезапустити airodump-ng і зафіксуємо його на каналі 5 (це канал нашої атакується станції), після чого виконаємо відключення клієнта в сусідньому вікні терміналу:

airodump-ng -c5 mon0
aireplay mon0 -0 5 -a 4F:B1:A4:05:5C:21 -c 5B:23:15:00:C8:57  

Якщо сигнал досить сильний, число пакетів велика і клієнт / точка доступу нас почули — вони відключаться один від одного, потім передадуть інформацію про мережі знову при підключенні і airodump-ng покаже їх і строчку
[ Decloak ]
.

Як бачимо, даний трюк зі утаєнням маячків можна використовувати для домашніх мереж, до якої хтось підключається пару раз в день, та й то не завжди — але для корпоративних мереж він точно не підходить, так як розкривається буквально однією командою і захисту від неї немає. На мій погляд навіть для приватних мереж це скоріше незручність, чому користь — вводити-то ім'я треба вручну, та й не зрозуміло, активна чи взагалі базова станція чи ні.

Також, -c (клієнтський MAC) можна не вказувати — тоді від імені точки доступу будуть розіслані широкомовні (broadcast) пакети про відключення всіх клієнтів. Проте сьогодні це рідко працює — драйвера ігнорують такі пакети, оскільки правомірно вважають, що справа нечиста — точка доступу завжди знає, хто до неї підключений, і розсилає спрямовані пакети для конкретного клієнта.

Фільтрація по MAC — адже це так просто



Дуже часто я чую рекомендації, що першим ділом після створення мережі потрібно обмежити список її клієнтів певним набором MAC-адрес, і тоді-де пароль взагалі ні до чого. Однак це обмеження обходиться так само легко, як і виявляються приховані мережі.

Справді, кожен клієнт — підключений до мережі чи ні — розкриває свій MAC-адресу при передачі будь-якого пакета. У таблиці airodump-ng ці адреси видно в стовпці STATION . Відповідно, як тільки ми побачили мережу, куди нам чомусь не потрапити (Linux зазвичай рапортує про
Unspecified failure
на етапі підключення, а Windows довго думає, після чого повідомляє про невідому помилку), і тут же в списку бачимо пов'язаного з цією мережею клієнта — ми можемо взяти його MAC-адресу і поміняти свій на нього. Наслідки можуть бути різними і може навіть стукнути . Якщо зробимо це за активної клієнті — у мережі з'явиться клон і клієнта може «Заглючить», так як він буде отримувати відповіді на пакети, які він не відправляв. У результаті може відключитися, а може продовжувати працювати, попередивши про проблему користувача — чи ні. Але варіант краще — записати його MAC і підключиться, коли він піде.

У Linux змінити MAC свого адаптера можна таким чином (працює як для дротових мереж, так і для бездротових):

ifconfig wlan0 down 
ifconfig wlan0 hw ether 00:11:22:AA:AA:AA 
ifconfig wlan0 up

Попередньо потрібно відключити будь-які mon -інтерфейси. Перевірити, заробила чи підміна, можна викликавши
ifconfig wlan0
— у рядку Hwaddr повинен бути зазначений вище MAC.

Крім того, в * nix є macchanger — з його допомогою можна виставити собі випадковий MAC. Якщо поставити його в init.d , то ворог буде абсолютно збитий з пантелику, так як при кожному завантаженні наш MAC буде іншим (працює для будь-яких дротових і бездротових адаптерів, як і ifconfig ).
# Случайный MAC:
macchanger -r wlan0 
# Определённый MAC:
macchanger -m 11:22:33:AA:BB:CC wlan0 
# Показать MAC:
macchanger -s wlan0 

У Windows потрібно провести деякі маніпуляції з реєстром, але з цієї теми краще проконсультуватися з Google.

WhooPS

Ми зробили все правильно і наша точка доступу використовує непробивні WPA2-PSK-CCMP з 63-значним паролем з
/dev/urandom
. Чи достатньо цього? Ні, якщо у нас — роутер з WPS, особливо якщо він старий.


Діаграма вище описує процес підключення клієнта до пункту доступу за допомогою PIN-коду. PIN — 8 цифр, які зазвичай наклеєні на самому роутері. Клієнти, що підтримують WPS, можуть підключитися до мережі або за звичайним паролю WEP / WPA, або за допомогою PIN, причому ввівши останній клієнт отримує пароль мережі в чистому вигляді.

За стандартом, остання цифра в PIN — це контрольна сума, тобто її можна обчислити виходячи з інших цифр. Таким чином, якщо б ми хотіли перебрати всі можливі комбінації, то це вимагало б 10 7 спроб (в основі — число можливих символів (0-9 — десять), в ступені — довжина рядка) — 10 мільйонів, що є близько 116 днів, якщо ми пробуємо один код в секунду. Зазвичай швидкість в кілька разів нижче, тому на підбір б пішло більше року.
Логотип WPS
Однак у стандарті допущена помилка. Процес авторизації проходить у кілька етапів. Якщо переданий нами PIN — вірний, то точка доступу повідомляє про успіх. Якщо перші чотири цифри PIN — вірні, а цифри 4-7 — ні, то точка доступу повідомить про це після передачі нами пакета M6 . У разі ж помилки в перших чотирьох цифрах ми дізнаємося про це раніше — після пакета M4 . Ця проблема була знайдена в кінці 2011 і описана тут . По гарячих слідах авторами дослідження був створений reaver-wps , опублікований потім на Google Code . Там же можна знайти документ оригінального опису уразливості.

Отже, припустимо наш PIN — 99741624 . Ми намагаємося підключитися, використовуючи PIN 9974 0000 — отримуємо відмову в авторизації після передачі пакета M6 (так як перша половина коду вірна). Якщо ж ми підключимося з 0000 1624 — відмова буде після M4 .

Як бачимо, основна проблема в тому, що ми можемо дізнатися про правильність однієї частини коду навіть при тому, що в другій міститься помилка . Що це дає? Тепер замість 10 мільйонів комбінацій нам потрібно спробувати всього лише 10 4 + 10 3 = 11 000. Це більш ніж реально зробити не те що за тиждень — за 15 годин, а зазвичай швидше.

Подивимося ще раз. Ми починаємо перебір з 00000000. Відмова після M4 (помилка в перших 4 цифрах). Міняємо на 00010000. Відмова після M4 . 00020000. M4 . Доходимо до 9974 0000. О! Відмова після М6 . Перші 4 цифри вгадані.

Далі — точно так само. Маючи половину коду поступово збільшуємо другу. 9974 0001. Відмова. 99740002. Відмова. <… > 99741624 . Прийнято.

Ось в цьому і суть Wi-Fi Unprotected Setup «Захищеної налаштування Wi-Fi».



Reaver
А ось тепер ми перевіримо, наскільки сумлінно ваша точка доступу виконує свої обов'язки. Якщо у вас немає роутера з WPS — завжди можна протестувати сусідський вам ця атака не загрожує.

Для експлуатації уразливості в WPS у Kali є кілька утиліт, але на мій погляд сама наочна і гнучка — той самий reaver . Синтаксис виклику:
reaver -i mon0 -c 5 -b AP_BSSID -va

Крім цього ми можемо вказати:

-m OUR_MAC — якщо ви міняли MAC-адресу свого адаптера (див. вище про MAC-фільтрацію), то вкажіть цей параметр з нових (що не фабричним) MAC.
-e ESSID — при атаці на приховану мережу reaver повинен знати її ім'я, а не тільки BSSID; якщо мережа відправляє маячки — ESSID буде автоматично отриманий з них, але для прихованих мереж ви повинні передати його явно.
-p PIN — якщо ви хочете вручну передати 8-мізначний код WPS, який потрібно спробувати застосувати до цієї мережі (цей код можна прочитати і змінити у веб-інтерфейсі пристрою). Якщо він вірний — утиліта виведе сам пароль мережі.
-vv — для показу прийнятих / переданих пакетів, в тому числі тих самих M4 і M6 . Корисно для відстеження активності при поганому з'єднанні.

reaver перебирає 11000 комбінацій, поки не виявить, що точка доступу прийняла одну з них. Швидкість перебору сильно залежить від сили сигналу / відстані до базової станції і може коливатися від 3 до 30 в секунду. Зазвичай на одну мережу іде до 10-15 годин.

Перервати reaver можна за допомогою Ctrl + C , при цьому він збереже поточний прогрес для цієї мережі та при повторному запуску почне з перерваного PIN. Якщо ви працюєте в live-режимі (read only), то дані сесії можна переписати з
/etc/reaver/
на постійний носій і при наступному завантаженні записати їх назад. У цій папці зберігаються текстові файли з іменами виду
AP_MAC.wpc
і списком всіх номерів для перебору всередині (перший рядок — номер рядка з PIN, з якого почати перебір при повторному запуску).

Про WPS ще два роки тому писали на Хабре і не тільки, так що легко можна знайти більше інформації.

(mailbrush порадив також звернути увагу на bully , який теж є в Kali і виконує аналогічну задачу.)

Що робити?
На сьогоднішній день єдиний варіант — відключити WPS. Якщо у вас або ваших знайомих складності з «налаштуванням» мережі (у що мало віриться) — включайте WPS тільки в момент підключення нового пристрою. Правда, не всі роутери / прошивки взагалі дають цю можливість, але будь у мене такой не дивлячись пішов би міняти на інший.

Проте ж не все так погано. Більш нові прошивки обмежують можливість підбору за допомогою rate limiting — після декількох невдалих спроб авторизації WPS автоматично відключається. Деякі моделі збільшують час відключення ще більше, якщо за короткий інтервал були зроблені ще невдалі спроби увійти. Проте, покладатися на це можна тільки після ретельної перевірки у вашому конкретному випадку — може вийти, що час відключення коротке або воно збільшується недостатньо — пам'ятайте, що 11000 комбінацій це дуже мало і навіть роблячи по одній спробі на хвилину на весь діапазон піде максимум 8 днів. І при цьому PIN змінюється окремо від пароля мережі, тому останній ви можете оновлювати як завгодно часто, ніяк не ускладнюючи перебір PIN.

До речі, в Мережі можна знайти експерименти з обходу блокування в часі за допомогою експлойтів, які змушують роутер перезавантажуватися — при цьому, природно, таймаут WPS скидається і можна знову продовжувати підбір. Так що розраховувати на «захист від WPS» не варто.

Перерахування мереж
Наостанок кілька слів про вічне про альтернативи reaver .

reaver намагатиметься атакувати будь-яку мережу, яку ви йому передасте у вигляді параметра BSSID, але вона може не підтримувати WPS — в цьому випадку програма зависне над
Waiting for beacon...
і через півхвилини повідомить про те, що мережу не знайдено.

Перевірити, які мережі в окрузі підтримують WPS, можна кількома способами.

Деякі версії airodump-ng мають окремий стовпець WPS , який заповнений для мереж, що підтримують цю технологію (там навіть вказана модель роутера)
wash-i mon0 виводить зручно отформатированную таблицю всіх WPS-enabled мереж, при цьому продовжуючи працювати, поки не буде явно закритий через Ctrl + C . Дуже корисний і тим, що повідомляє, коли мережа підтримує WPS, але можливість заблокована (див. про rate limiting вище)
iwlist wlan0 scan виводить безліч інформації по всім доступним в радіусі мереж, у тому числі розширені дані підтримки WPS з іменами пристроїв
wifite — автоматичний сканер мереж і універсальний зломщик; проте на мій погляд він занадто універсальний, тому складно зрозуміти, що він робить і на якій стадії цей процес знаходиться. А ось висновок мереж у нього дуже зручний: показано наявність підключених клієнтів і підтримка WPS

Крім того, є дуже улюблений багатьма kismet (і аналог для Macintosh — KisMAC ), але на мій погляд він занадто наворочений. У обох є інтеграція з GPS, що може бути корисно для тих, хто досліджує мережі на великій території (wardriving).

На цьому з «чітерскімі» методами проникнення все. У третій частині — про перехоплення рукостискань клієнтів при підключенні до мережі та підборі паролів до WPA (2) за допомогою CPU і GPU.

Окреме спасибі товаришеві chem_ua за корисні зауваження при вичитування статті.
Діаграми були намальовані на gliffy.com .

Як звичайно, коментарі у справі — вітаються.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.