Wi-Fi мережі: проникнення та захист.
Wi-Fi мережі: проникнення та захист.
Матчастина
Бездротові технології*, Мережеві технології*, Інформаційна безпека*
Бездротові технології: це технології, що дозволяють передавати дані без застосування проводів чи кабелів. До таких технологій належать Wi-Fi, Bluetooth, NFC та інші.
Мережеві технології: це технології, що дозволяють об'єднувати різні комп'ютери, пристрої та інші обладнання в мережу. До таких технологій належать Ethernet, TCP/IP, VPN та інші.
Інформаційна безпека: це сукупність заходів, що мають на меті захистити інформацію від несанкціонованого доступу, зміни, видалення або пошкодження. До таких заходів належать використання паролів, шифрування даних, двофакторна автентифікація та інші.
Синоптики передбачають, що до 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-фільтрацію та приховування SSID.
Зміст:
1) Матчастина
2) Kali. Приховування SSID. MAC-фільтрація. WPS
Але спочатку – матчність.
Передайте мені цукор
Уявіть, що ви є пристрій, який приймає інструкції. До вас може підключитися кожен бажаючий та віддати будь-яку команду. Все добре, але на якомусь етапі потрібно фільтрувати особистостей, які можуть керувати вами. Ось тут і починається найцікавіше.
Як зрозуміти хто може віддати команду, а хто ні? Перше, що спадає на думку — за паролем. Нехай кожен клієнт перед тим, як передати нову команду, передасть пароль. Таким чином, ви виконуватимете лише команди, які супроводжувалися коректним паролем.
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://, але при цьому поставте HTTPS Everywhere, або стежте, щоб з адресного рядка «раптово» не зник замок, якщо хтось включить sslstrip — що, втім, переданих паролів вже не врятує), і навіть разом. Тоді ваших котиків ніхто не побачить.
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 буде розглянута у другій частині.
p.s: оскільки тема дуже широка, у матеріал могли зафарбуватися помилки та неточності. Замість криків «автор нічого не розуміє» краще використовувати коментарі та ЛЗ. Це тільки вітатиметься.