При такому тренді не може не радувати те, що 80% власників мереж не змінюють паролі доступу. В їх число входять і мережі компаній.
Цим циклом статей я хочу зібрати воєдино опису існуючих технології захистів, їх проблеми та способи обходу, таким чином, що в кінці читач сам зможе сказати, як зробити свою мережу непробивною, і навіть наочно продемонструвати проблеми на прикладі невдалого сусіда (do not try this at home, kids). Практична сторона злому буде освітлена за допомогою Kali Linux (колишній Backtrack 5) в наступних частинах.
Але спочатку - матчасть.
Передайте мені цукор
Уявіть, що ви - пристрій, який приймає інструкції. До вас може підключитися кожен бажаючий і віддати будь-яку команду. Все добре, але на якомусь етапі треба було фільтрувати особистостей, які можуть вами керувати. Ось тут і починається найцікавіше.
Як зрозуміти, хто може віддати команду, а хто ні? Перше, що спадає на думку - по паролю. Нехай кожен клієнт перед тим, як передати нову команду, передасть якийсь пароль. Таким чином, ви будете виконувати тільки команди, які супроводжувалися коректним паролем. Решта - фтопку.
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 і стандартах захисту бездротових мереж, про які йтиметься.
Наше завдання при зломі будь-якої передачі так чи інакше зводиться до перехоплення рукостискання, з якого можна буде або витягнути тимчасовий ключ, або вихідний пароль, або і те, і інше. В цілому, це досить довгий заняття і вимагає певної удачі.
Але це в ідеальному світі ...
Механізми захисту Wi-Fi
Технології створюються людьми і майже у всіх з них є помилки, іноді досить критичні, щоб обійти будь-яку найкращу в теорії захист. Нижче ми стисло нагадаємо списку існуючих механізмів захисту передачі даних по радіоканалу (тобто не зачіпаючи SSL, VPN і інші більш високорівневі способи).
OPEN
OPEN - це відсутність будь-якого захисту. Точка доступу і клієнт ніяк не маскують передачу даних. Майже будь-який бездротової адаптер в будь-якому ноутбуці з Linux може бути встановлений в режим прослуховування, коли замість відкидання пакетів, призначених не йому, він буде їх фіксувати і передавати в ОС, де їх можна спокійно переглядати. Хто у нас там поліз в Твіттер?
Саме за таким принципом працюють провідні мережі - в них немає вбудованого захисту і «врізавшись» в неї або просто підключившись до хабу / свічу мережевий адаптер буде отримувати пакети всіх, хто знаходиться в цьому сегменті мережі пристроїв у відкритому вигляді. Однак з бездротовою мережею «врізатися» можна з будь-якого місця - 10-20-50 метрів і більше, причому відстань залежить не тільки від потужності вашого передавача, а й від довжини антени хакера. Тому відкрита передача даних по бездротовій мережі набагато небезпечніша.
WEP - перший стандарт захисту Wi-Fi. Розшифровується як Wired Equivalent Privacy ( «еквівалент захисту дротових мереж»), але на ділі він дає набагато менше захисту, ніж ці самі провідні мережі, так як має безліч огріхів і зламуються безліччю різних способів, що через відстані, що покривається передавачем, робить дані більш уразливими. Його потрібно уникати майже так само, як і відкритих мереж - безпека він забезпечує тільки на короткий час, через яке будь-яку передачу можна повністю розкрити незалежно від складності пароля. Ситуація ускладнюється тим, що паролі в WEP - це або 40, або 104 біта, що є вкрай коротка комбінація і підібрати її можна за секунди (це без урахування помилок в самому шифруванні).
WEP був придуманий в кінці 90-х, що його виправдовує, а ось тих, хто їм до цих пір користується - немає. Я до сих пір на 10-20 WPA-мереж стабільно знаходжу хоча б одну WEP-мережу.
На практиці існувало кілька алгоритмів шифрування переданих даних - Neesus, MD5, Apple - але всі вони так чи інакше небезпечні. Особливо примітний перший, ефективна довжина якого - 21 біт (
Основна проблема WEP - у фундаментальній помилку проектування. Як було проілюстровано на початку - шифрування потоку робиться за допомогою тимчасового ключа. WEP фактично передає кілька байт цього самого ключа разом з кожним пакетом даних. Таким чином, незалежно від складності ключа розкрити будь-яку передачу можна просто маючи достатню кількість перехоплених пакетів (кілька десятків тисяч, що досить мало для активно використовується мережі).
Про атаки на WEP буде сказано в третій частині.
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. він же Qikk aSSQSS - цікава технологія, яка дозволяє нам взагалі не думати про пароль, а просто додати води натиснути на кнопку і тут же підключитися до мережі. По суті це «легальний» метод обходу захисту по паролю взагалі, але дивно те, що він набув широкого поширення при дуже серйозному прорахунку в самій системі допуску - це через роки після сумного досвіду з WEP.
WPS дозволяє клієнту підключитися до точки доступу по 8-символьного коду, що складається з цифр (PIN). Однак через помилки в стандарті потрібно вгадати лише 4 з них. Таким чином, достатньо всього-на-всього 10000 спроб підбору і незалежно від складності пароля для доступу до бездротової мережі ви автоматично отримуєте цей доступ, а з ним на додачу - і цей самий пароль як він є.
З огляду на, що ця взаємодія відбувається до будь-яких перевірок безпеки, в секунду можна відправляти по 10-50 запитів на вхід через WPS, і через 3-15 годин (іноді більше, іноді менше) ви отримаєте ключі від раю.
Коли дана уразливість була розкрита виробники стали запроваджувати обмеження на число спроб входу (rate limit), після перевищення якого точка доступу автоматично на якийсь час відключає WPS - проте до цих пір таких пристроїв не більше половини від уже випущених без цього захисту. Навіть більше - тимчасове відключення кардинально нічого не змінює, тому що при одній спробі входу в хвилину нам знадобиться всього 10000/60/24 = 6,94 днів. А PIN зазвичай відшукується раніше, ніж проходиться весь цикл.
Хочу ще раз звернути вашу увагу, що при включеному WPS ваш пароль буде неминуче розкрита незалежно від своєї складності. Тому якщо вам взагалі потрібен WPS - включайте його тільки коли здійснюється підключення до мережі, а в решту часу тримайте цей бекдор вимкненим.
Атака на WPS буде розглянута в другій частині.