Основные сценарии
- Перегрузка. Многократный вызов методов поиска, выгрузки и генерации отчётов.
- Перебор идентификаторов. Последовательный запрос объектов по номерам: заказов, пользователей, документов.
- Злоупотребление логикой. Массовая проверка промокодов, регистрация аккаунтов, бронирование без оплаты.
- Обход клиентских ограничений. Запросы в обход интерфейса, который ограничивает действия пользователя.
Признаки в журналах
- Большая доля ответов 404 и 403 у одного клиента — признак перебора.
- Запросы без заголовков, которые всегда отправляет ваше мобильное приложение, или со старой версией приложения, которую давно никто не использует.
- Неестественно ровные интервалы между запросами.
- Вызовы методов в порядке, невозможном для интерфейса: например, оформление заказа без просмотра корзины.
- Рост времени ответа отдельных методов — поиска, выгрузок, отчётов — при обычном общем трафике.
Атака или легитимная нагрузка
API нагружают и честные клиенты: синхронизация после выхода новой версии приложения, ночная выгрузка партнёра, интеграция, которую разработчик запустил с ошибкой в цикле. Отличие — в источнике и форме запросов: легитимный клиент приходит с известным ключом, известного приложения и с понятным набором методов. Поэтому лимиты лучше считать по ключу и пользователю, а не только по адресу: так ошибка одного партнёра не затронет остальных, а атака без ключа упрётся в самые строгие ограничения.
Ущерб
- Утечка данных через перебор идентификаторов — самое тяжёлое последствие.
- Перегрузка базы тяжёлыми методами, из-за которой не работают ни сайт, ни приложение.
- Прямые расходы: SMS, платные внешние API, которые ваш метод вызывает на каждый запрос.
Защита
Для API работают лимиты по ключу, пользователю и методу, проверка схемы запросов, подпись запросов мобильного приложения и отдельные лимиты на тяжёлые методы. Подробно — на странице защиты API; общие принципы лимитов — в разделе об ограничении скорости.
Вопросы и ответы
Нужна ли отдельная защита для GraphQL?
Да: в GraphQL один запрос может развернуться в огромную выборку. Нужны ограничения глубины и сложности запросов.
Можно ли включить проверку браузера для API?
Для запросов из браузера — да: проверка проходит на странице, и затем запросы к API идут с полученным токеном. Мобильные приложения и серверные интеграции проверку браузера не пройдут, для них используются ключи, подпись запросов и лимиты.
Помогает ли спрятать документацию API?
Немного: адреса методов всё равно видны в трафике приложения. Надёжнее исходить из того, что атакующему известны все методы, и проверять права и лимиты на каждом.
Читайте также
- ВозможностиЗащита API от DDoS, ботов и злоупотребленийЛимиты по ключам, схема запросов, защита мобильных приложений
- РешенияЗащита SaaS и веб-сервисов от L7-атакИзоляция клиентов, защита API и входа, данные для SLA
- РешенияЗащита бэкенда и API мобильных приложенийПодпись запросов, лимиты по устройству и пользователю