«Типичные ошибки реализации SMS-аутентификации», Ramazan (r0hack), DETEACT

«Типичные ошибки реализации SMS-аутентификации», Ramazan (r0hack), DETEACT

47a3212bc9721c62f1135ead56569f17?s=128

OWASP Moscow

March 05, 2020
Tweet

Transcript

  1. ТИПИЧНЫЕ ОШИБКИ РЕАЛИЗАЦИИ SMS- АУТЕНТИФИКАЦИИ RAMAZAN (@R0HACK)

  2. WHOAMI • Ramazan • Pentester в • Gold Team member

    в CodeBy • Bug Hunter - @r0hack
  3. ПРЕДИСЛОВИЕ • Виды угроз • Уязвимости • Рекомендации • Интересные

    кейсы
  4. ВИДЫ УГРОЗ • Account TakeOver (Захват аккаунта)

  5. ВИДЫ УГРОЗ • Account TakeOver (Захват аккаунта) • Имперсонация пользователя

  6. ВИДЫ УГРОЗ • Account TakeOver (Захват аккаунта) • Имперсонация пользователя

    • SMS-флуд
  7. ACCOUNT TAKEOVER Получаем частичный или полный доступ к чужому аккаунту

  8. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit

  9. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit • Одинаковый код для

    разных эндпоинтов
  10. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit • Одинаковый код для

    разных эндпоинтов • Отсутствие срока жизни кода
  11. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit • Одинаковый код для

    разных эндпоинтов • Отсутствие срока жизни кода • Привязка Rate Limit к Cookie
  12. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit • Одинаковый код для

    разных эндпоинтов • Отсутствие срока жизни кода • Привязка Rate Limit к Cookie • Каждый раз одинаковый код
  13. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit • Одинаковый код для

    разных эндпоинтов • Отсутствие срока жизни кода • Привязка Rate Limit к Cookie • Каждый раз одинаковый код • Можем предугадать ID сессии
  14. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit • Одинаковый код для

    разных эндпоинтов • Отсутствие срока жизни кода • Привязка Rate Limit к Cookie • Каждый раз одинаковый код • Можем предугадать ID сессии • Блокировка пользователей
  15. ВИДЫ УЯЗВИМОСТЕЙ • Отсутствие Rate Limit • Одинаковый код для

    разных эндпоинтов • Отсутствие срока жизни кода • Привязка Rate Limit к Cookie • Каждый раз одинаковый код • Можем предугадать ID сессии • Блокировка пользователей • SMS-флуд
  16. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток

  17. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток • Использовать специализированный

    сервис (Authy)
  18. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток • Использовать специализированный

    сервис (Authy) • Использовать 6-значные коды
  19. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток • Использовать специализированный

    сервис (Authy) • Использовать 6-значные коды • Не блокировать пользователя
  20. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток • Использовать специализированный

    сервис (Authy) • Использовать 6-значные коды • Не блокировать пользователя • Для каждого эндпоинта генерировать свой уникальный код
  21. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток • Использовать специализированный

    сервис (Authy) • Использовать 6-значные коды • Не блокировать пользователя • Для каждого эндпоинта генерировать свой уникальный код • Не использовать предсказуемые идентификаторы
  22. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток • Использовать специализированный

    сервис (Authy) • Использовать 6-значные коды • Не блокировать пользователя • Для каждого эндпоинта генерировать свой уникальный код • Не использовать предсказуемые идентификаторы • Ограничение количества попыток с одного IP-адреса
  23. РЕКОМЕНДАЦИИ • Убивать сессию после нескольких попыток • Использовать специализированный

    сервис (Authy) • Использовать 6-значные коды • Не блокировать пользователя • Для каждого эндпоинта генерировать свой уникальный код • Не использовать предсказуемые идентификаторы • Ограничение количества попыток с одного IP-адреса • По возможности использовать 2FA (Google Auth)
  24. КЕЙС С ОДИНАКОВЫМ КОДОМ ДЛЯ РАЗНЫХ ЭНДПОИНТОВ • Для эндпоинта

    регистрации пользователей • /api/user/register • Для эндпоинта авторизации пользователей • /api/user/auth
  25. КЕЙС С ОДИНАКОВЫМ КОДОМ Один и тот же код, до

    тех пор, пока его не используют В скопе с отсутствием Rate Limit Перебирать можно в несколько итераций Тем самым получаем 100% Profit.
  26. СПАСИБО ЗА ВНИМАНИЕ @r0hack