Wi-Fi мережі: проникнення і захист. 1) Матчасть

    
 
Синоптики передбачають, що до 2016 року настане другий льодовиковий період трафік в бездротових мережах на 10% перевершить трафік в дротовому Ethernet . При цьому від року в рік приватних точок доступу стає приблизно на 20% більше .
 
При такому тренді не може НЕ радувати те, що 80% власників мереж не змінюють паролі доступу за замовчуванням . У їх число входять і мережі компаній.
 
Цим циклом статей я хочу зібрати воєдино опису існуючих технології захистів, їх проблеми та способи обходу, таким чином, що наприкінці читач сам зможе сказати, як зробити свою мережу непробивною, і навіть наочно продемонструвати проблеми на прикладі невдалого сусіда (do not try this at home, kids). Практична сторона злому буде освітлена за допомогою Kali Linux (колишній Backtrack 5) у наступних частинах.
 
Стаття у міру написання зросла з 5 сторінок до 40, тому я вирішив розбити її на частини. Цей цикл — не просто інструкція, як потрібно і не потрібно робити, а докладне пояснення причин для цього. Ну, а хто хоче інструкцій — вони такі:
 
Використовуйте WPA2-PSK-CCMP з паролем від 12 символів
a-z
(2000 + років перебору на ATI-кластері). Змініть ім'я мережі за замовчуванням на щось унікальне (захист від rainbow-таблиць). Вимкніть WPS (досить перебрати 10000 комбінацій PIN). Не покладайтеся на MAC-фільтрацію і приховування BSSID.
 
  Але спочатку — матчастину.
 
 

Передайте мені цукор

Уявіть, що ви — пристрій, який приймає інструкції. До вас може підключитися кожен бажаючий і віддати будь-яку команду. Все добре, але на якомусь етапі треба було фільтрувати особистостей, які можуть вами керувати. Ось тут і починається найцікавіше.
 
Як зрозуміти, хто може віддати команду, а хто ні? Перше, що спадає на думку — за паролем. Нехай кожен клієнт перед тим, як передати нову команду, передасть якийсь пароль. Таким чином, ви будете виконувати тільки команди, які супроводжувалися коректним паролем. Решта — фтопку.
 
Саме так працює базова авторизація HTTP (Auth Basic):
 
 
AuthType Basic
AuthName "My super secret zone!"
AuthUserFile /home/.htpasswd
Require valid-user 

 
 
Після успішної авторизації браузер просто-напросто буде передавати певний заголовок при кожному запиті в закриту зону:
 
Authorization: Basic YWRtaW46cGFzcw==

Тобто вихідне:
 
echo -n 'admin:pass' | base64
# YWRtaW46cGFzcw==

У даного підходу є один великий недолік — оскільки пароль (або логін-пароль, що по суті просто дві частини того ж пароля) передається по каналу «як є» — хто завгодно може встряти між вами і клієнтом і отримати ваш пароль на блюдечку. А потім використовувати його і розпоряджатися вами, як завгодно!
 
Для запобігання подібного неподобства можна вдатися до хитрощів: використовувати будь двосторонній алгоритм шифрування, де закритим ключем буде якраз наш пароль, і явно його ніколи не передавати. Однак проблеми це не вирішить — достатньо один раз дізнатися пароль і можна буде розшифрувати будь-які дані, передані в минулому і майбутньому, плюс шифрувати власні та успішно маскуватися під клієнта. А враховуючи те, що пароль призначений для людини, а люди схильні використовувати далеко не весь набір з 256 байт в кожному символі, та й символів цих зазвичай близько 6-8… загалом, комсомол не схвалить.
 
Що робити? А поступимо так, як чинять справжні конспіратори: при першому контакті придумаємо довгу випадкову рядок (досить довгу, щоб її не можна було підібрати, поки світить це сонце), запам'ятаємо її і всі подальші передані дані будемо шифрувати з використанням цього «псевдоніма» для справжнього пароля. А ще періодично міняти цей рядок — тоді джедаї взагалі не пройдуть .
 
 
Перші дві передачі (зелені іконки на малюнку вище) — це фаза з «потиском рук» (handshake), коли спочатку ми говоримо серверу про нашій легітимності, показуючи правильний пароль, на що сервер нам відповідає випадкової рядком, яку ми потім використовуємо для шифрування і передачі будь-яких даних.
 
Отже, для підбору ключа хакеру потрібно буде або знайти уразливість в алгоритмі його генерації (як у випадку з Dual_EC_DRBG ), або орендувати сотню-іншу паралельних всесвітів і кілька тисяч ATI-ферм для вирішення цього завдання за свого життя. Все це завдяки тому, що випадковий ключ може бути будь-якої довжини і містити будь коди з доступних 256, тому що користувачеві-людині ніколи не доведеться з ним працювати.
 
Саме така схема з тимчасовим ключем (сеансовий ключ, session key або ticket) у різних варіаціях і використовується сьогодні в багатьох системах — в тому числі SSL / TLS і стандартах захисту бездротових мереж, про які буде йти мова.
 
 

План атаки

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

Механізми захисту Wi-Fi

Технології створюються людьми і майже у всіх з них є помилки, іноді достатньо критичні, щоб обійти будь-яку саму хорошу в теорії захист. Нижче ми пробіжимося за списком існуючих механізмів захисту передачі даних по радіоканалу (тобто не зачіпаючи SSL, VPN і інші більш високорівневі способи).
 
 
OPEN
 
 
 OPEN — це відсутність всякого захисту. Точка доступу і клієнт ніяк не маскують передачу даних. Майже будь бездротової адаптер в будь-якому ноутбуці з Linux може бути встановлений в режим прослушки, коли замість відкидання пакетів, призначених не йому, він буде їх фіксувати і передавати в ОС, де їх можна спокійно переглядати. Хто у нас там поліз в Твіттер?
 
Саме за таким принципом працюють провідні мережі — в них немає вбудованого захисту і «врізавшись» в неї або просто підключившись до хабу / свічу мережевий адаптер буде отримувати пакети всіх знаходяться в цьому сегменті мережі пристроїв у відкритому вигляді. Однак з бездротовою мережею «врізатися» можна з будь-якого місця — 10-20-50 метрів і більше, причому відстань залежить не тільки від потужності вашого передавача, а й від довжини антени хакера. Тому відкрита передача даних по бездротовій мережі набагато небезпечніша.
 
У цьому циклі статей такий тип мережі не розглядається, тому що зламувати тут нічого. Якщо вам потрібно користуватися відкритою мережею в кафе або аеропорту — використовуйте VPN (уникаючи PPTP) і SSL (
https://
), і навіть всі разом. Тоді ваших котиків ніхто не побачить.
 
 
WEP
 
 
 WEP — перший стандарт захисту Wi-Fi. Розшифровується як Wired Equivalent Privacy («еквівалент захисту дротових мереж»), але на ділі він дає набагато менше захисту, ніж ці самі провідні мережі, так як має безліч огріхів і зламується безліччю різних способів, що через відстані, що покривається передавачем, робить дані більш уразливими. Його потрібно уникати майже так само, як і відкритих мереж — безпека він забезпечує тільки на короткий час, через яке будь-яку передачу можна повністю розкрити незалежно від складності пароля. Ситуація посилюється тим, що паролі в WEP — це або 40, або 104 біта, що є вкрай коротка комбінація і підібрати її можна за секунди (це без врахування помилок в самому шифруванні).
 
WEP був придуманий наприкінці 90-х, що його виправдовує, а от тих, хто їм до цих пір користується — ні. Я до сих пір на 10-20 WPA-мереж стабільно знаходжу хоча б одну WEP-мережу.
 
На практиці існувало декілька алгоритмів шифровки переданих даних — Neesus, MD5, Apple — але всі вони так чи інакше небезпечні. Особливо примітний перший, ефективна довжина якого — 21 біт (~ 5 символів).
 
Основна проблема WEP — у фундаментальній помилку проектування. Як було проілюстровано на початку — шифрування потоку робиться за допомогою тимчасового ключа. WEP фактично передає кілька байт цього самого ключа разом з кожним пакетом даних. Таким чином, незалежно від складності ключа розкрити будь-яку передачу можна просто маючи достатнє число перехоплених пакетів (кілька десятків тисяч, що досить мало для активно використовується мережі).
 
До слова, в 2004 IEEE оголосили WEP застарілим через те, що стандарт «не виконав поставлені перед собою цілі [забезпечення безпеки бездротових мереж]».
 
Про атаки на WEP буде сказано в третій частині.
 
 
WPA і WPA2
 
 
 WPA — друге покоління, яке прийшло на зміну WEP. Розшифровується як Wi-Fi Protected Access . Якісно інший рівень захисту завдяки прийняттю до уваги помилок WEP. Довжина пароля — довільна, від 8 до 63 байт, що сильно ускладнює його підбір (порівняйте з 3, 6 і 15 байтами в WEP).
 
Стандарт підтримує різні алгоритми шифрування переданих даних після рукостискання: TKIP і CCMP. Перший — щось на зразок містка між WEP і WPA, який був придуманий на той час, поки IEEE були зайняті створенням повноцінного алгоритму CCMP. TKIP так само, як і WEP, страждає від деяких типів атак, і в цілому не безпечний. Зараз використовується рідко (хоча чому взагалі ще застосовується — мені не зрозуміло) і в цілому використання WPA з TKIP майже те ж, що і використання простого WEP .
 
Одна з цікавих особливостей TKIP — у можливості так званої Michael-атаки. Для швидкого латання деяких особливо критичних дірок в WEP в TKIP було введено правило, що точка доступу зобов'язана блокувати всі комунікації через себе (тобто «засипати») на 60 секунд, якщо виявляється атака на підбір ключа (описана в другій частині). Michael-атака — проста передача «зіпсованих» пакетів для повного відключення всієї мережі. Причому на відміну від звичайного DDoS тут достатньо всього двох (двох ) пакетів для гарантованого виведення мережі з ладу на одну хвилину.
 
 
WPA відрізняється від WEP і тим, що шифрує дані кожного клієнта окремо. Після рукостискання генерується тимчасовий ключ — PTK — який використовується для кодування передачі цього клієнта, але ніякого іншого. Тому навіть якщо ви проникли в мережу, то прочитати пакети інших клієнтів ви зможете тільки, коли перехопіть їх рукостискання — кожного окремо. Демонстрація цього за допомогою Wireshark буде в третій частині.
 
Крім різних алгоритмів шифрування, WPA (2) підтримують два різних режиму початковій аутентифікації (перевірки пароля для доступу клієнта до мережі) — PSK і Enterprise. PSK (іноді його називають WPA Personal ) — вхід за єдиним паролю, який вводить клієнт при підключенні. Це просто і зручно, але у випадку великих компаній може бути проблемою — припустимо, у вас пішов співробітник і щоб він не міг більше отримати доступ до мережі доводиться застосовувати спосіб з «Людей в чорному» міняти пароль для всієї мережі і повідомляти про це інших співробітників. Enterprise знімає цю проблему завдяки наявності безлічі ключів, що зберігаються на окремому сервері — RADIUS. Крім того, Enterprise стандартизує сам процес аутентифікації в протоколі EAP (Extensible Authentication Protocol), що дозволяє написати власний велосипед алгоритм. Коротше, одні плюшки для великих дядьків.
 
У цьому циклі буде детально розібрана атака на WPA (2)-PSK, так як Enterprise — це зовсім інша історія, оскільки використовується лише у великих компаніях.
 
 
WPS / QSS
 
 
 WPS , він же Qikk aSS QSS — цікава технологія, яка дозволяє нам взагалі не думати про пароль, а просто додати води натиснути на кнопку і тут же підключитися до мережі. По суті це «легальний» метод обходу захисту за паролем взагалі, але дивно те, що він отримав широке поширення при дуже серйозному прорахунку в самій системі допуску — це через роки після сумного досвіду з WEP.
 
WPS дозволяє клієнту підключитися до точки доступу по 8-символьному коду, що складається з цифр (PIN). Однак через помилки в стандарті потрібно вгадати лише 4 з них. Таким чином, досить всього-навсього 10000 спроб підбору і незалежно від складності пароля для доступу до бездротової мережі ви автоматично отримуєте цей доступ, а з ним на додачу — і цей самий пароль як він є.
 
Враховуючи, що ця взаємодія відбувається до будь-яких перевірок безпеки, в секунду можна відправляти по 10-50 запитів на вхід через WPS, і через 3-15 годин (іноді більше, іноді менше) ви отримаєте ключі від раю .
 
Коли дана уразливість була розкрита виробники стали запроваджувати обмеження на число спроб входу (rate limit), після перевищення якого точка доступу автоматично на якийсь час відключає WPS — однак досі таких пристроїв не більше половини від уже випущених без цього захисту. Навіть більше — тимчасове відключення кардинально нічого не змінює, так як при одній спробі входу в хвилину нам знадобиться всього
10000/60/24 = 6,94
днів. А PIN зазвичай відшукується раніше, ніж проходиться весь цикл.
 
Хочу ще раз звернути вашу увагу, що при включеному WPS ваш пароль буде неминуче розкрита незалежно від своєї складності. Тому якщо вам взагалі потрібен WPS — включайте його тільки коли проводиться підключення до мережі, а в інший час тримаєте цей бекдор вимкненим.
 
Атака на WPS буде розглянута у другій частині.
 
ps: так як тема дуже обширна, в матеріал могли закрастися помилки і неточності. Замість криків «автор нічого не розуміє» краще використовувати коментарі та ЛЗ . Це буде тільки вітатися.
    
Джерело: Хабрахабр

0 коментарів

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