OAuth — це широко використовуваний відкритий стандарт авторизації, який дозволяє додаткам безпечно отримувати доступ до ресурсів від імені користувачів без необхідності ділитися їхніми обліковими даними. Хоча він потужний і зручний, неправильна імплементація може призвести до вразливостей. Цей посібник описує основні кроки, інструменти та методи для пенетеста систем на основі OAuth, роблячи процес доступним і систематичним.
Розуміння OAuth: Короткий вступ
OAuth головним чином використовується для авторизації та складається з таких основних ролей:
- Власник ресурсу: Користувач, який володіє ресурсом (наприклад, акаунт у соціальній мережі).
- Клієнт: Додаток, що запитує доступ до ресурсу (наприклад, сторонній додаток).
- Ресурсний сервер: Сервер, на якому знаходиться ресурс (наприклад, API).
- Сервер авторизації: Сервер, що керує випуском і перевіркою токенів.
OAuth процес включає ці основні компоненти:
- Authorization Code Grant (найпоширеніший для веб-додатків)
- Implicit Grant (використовується у SPA; зазвичай не рекомендується через проблеми безпеки)
- Client Credentials Grant (використовується для автентифікації між машинами)
Чому тестувати OAuth?
Неправильне налаштування або використання OAuth може призвести до:
- Утечі токенів
- Підвищення привілеїв
- Атаки фіксації сесій
- Обхід авторизації
Пенетест OAuth: Ключові точки атаки
Пенетест OAuth фокусується на виявленні вразливостей, таких як:
- Недостатня перевірка токенів: Слабкі механізми перевірки можуть дозволити зловмисникам використовувати викрадені токени.
- Маніпуляція з URI перенаправлення: Погана перевірка URI перенаправлення може призвести до атак відкритого перенаправлення.
- Cross-Site Request Forgery (CSRF): Відсутність механізмів захисту від CSRF може скомпрометувати авторизацію.
- Повторне використання або атаки повтору токенів: Токени доступу або поновлення можуть бути використані зловмисниками, якщо вони не належним чином захищені.
- Неправильні обмеження області: Занадто широкі області можуть дозволити несанкціоновані дії.
Крок за кроком: Пенетест OAuth
1. Розвідка та збирання інформації
- Визначте кінцеві точки, пов'язані з OAuth-потоками, такі як
/authorize
і/token
. - Перегляньте документацію API та специфікації OpenAPI (Swagger) для областей OAuth та дозволів.
Інструменти:
- Burp Suite: Використовуйте проксі для захоплення запитів і відповідей, особливо під час OAuth-потоку.
- Postman: Допомагає у вивченні API-запитів та поведінки токенів.
- Nmap та Nikto: Для розвідки асоційованих серверів.
2. Аналіз перевірки URI перенаправлення
Параметр redirect_uri
вказує, куди сервер авторизації повинен надіслати код авторизації або токен після підтвердження користувача. Погана перевірка може призвести до відкритих перенаправлень або отримання зловмисними сайтами чутливих токенів.
Як тестувати:
- Спробуйте вказати різні домени або піддомени в параметрі
redirect_uri
. - Спробуйте включити спеціальні символи, такі як
..
,%2F
або послідовності подорожі по шляхах. - Перевірте, чи сервер відхиляє незареєстровані URI.
Приклад: Припустимо, зареєстрований redirect_uri
— https://example.com/callback
. Спробуйте ввести:
https://evil.com/callback
https://example.com/evil
Інструменти:
- Повторювач Burp Suite: Змініть значення
redirect_uri
і спостерігайте за поведінкою. - OWASP ZAP: Скануйте URI перенаправлення на наявність потенційних вразливостей.
3. Перевірка токенів і безпека
Токени є основним елементом OAuth. Неправильне їхнє оброблення може призвести до серйозних проблем з безпекою.
Як тестувати:
- Перевірте термін дії токенів: Тестуйте, чи токени згорають відповідно до очікувань.
Спробуйте повторно використовувати токени після їх закінчення терміну дії.
- Атаки повтору (Replay Attacks): Захопіть токен доступу та спробуйте використати його в іншій сесії, щоб перевірити, чи буде він прийнятий.
- Обмеження області (Scope Restrictions): Перевірте, чи може токен з мінімальними дозволами отримати доступ до ресурсів з високими привілеями.
- Маніпуляція з JWT (JWT Manipulation): Для токенів на основі JWT:
- Декодуйте токен за допомогою інструментів, таких як jwt.io.
- Перевірте на наявність слабких алгоритмів (наприклад, none
) або відсутність перевірки підпису.
Приклад: Декодуйте токен JWT:
echo "" | base64 -d
Інструменти:
- JWT Toolkit: Аналізуйте та маніпулюйте JSON Web токенами.
- Postman: Виконуйте API запити з користувацькими токенами, щоб перевірити підвищення привілеїв.
4. Захист від CSRF
OAuth повинен використовувати механізми захисту від CSRF, особливо під час обміну кодом авторизації.
Як тестувати:
- Перевірте відсутність параметра
state
в кінцевій точці/authorize
. Параметрstate
повинен бути унікальним і пов'язаний із сесією користувача. - Спробуйте підробити запити без дійсних анти-CSRF токенів.
Інструменти:
- Генератор PoC CSRF в Burp Suite.
- OWASP ZAP.
5. Неправильні налаштування областей і привілеїв
Області OAuth визначають дозволи, надані токену. Неправильні налаштування можуть дозволити несанкціонований доступ.
Як тестувати:
- Запросіть різні області та спостерігайте, які дозволи надаються.
- Використовуйте мінімальні дозволи та спробуйте отримати доступ до обмежених кінцевих точок.
Приклад: Якщо токен виданий для read_profile
, спробуйте отримати доступ до запису або адміністративних кінцевих точок:
curl -H "Authorization: Bearer " https://api.example.com/admin
6. Фіксація сесій і проблеми з виведенням
Токени сесій, прив'язані до OAuth, можуть бути вразливими до атак фіксації або неправильного інвалідного виведення.
Як тестувати:
- Використовуйте викрадені токени між сесіями або користувачами.
- Перевірте, чи інвалідовуються токени при виході.
Інструменти:
- Intruder в Burp Suite: Повторно використовуйте викрадені токени сесій.
- TokenReplay: Тестуйте сценарії повторного використання токенів.
Приклад: Робочий процес пенетеста OAuth
Розглянемо реальний приклад пенетеста:
- Розвідка: Визначте кінцеві точки OAuth (
/authorize
,/token
,/userinfo
). - Зловживання URI перенаправлення:
- Зареєстрований URI:
https://myapp.com/callback
. - Тест: Надішліть
https://malicious.com/callback
. - Результат: Якщо сервер приймає цей URI, то система вразлива.
- Атака повтору токенів:
- Захопіть дійсний токен.
- Спробуйте використати його на іншій кінцевій точці або акаунті.
- Якщо це вдасться, система не має належної перевірки.
- Маніпуляція областями:
- Токен видано для
read_profile
. - Спробуйте: Доступ до
https://api.example.com/admin
. - Результат: Невідповідний доступ підтверджує неправильне застосування обмежень області.
Кращі інструменти для пенетеста OAuth
- Burp Suite: Комплексне перехоплення та маніпулювання.
- OWASP ZAP: Автоматичне сканування на наявність вразливостей, пов'язаних з OAuth.
- Postman: Дослідження поведінки API та обробки токенів.
- JWT.io: Декодування та аналіз JWT токенів.
- Nmap: Початкова розвідка.
Виправлення та найкращі практики
Якщо під час пенетеста були виявлені вразливості:
- Забезпечте перевірку URI перенаправлення:
- Дозволяйте тільки URI, що потрапляють до білого списку.
- Використовуйте безпечні токени:
- Впроваджуйте короткоживучі токени з механізмами поновлення.
- Підписуйте та перевіряйте токени безпечно.
- Перевіряйте області:
- Обмежуйте доступ на основі принципу найменших привілеїв.
- Впроваджуйте захист від CSRF:
- Завжди використовуйте унікальний параметр
state
в OAuth процесі.
Якщо вам сподобався цей контент, поставте «клацання» та поділіться ним
Слідкуйте за мною на : https://www.linkedin.com/in/rishav-anand-224bb5229/
Перекладено з: Earn $100–500 after Pentesting OAuth